0.安装 Docker Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。
Docker CE 分为 stable
test
和 nightly
三个更新频道。
官方网站上有各种环境下的 安装指南 ,这里主要介绍 Docker CE 在 CentOS 上的安装。
1.CentOS 安装 Docker Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10, CentOS 7 满足最低内核的要求,所以我们在 CentOS 7 安装 Docker。
1.1.卸载(可选) 如果之前安装过旧版本的 Docker,可以使用下面命令卸载:
1 2 3 4 5 6 7 8 9 10 11 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine \ docker-ce
1.2.安装 docker 首先需要大家虚拟机联网,安装 yum 工具
1 2 3 yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 --skip-broken
然后更新本地镜像源:
1 2 3 4 5 6 7 8 # 设置docker镜像源 yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo yum makecache fast
然后输入命令:
1 yum install -y docker-ce
docker-ce 为社区免费版本。稍等片刻,docker 即可安装成功。
1.3.启动 docker Docker 应用需要用到各种端口,逐一去修改防火墙设置。非常麻烦,因此建议大家直接关闭防火墙!
启动 docker 前,一定要关闭防火墙后!!
启动 docker 前,一定要关闭防火墙后!!
启动 docker 前,一定要关闭防火墙后!!
1 2 3 4 # 关闭 systemctl stop firewalld# 禁止开机启动防火墙 systemctl disable firewalld
通过命令启动 docker:
1 2 3 4 5 6 7 systemctl start docker # 启动docker服务 systemctl stop docker # 停止docker服务 systemctl restart docker # 重启docker服务 systemctl enable docker # 开机自启动
然后输入命令,可以查看 docker 版本:
如图:
1.4.配置镜像加速 docker 官方镜像仓库网速较差,我们需要设置国内镜像服务:
参考阿里云的镜像加速文档:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
1 2 3 4 5 6 7 8 sudo mkdir -p /etc/ docker sudo tee /etc/ docker/daemon.json <<-'EOF' { "registry-mirrors" : ["https://ylmjgfp5.mirror.aliyuncs.com" ] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
2.CentOS7 安装 DockerCompose 2.1.下载 Linux 下需要通过命令下载:
1 2 # 安装 curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
以上命令作废,这尼玛都1.x版本的了
1 2 curl -L https://github.com/docker/compose/releases/download/v2.32.0/docker-compose-linux-x86_64 > /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
上传到/usr/local/bin/
目录也可以。
2.2.修改文件权限 修改文件权限:
1 2 # 修改权限 chmod +x /usr/local/bin/docker-compose
2.3.Base 自动补全命令: 1 2 # 补全命令 curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
如果这里出现错误,需要修改自己的 hosts 文件:
1 echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts
3.Docker 镜像仓库 搭建镜像仓库可以基于 Docker 官方提供的 DockerRegistry 来实现。
官网地址:https://hub.docker.com/_/registry
3.1.简化版镜像仓库 Docker 官方的 Docker Registry 是一个基础版本的 Docker 镜像仓库,具备仓库管理的完整功能,但是没有图形化界面。
搭建方式比较简单,命令如下:
1 2 3 4 5 6 docker run -d \ --restart=always \ --name registry \ -p 5000:5000 \ -v registry-data:/var/lib/registry \ registry
命令中挂载了一个数据卷 registry-data 到容器内的/var/lib/registry 目录,这是私有镜像库存放数据的目录。
访问 http://YourIp:5000/v2/\_catalog 可以查看当前私有镜像服务中包含的镜像
3.2.带有图形化界面版本 使用 DockerCompose 部署带有图象界面的 DockerRegistry,命令如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 version: "3.0" services: registry: image: registry volumes: - ./registry-data:/var/lib/registry ui: image: joxit/docker-registry-ui:static ports: - 8080 :80 environment: - REGISTRY_TITLE=传智教育私有仓库 - REGISTRY_URL=http://registry:5000 depends_on: - registry
3.3.配置 Docker 信任地址 我们的私服采用的是 http 协议,默认不被 Docker 信任,所以需要做一个配置:
1 2 3 4 5 6 7 8 # 打开要修改的文件 vi /etc/docker/daemon.json# 添加内容: "insecure-registries":["http://192.168.150.101:8080"]# 重加载 systemctl daemon-reload# 重启docker systemctl restart docker
4.Docker 基本操作 镜像 帮助文档 1 2 3 docker --help docker save --help
拉取镜像 从 DockerHub 拉取一个 nginx 镜像并查看 从Docker 搜索 nginx
查看镜像 查看拉取到的镜像
打包镜像 1 docker save -o nginx.tar nginx:latest
删除镜像 1 2 3 4 docker images docker rmi nginx:latest docker images
加载镜像 1 2 3 docker load -i nginx.tar docker images
容器 运行容器 1 docker run --name mn -p 80 :80 -d nginx
容器运行完成之后会产生一个唯一的 id
查看容器运行状态 1 2 3 4 [root@xiamu ~] CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1276f236aab4 nginx "/docker-entrypoint.…" 33 seconds ago Up 32 seconds 0.0.0.0:80->80/tcp,</div>80->80/tcp mn
查看容器的日志 记得加上容器的名称 mn
1 2 3 4 docker logs mn docker logs mn -f
nginx 启动成功, 能够正常访问
进入容器 1 2 3 4 5 6 7 8 9 10 11 docker exec -it mn bashpwd ls cd docker exec -it my-redis bash docker exec -it my-redis redis-cli
进入 nginx 目录 1 2 3 4 5 find / -name nginx cd /usr/ share/nginx/ html sed -i -e 's#Welcome to nginx#传智教育欢迎您#g' -e 's#<head>#<head><meta charset="utf-8">#g' index.html
修改完成之后页面也发生了变化
退出容器
停止容器 1 2 3 4 5 6 7 docker stop mn docker ps docker ps -a
开启容器
删除容器 注意我们无法删除一个正在运行的容器, 我们得先把容器停止了, 再删除, 或者使用-f 强制删除
1 2 3 4 docker stop mn docker rm mn docker rm mn -f
容器开启开机启动 因为容器每次关机之后, 就会被关闭, 执行如下命令就能解决
1 docker update mysql --restart=always
数据卷 创建数据卷 1 docker volume create html
查看所有的数据卷
查看数据卷的详细信息 1 docker volume inspect html
删除未使用的数据卷
删除指定的数据卷
挂载数据卷 使用-v 参数将数据卷挂载到容器上
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 docker run --name mn -p 80 :80 -v html:/usr/ share/nginx/ html -d nginx 查看运行的容器 docker ps 查看容器的详细信息 docker inspect html "Mountpoint" : "/var/lib/docker/volumes/html/_data" , 进入挂载点的目录 cd /var/ lib/docker/ volumes/html/ _data 使用vi命令随便修改index.html内容, 访问虚拟机ip, 发现nginx默认页面被修改掉了
tips: 以上挂载数据卷, 可以先提前创建数据卷 也可以不创建数据卷, 执行-v 参数, 会自动帮我们创建一个数据卷
练习题:
1 2 3 4 5 6 7 8 9 10 docker load -i mysql.tar docker run \ --name mysql \ -v /tmp/my sql/data:/ var/lib/my sql \ -v /tmp/my sql/conf/ hmy.cnf:/etc/my sql/conf.d/ hmy.cnf \ -p 3306 :3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -d \ mysql:5.7 .25 docker exec -it mysql mysql -uroot -p123456
不建议使用-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/my.cnf 更建议使用-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf conf.d 目录下的配置文件会加载到 my.cnf 中去, 如果用了第一种方式将会直接覆盖了 my.cnf 第二种方式将不会覆盖 my.cnf -e 表示是环境变量
DockerFile 自定义镜像 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 cd /tmp/mkdir docker-democd docker-demo/docker -demo.jarDockerfile jdk8 .tar.gzdocker build -t javaweb:1 .0 .docker imagesdocker run --name web -p 8090 :8090 -d javaweb:1 .0
此时的 Dockerfile 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 FROM ubuntu:16.04 ENV JAVA_DIR=/usr/localCOPY ./jdk8.tar.gz $JAVA_DIR / COPY ./docker-demo.jar /tmp/app.jar RUN cd $JAVA_DIR \ && tar -xf ./jdk8.tar.gz \ && mv ./jdk1.8.0_144 ./java8 ENV JAVA_HOME=$JAVA_DIR/java8ENV PATH=$PATH:$JAVA_HOME/binEXPOSE 8090 ENTRYPOINT java -jar /tmp/app.jar
如果每次打包镜像都安装一遍 java 环境, 那就显得太麻烦了, 所以我们可以引入 java:8-alpine 修改成
1 2 3 4 5 6 7 8 9 10 FROM java:8 -alpineCOPY ./docker-demo.jar /tmp/app.jar EXPOSE 8090 ENTRYPOINT java -jar /tmp/app.jar
再次构建运行
1 2 docker build -t javaweb:2 .0 .docker run --name web -p 8090 :8090 -d javaweb:2 .0
安装 DockerCompose 参考上面
DockerCompose 部署微服务集群 1 2 3 4 5 6 7 8 9 10 docker-compose up -d docker-compose logs -f docker-compose restart gateway userservice orderservice docker-compose logs -f
Docker 镜像仓库 参考上面的 带有图形化界面版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 vi /etc/docker/daemon.json ,"insecure-registries":["http://192.168.1.100:8080"] systemctl daemon-reload systemctl restart docker cd /tmp/ mkdir registry-ui cd registry-ui/ vim docker-compose.yml version: '3.0' services: registry: image: registry volumes: - ./registry-data:/var/lib/registry ui: image: joxit/docker-registry-ui:static ports: - 8080:80 environment: - REGISTRY_TITLE=传智教育私有仓库 - REGISTRY_URL=http://registry:5000 depends_on: - registry docker-compose up -d docker-compose logs -f# 访问http://192.168.1.100:8080/ # 上传镜像 # 下载镜像 docker images docker tag nginx:latest 192.168.1.100:8080/nginx:1.0 docker images docker push 192.168.1.100:8080/nginx:1.0# 删除已有的镜像 docker rmi nginx:latest docker rmi 192.168.1.100:8080/nginx:1.0# 拉取镜像 docker pull 192.168.1.100:8080/nginx:1.0 docker images
推送镜像到仓库前需要重命名镜像(docker tag), 以镜像仓库地址为前缀 镜像仓库推送前需要把仓库地址配置到 docker 服务的 daemon.json 文件中, 被 docker 信任