Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
本文所有操作都在centos7上面操作

安装与启动

# 一、安装Docker
curl -sSL https://get.daocloud.io/docker | sh    # 使用国内 daocloud 一键安装命令:
docker -v                                        # 查看Docker版本

# 二、启动与停止Docker
# *systemctl* 命令是系统服务管理器指令,它是 service 和 chkconfig 两个命令组合。
systemctl start docker    # 启动docker
systemctl stop docker     # 停止docker
systemctl restart docker  # 重启docker
systemctl status docker   # 查看docker状态
systemctl enable docker   # 开机启动
docker info               # 查看docker概要信息
docker --help             # 查看docker帮助文档

权限问题处理

操作镜像时可能会出现一些权限错误

# 报错: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/
sudo gpasswd -a username docker   #将普通用户username加入到docker组
newgrp docker                     #更新docker组
# 报错: is not in the sudoers file
# su 只是切换了root身份,但Shell环境仍然是普通用户的Shell;此时pwd,发现工作目录仍然是普通用户的工作目录
# su - 连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误。此时pwd,工作目录变成root的工作目录了。
su -            # 切换root用户
visudo          #切记,此处没有vi和sudo之间没有空格。末尾加入:your_user_name ALL=(ALL)  ALL 。保存,这样就把自己加入了sudo组,可以使用sudo命令了

镜像

docker images                    # 列出镜像。这些镜像都是存储在Docker宿主机的/var/lib/docker目录下
docker search 镜像名称            # 搜索镜像,网络中查找需要的镜像
docker pull centos:7             # 拉取镜像
docker rmi $IMAGE_ID             # 删除指定镜像 
docker rmi `docker images -q`    # 删除所有镜像

# 设置Docker镜像加速
vi /etc/docker/daemon.json       # 如果该文件不存在就手动创建
# 添加内容:  {"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]}
# {"registry-mirrors":["https://hub.daocloud.io"]}
# 之后重新启动服务:
systemctl daemon-reload
systemctl restart docker

容器

# 一、查看容器
docker ps                       # 查看正在运行容器
docker ps –a                    # 查看所有的容器(启动过的历史容器)
docker ps –l                    # 查看最后一次运行的容器
docker ps -f status=exited      # 查看停止的容器

# 二、创建与启动容器
# 创建容器命令:docker run
# -i:表示运行容器
# -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
# --name :为创建的容器命名。
# -v:表示目录映射关系(-v参数 后边为   宿主机目录:容器目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
# -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
# -p:表示端口映射(-p参数 后边为   宿主机端口:容器端口)。可以使用多个-p做多个端口映射

docker run -it --name=mycentos centos:7 /bin/bash                # 交互式容器
docker run -id --name=mycentos1 centos:7                         # 守护式容器
docker exec -it container_name (或者 container_id)  /bin/bash     # 登录守护式容器方式
# 使用exit命令 退出当前容器

# 三、停止与启动容器
docker stop $CONTAINER_NAME/ID                # 停止正在运行的容器:
docker start $CONTAINER_NAME/ID               # 启动已运行过的容器:

# 四、文件拷贝
docker cp 需要拷贝的文件或目录 容器名称:容器目录
docker cp 容器名称:容器目录 需要拷贝的文件或目录

# 五、目录挂载
# 我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
# 创建容器 添加-v参数 后边为   宿主机目录:容器目录
# 如果你共享的是多级的目录,可能会出现权限不足的提示。这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数  --privileged=true  来解决挂载的目录没有权限的问题
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos2 centos:7

# 六、查看容器IP地址
docker inspect mycentos2                                               # 查看容器运行的各种数据
docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos2     # 查看容器IP地址

# 七、删除容器
docker rm $CONTAINER_ID/NAME         # 删除指定的容器。注意,只能删除停止的容器
docker rm `docker ps -a -q`          # 删除所有容器:

部署应用

1 MySQL部署

docker pull mysql       # 拉取mysql镜像
docker images           # 查看镜像
# 创建MySQL容器
docker run -di --name=mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql  
# -p 代表端口映射,格式为  宿主机映射端口:容器运行端口
# -e 代表添加环境变量  MYSQL_ROOT_PASSWORD是root用户的登陆密码
# 进入mysql容器
docker exec -it mysql /bin/bash    
mysql -u root -p        # 登陆mysql

2 tomcat部署

docker pull tomcat:9-jre8    # 拉取tomcat镜像
# 创建tomcat容器
docker run -di --name=tomcat -p 9000:8080 -v /usr/local/myhtml:/usr/local/tomcat/webapps --privileged=true tomcat:7-jre7
# -v表示地址映射

部署web应用。修改cas系统的配置文件,修改数据库连接的url

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
  p:driverClass="com.mysql.jdbc.Driver"
  p:jdbcUrl="jdbc:mysql://172.17.0.6:3306/andydb?characterEncoding=utf8"
  p:user="root"
  p:password="123456" />

测试:地址栏输入:http://192.168.247.135:9000/cas/login

3 Nginx部署

# 拉取Nginx镜像
docker pull nginx
# 创建Nginx容器
docker run -di --name=nginx -p 80:80  nginx /bin/bash
# 测试Nginx。 浏览器地址栏输入: http://192.168.247.135
# 从容器拷贝配置文件到宿主机
docker cp nginx:/etc/nginx/nginx.conf nginx.conf

编辑nginx.conf,添加反向代理配置

upstream tomcat-cas {
    server 172.17.0.7:8080;
}
server {
    listen 80;
    server_name passport.andy.com;
    location / {
        proxy_pass http://tomcat-cas;
        index index.html index.htm;
    }
}
# 将修改后的配置文件拷贝到容器
docker cp nginx.conf  nginx:/etc/nginx/nginx.conf
# 重新启动容器
docker restart pinyougou_nginx
# 设置域名指向 ,host文件:192.168.247.135 passport.andy.com
# 浏览器测试:http://passport.andy.com/cas/login

4 Redis部署

# 拉取Redis镜像
docker pull redis
# 创建Redis容器
docker run -di --name=redis -p 6379:6379 redis
# 客户端测试,在你的本地电脑命令提示符下,用window版本redis测试:redis-cli -h 192.168.247.135

备份与迁移

# 容器保存为镜像
docker commit nginx mynginx
# nginx是容器名称
# mynginx是新的镜像名称
# 此镜像的内容就是你当前容器的内容,接下来你可以用此镜像再次运行新的容器

# 镜像备份
docker  save -o mynginx.tar mynginx
# -o 输出到的文件
# 执行后,运行ls命令即可看到打成的tar包

# 镜像恢复与迁移
# 首先我们先删除掉mynginx镜像
# 然后执行此命令进行恢复
docker load -i mynginx.tar
# -i 输入的文件
# 执行后再次查看镜像,可以看到镜像已经恢复

messchx
58 声望5 粉丝