当前位置:   article > 正文

Docker——Docker命令集合_docker pull 指定镜像源

docker pull 指定镜像源

摘要

本博文介绍docker命令集合,帮助大家更好的使用docker容器。

一、Docker的安装

1.1 一键安装:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

 也可以使用国内 daocloud 一键安装命令:

curl -sSL https://get.daocloud.io/docker | sh

1.2 普通安装

  1. #更新 apt 包索引
  2. sudo apt-get update
  3. #添加 Docker 的官方 GPG 密钥:
  4. curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
  5. #更新 apt 包索引
  6. sudo apt-get update
  7. #安装最新版本的 Docker Engine-Community 和 containerd ,或者转到下一步安装特定版本:
  8. sudo apt-get install docker-ce docker-ce-cli containerd.io
  9. #测试 Docker 是否安装成功,输入以下指令,打印出以下信息则安装成功:
  10. sudo docker run hello-world
  11. #删除安装包
  12. sudo apt-get purge docker-ce

二、Docker镜像源修改

由于docker默认的源为国外官方源,下载速度较慢,所以在学习和使用中可改为国内的镜像源,这样速度会提高狠多。 

国内Docker镜像仓库名称链接URL
Docker 官方中国区https://registry.docker-cn.com
网易http://hub-mirror.c.163.com
中国科学技术大学https://docker.mirrors.ustc.edu.cn
阿里云https://pee6w651.mirror.aliyuncs.com

3.1 vim /etc/docker/daemon.json

  1. vi /etc/docker/daemon.json
  2. #添加如下网易镜像源
  3. {
  4. "registry-mirrors": ["http://hub-mirror.c.163.com"]
  5. }

3.2 vim /etc/sysconfig/docker

在OPTIONS变量后追加参数  --registry-mirror=镜像源地址

  1. vi /etc/sysconfig/docker
  2. #编辑OPTIONS,添加中国科技大学的镜像源
  3. OPTIONS='--selinux-enabled --log-driver=journald --registry mirror=https://docker.mirrors.ustc.edu.cn'

3.3 vim /etc/default/docker

添加DOCKER_OPTS="--registry-mirror=镜像源"

  1. vi /etc/default/docker
  2. #指定镜像源为阿里的镜像源
  3. DOCKER_OPTS="--registry-mirror=https://pee6w651.mirror.aliyuncs.com"
  4. 其他:docker pull拉取镜像时也可以指定仓库下载地址

3.4 vim /etc/docker/daemon.json

如果没有先建一个即可

sudo vim /etc/docker/daemon.json

修改配置文件

  1. {
  2. "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
  3. }

使配置文件生效

sudo systemctl daemon-reload

重启Docker

sudo service docker restart

测试配置是否成功

docker search nginx

三、Docker常用命令

3.1 Docker启动与停止

  1. #启动:
  2. systemctl start docker
  3. #重启docker服务
  4. systemctl restart docker或者是sudo service docker restart
  5. #关闭docker
  6. docker service docker stop或者是docker systemctl stop docker
  7. #启动docker镜像
  8. docker start 应用名称
  9. #设置开机启动
  10. sudo systemctl enable docker
  11. #查看docker状态
  12. sudo systemctl status docker
  13. #查看docker内容器的运行状态
  14. sudo docker stats
  15. #查看docker概要信息
  16. sudo docker info
  17. #查看docker 帮助文档
  18. sudo docker --help

3.2 镜像的管理命令

  1. # 查看镜像
  2. docker images
  3. # 搜索镜像
  4. docker search 镜像名称
  5. # 拉取镜像
  6. docker pull 镜像名称
  7. # 删除单个镜像
  8. docker rmi 镜像ID
  9. # 删除多个镜像
  10. docker rmi 镜像ID 镜像ID 镜像ID

3.3 容器的管理命令

  1. # 查看正在运行的容器
  2. docker ps
  3. # 查看停止的容器
  4. docker ps -f status=exited
  5. # 查看所有容器(包括运行和停止)。
  6. docker ps -a
  7. # 创建与启动容器
  8. docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  9. -i:表示运行容器;
  10. -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端;
  11. --name:为创建的容器命名;
  12. -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个 -v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上;
  13. -d:在 run 后面加上 -d 参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加 -i -t 两个参数,创建容器后就会自动进容器里);
  14. -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个 -p 做多个端口映射。
  15. -P:随机使用宿主机的可用端口与容器内暴露的端口映射。
  16. # 创建并进入容器
  17. docker run -it --name 容器名称 镜像名称:标签 /bin/bash
  18. # 退出当前容器
  19. exit
  20. # 守护式方式创建容器
  21. docker run -di --name 容器名称 镜像名称:标签
  22. # 登录守护式容器方式
  23. docker exec -it 容器名称|容器ID /bin/bash
  24. # 停止容器
  25. docker stop 容器名称|容器ID
  26. # 启动容器
  27. docker start 容器名称|容器ID
  28. # 文件拷贝
  29. docker cp 需要拷贝的文件或目录 容器名称:容器目录
  30. # 也可以将文件从容器内拷贝出来。
  31. docker cp 容器名称:容器目录 需要拷贝的文件或目录
  32. # 目录挂载(容器数据卷操作)
  33. docker run -di -v /mydata/docker_centos/data:/usr/local/data --name centos7-01 centos:7
  34. # 多目录挂载
  35. docker run -di -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2 镜像名
  36. # 匿名挂载
  37. docker run -di -v /usr/local/data --name centos7-02 centos:7
  38. # 查看 volume 数据卷信息
  39. docker volume ls
  40. # 匿名挂载
  41. docker run -di -v docker_centos_data:/usr/local/data --name centos7-03 centos:7
  42. # 查看 volume 数据卷信息
  43. docker volume ls
  44. # 指定目录挂载
  45. docker run -di -v /mydata/docker_centos/data:/usr/local/data --name centos7-01 centos:7
  46. # 多目录挂载
  47. docker run -di -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2 镜像名
  48. # 只读。只能通过修改宿主机内容实现对容器的数据管理。
  49. docker run -it -v /宿主机目录:/容器目录:ro 镜像名
  50. # 读写,默认。宿主机和容器可以双向操作数据。
  51. docker run -it -v /宿主机目录:/容器目录:rw 镜像名
  52. # 查看容器 IP 地址
  53. docker inspect 容器名称|容器ID
  54. #删除容器
  55. # 删除指定容器
  56. docker rm 容器名称|容器ID
  57. # 删除多个容器
  58. docker rm 容器名称|容器ID 容器名称|容器ID

四、Docker备份与恢复迁移命令

  1. # docker save 将指定镜像保存成 tar 归档文件。
  2. docker save [OPTIONS] IMAGE [IMAGE...]
  3. docker save -o /root/mycentos7.tar mycentos:7
  4. # 使用 docker load 导入 docker save 命令导出的镜像归档文件。
  5. docker load [OPTIONS]
  6. docker load -i mycentos7.tar
  7. # 镜像迁移
  8. 镜像迁移同时涉及到了上面两个操作,备份和恢复。 我们可以将任何一个 Docker 镜像从一台机器迁移到另一台机器。在迁移过程中,首先我们要把容器构建为 Docker 镜像。然后, 该 Docker 镜像被作为 tar 包文件保存到本地。此时只需要拷贝或移动该镜像到我们想要的机器上,恢复该镜像并运行容器即可。

五、Docker网络管理命令

  1. # docker 默认网络
  2. docker network ls
  3. # 通过 docker network create 命令可以创建自定义网络模式,创建一个基于 bridge 网络模式的自定义网络模式 custom_network
  4. docker network create custom_network
  5. # 通过自定义网络模式 custom_network 创建容器:
  6. docker run -di --name bbox05 --net custom_network busybox
  7. # 通过 docker network connect 网络名称 容器名称 为容器连接新的网络模式
  8. docker network connect bridge bbox05
  9. # 通过 docker network disconnect 网络名称 容器名称 命令断开网络
  10. docker network disconnect custom_network bbox05
  11. # 移除网络
  12. docker network rm custom_network
  13. # 容器间网络通信
  14. docker run -di --name default_bbox01 busybox
  15. docker run -di --name default_bbox02 busybox

前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知,使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具。

Docker Compose 将所管理的容器分为三层,分别是工程(project)、服务(service)、容器(container)。Docker Compose 运行目录下的所有文件(docker-compose.yml)组成一个工程,一个工程包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖,一个服务可包括多个容器实例。

六、Doceker-compose安装

  1. #安装 Docker Compose 可以通过下面命令自动下载适应版本的 Compose,并为安装脚本添加执行权限
  2. sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
  3. #赋予权限
  4. sudo chmod +x /usr/local/bin/docker-compose
  5. #查看安装是否成功
  6. docker-compose -v

七、Doceker-compose常用命令

  1. # 下载服务镜像
  2. docker-compose pull:
  3. # ps:列出所有运行容器
  4. docker-compose ps
  5. # logs:查看服务日志输出
  6. docker-compose logs
  7. # up:构建、启动容器
  8. docker-compose up
  9. # kill:通过发送 SIGKILL 信号来停止指定服务的容器
  10. docker-compose kill eureka
  11. # port:打印绑定的公共端口,下面命令可以输出 eureka 服务 8761 端口所绑定的公共端口
  12. docker-compose port eureka 8761
  13. # build:构建或者重新构建服务
  14. docker-compose build
  15. # start:启动指定服务已存在的容器
  16. docker-compose start eureka
  17. # stop:停止已运行的服务的容器
  18. docker-compose stop eureka
  19. # rm:删除指定服务的容器
  20. docker-compose rm eureka
  21. # 设置指定服务运气容器的个数,以 service=num 形式指定
  22. docker-compose scale user=3 movie=3
  23. # run:在一个服务上执行一个命令
  24. docker-compose run web bash

当服务的配置发生更改时,可使用 docker-compose up 命令更新配置,此时,Compose 会删除旧容器并创建新容器,新容器会以不同的 IP 地址加入网络,名称保持不变,任何指向旧容起的连接都会被关闭,重新找到新容器并连接上去。

  1. links:服务之间可以使用服务名称相互访问,links 允许定义一个别名,从而使用该别名访问其它服务
  2. ,这样 Web 服务就可以使用 db 或 database 作为 hostname 访问 db 服务了。
  3. version: '2'
  4. services:
  5. web:
  6. build: .
  7. links:
  8. - "db:database"
  9. db:
  10. image: postgres

八、Doceker-compose详细命令

  1. config
  2. docker-compose config -q
  3. 验证 `docker-compose.yml` 文件。当配置正确时,不输出任何内容,当配置错误时,输出错误信息。
  1. pull
  2. docker-compose pull` 拉取服务依赖的镜像。
  3. # 拉取工程中所有服务依赖的镜像
  4. docker-compose pull
  5. # 拉取工程中 nginx 服务依赖的镜像
  6. docker-compose pull nginx
  7. # 拉取镜像过程中不打印拉取进度信息
  8. docker-compose pull -q
  1. up
  2. `docker-compose up` 创建并启动所有服务的容器。指定多个 yml 加 `-f` 选项。以守护进程模式运行加 `-d` 选项。
  3. # 前台启动
  4. docker-compose up
  5. # 后台启动
  6. docker-compose up -d
  7. # -f 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定,指定多个 yml
  8. docker-compose -f docker-compose.yml up -d
  1. logs
  2. `docker-compose logs` 查看服务容器的输出日志。默认情况下,docker-compose 将对不同的服务输出使用不同的颜色来区分。可以通过 `--no-color` 来关闭颜色。
  3. # 输出日志,不同的服务输出使用不同的颜色来区分
  4. docker-compose logs
  5. # 跟踪日志输出
  6. docker-compose logs -f
  7. # 关闭颜色
  8. docker-compose logs --no-color
  1. ps
  2.   
  3. `docker-compose ps` 列出工程中所有服务的容器。
  4. # 列出工程中所有服务的容器
  5. docker-compose ps
  6. # 列出工程中指定服务的容器
  7. docker-compose ps nginx
  1. run
  2. `docker-compose run` 在指定服务容器上执行一个命令。
  3. # 在工程中指定服务的容器上执行 echo "helloworld"
  4. docker-compose run nginx echo "helloworld"
  1. exec
  2. `docker-compose exec` 进入服务容器。
  3. # 进入工程中指定服务的容器
  4. docker-compose exec nginx bash
  5. # 当一个服务拥有多个容器时,可通过 --index 参数进入到该服务下的任何容器
  6. docker-compose exec --index=1 nginx bash
  1. pause
  2. `docker-compose pause` 暂停服务容器。
  3. # 暂停工程中所有服务的容器
  4. docker-compose pause
  5. # 暂停工程中指定服务的容器
  6. docker-compose pause nginx
  1. unpause
  2. `docker-compose unpause` 恢复服务容器。
  3. # 恢复工程中所有服务的容器
  4. docker-compose unpause
  5. # 恢复工程中指定服务的容器
  6. docker-compose unpause nginx
  1. restart
  2. `docker-compose restart` 重启服务容器。
  3. # 重启工程中所有服务的容器
  4. docker-compose restart
  5. # 重启工程中指定服务的容器
  6. docker-compose restart nginx
  1. start
  2. `docker-compose start` 启动服务容器。
  3. # 启动工程中所有服务的容器
  4. docker-compose start
  5. # 启动工程中指定服务的容器
  6. docker-compose start nginx
  1. stop
  2. `docker-compose stop` 停止服务容器。
  3. # 停止工程中所有服务的容器
  4. docker-compose stop
  5. # 停止工程中指定服务的容器
  6. docker-compose stop nginx
  1. kill
  2. `docker-compose kill` 通过发送 `SIGKILL` 信号停止指定服务的容器。
  3. # 通过发送 SIGKILL 信号停止工程中指定服务的容器
  4. docker-compose kill nginx
  1. rm
  2. `docker-compose rm` 删除服务(停止状态)容器。
  3. # 删除所有(停止状态)服务的容器
  4. docker-compose rm
  5. # 先停止所有服务的容器,再删除所有服务的容器
  6. docker-compose rm -s
  7. # 不询问是否删除,直接删除
  8. docker-compose rm -f
  9. # 删除服务容器挂载的数据卷
  10. docker-compose rm -v
  11. # 删除工程中指定服务的容器
  12. docker-compose rm -sv nginx
  1. down
  2. 停止并删除所有服务的容器、网络、镜像、数据卷。
  3. # 停止并删除工程中所有服务的容器、网络
  4. docker-compose stop
  5. # 停止并删除工程中所有服务的容器、网络、镜像
  6. docker-compose down --rmi all
  7. # 停止并删除工程中所有服务的容器、网络、数据卷
  8. docker-compose down -v
  1. images
  2. `docker-compose images` 打印服务容器所对应的镜像。
  3. # 打印所有服务的容器所对应的镜像
  4. docker-compose images
  5. # 打印指定服务的容器所对应的镜像
  6. docker-compose images nginx
  1. port
  2. `docker-compose port` 打印指定服务容器的某个端口所映射的宿主机端口。
  3. [root@localhost docker-nginx]# docker-compose port nginx 80
  4. 0.0.0.0:80
  1. top
  2. `docker-compose top` 显示正在运行的进程。
  3. # 显示工程中所有服务的容器正在运行的进程
  4. docker-compose top
  5. # 显示工程中指定服务的容器正在运行的进程
  6. docker-compose top nginx

九、Doceker-compose.yaml文件

详细启动一个docek的实例的配置请参考官方文档中的配置和网站上自己搜索对应的docker的配置文件。详细的网站在博文参考中,提供给大家参考。

  1. ---------------------Redis 配置指令参考---------------------
  2. version: "2"
  3. services:
  4. ### console
  5. console:
  6. build:
  7. context: ./images/console
  8. args:
  9. # console 容器 www-data用户密码
  10. - USERPASS=root
  11. - GIT_NAME=yangnan
  12. - GIT_EMAIL=20706149@qq.com
  13. - INSTALL_YARN=false
  14. volumes_from:
  15. - php-fpm
  16. - nginx
  17. - mysql
  18. - redis
  19. volumes:
  20. - ./ssh:/home/www-data/.ssh
  21. links:
  22. - redis
  23. - mysql
  24. tty: true
  25. ### php-fpm
  26. php-fpm:
  27. build: ./images/php-fpm
  28. volumes:
  29. - ./app/:/var/www/
  30. ### nginx
  31. nginx:
  32. image: nginx
  33. ports:
  34. - "8081:80"
  35. volumes_from:
  36. - php-fpm
  37. volumes:
  38. - ./logs/nginx/:/var/log/nginx/
  39. - ./images/nginx/sites:/etc/nginx/conf.d/
  40. links:
  41. - php-fpm
  42. ### mysql
  43. mysql:
  44. image: mysql
  45. ports:
  46. - "7706:3306"
  47. environment:
  48. MYSQL_ROOT_PASSWORD: "123"
  49. MYSQL_DATABASE: "test"
  50. MYSQL_USER: "root"
  51. MYSQL_PASSWORD: "123"
  52. volumes:
  53. - ./data/mysql:/var/lib/mysql
  54. ### redis
  55. redis:
  56. image: redis
  57. ports:
  58. - "6379:6379"
  59. volumes:
  60. - ./data/redis:/data

十、Docker compose build

10.1 DockerFile

  1. # 打包项目,获得 jar 包 docker-demo-1.0.jar
  2. mvn clean package
  3. # 在 jar 包所在路径创建 Dockerfile 文件,添加以下内容
  4. FROM java:8
  5. VOLUME /tmp
  6. ADD docker-demo-0.0.1-SNAPSHOT.jar app.jar
  7. RUN bash -c 'touch /app.jar'
  8. EXPOSE 9000
  9. ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]

10.2 Docker-compose.yml文件

  1. # 在 jar 包所在路径创建文件 docker-compose.yml,添加以下内容
  2. version: '2' # 表示该 Docker-Compose 文件使用的是 Version 2 file
  3. services:
  4. docker-demo: # 指定服务名称
  5. build: . # 指定 Dockerfile 所在路径
  6. ports: # 指定端口映射
  7. - "9000:8761"

10.3 Docker-compose up 编译

  1. # 在 docker-compose.yml 所在路径下执行该命令 Compose 就会自动构建镜像并使用镜像启动容器
  2. 访问 http://localhost:9000/hello 即可访问微服务接口
  3. docker-compose up
  4. docker-compose up -d // 后台启动并运行容器

 十一、Docker swarm命令

  1. # 初始化集群
  2. docker swarm init
  3. # 查看工作节点的 token
  4. docker swarm join-token worker
  5. # 查看管理节点的 token
  6. docker swarm join-token manager
  7. # 加入集群
  8. docker swarm join
  1. # 查看集群所有节点
  2. docker node ls
  3. # 查看当前节点所有任务
  4. docker node ps
  5. # 删除节点(-f强制删除)
  6. docker node rm 节点名称| 节点ID
  7. # 查看节点详情
  8. docker node inspect 节点名称| 节点ID
  9. # 节点降级,由管理节点降级为工作节点
  10. docker node demote 节点名称| 节点ID
  11. # 节点升级,由工作节点升级为管理节点
  12. docker node promote 节点名称| 节点ID
  13. # 更新节点
  14. docker node update 节点名称| 节点ID
  1. 创建服务
  2. docker service create
  3. # 查看所有服务
  4. docker service ls
  5. # 查看服务详情
  6. docker service inspect 服务名称|服务ID
  7. # 查看服务日志
  8. docker service logs 服务名称|服务ID
  9. # 删除服务(-f强制删除)
  10. docker service rm 服务名称|服务ID
  11. # 设置服务数量
  12. docker service scale 服务名称|服务ID=n
  13. # 更新服务
  14. docker service update 服务名称|服务ID

11.1 创建服务

docker service create --replicas 1 --name mynginx -p 80:80 nginx

  • docker service create:创建服务;
  • --replicas:指定一个服务有几个实例运行;
  • --name:服务名称。
可以通过 docker service ls 查看运行的服务。
  1. [root@manager1 ~]# docker service ls
  2. ID NAME MODE REPLICAS IMAGE PORTS
  3. hepx06k5ik5n mynginx replicated 1/1 nginx:latest *:80->80/tcp

可以通过 docker service inspect 服务名称|服务ID 查看服务的详细信息。

  1. [root@manager1 ~]# docker service inspect mynginx
  2. [
  3. {
  4. "ID": "k0dbjg1zzy3l3g71kdwa56ect",
  5. "Version": {
  6. "Index": 127
  7. },
  8. "CreatedAt": "2020-09-16T10:05:55.627974095Z",
  9. "UpdatedAt": "2020-09-16T10:05:55.629507771Z",
  10. "Spec": {
  11. "Name": "mynginx",
  12. "Labels": {},
  13. "TaskTemplate": {
  14. "ContainerSpec": {
  15. "Image": "nginx:latest@sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0",
  16. "Init": false,
  17. "StopGracePeriod": 10000000000,
  18. "DNSConfig": {},
  19. "Isolation": "default"
  20. },
  21. "Resources": {
  22. "Limits": {},
  23. "Reservations": {}
  24. },
  25. "RestartPolicy": {
  26. "Condition": "any",
  27. "Delay": 5000000000,
  28. "MaxAttempts": 0
  29. },
  30. "Placement": {
  31. "Platforms": [
  32. {
  33. "Architecture": "amd64",
  34. "OS": "linux"
  35. },
  36. {
  37. "OS": "linux"
  38. },
  39. {
  40. "OS": "linux"
  41. },
  42. {
  43. "Architecture": "arm64",
  44. "OS": "linux"
  45. },
  46. {
  47. "Architecture": "386",
  48. "OS": "linux"
  49. },
  50. {
  51. "Architecture": "mips64le",
  52. "OS": "linux"
  53. },
  54. {
  55. "Architecture": "ppc64le",
  56. "OS": "linux"
  57. },
  58. {
  59. "Architecture": "s390x",
  60. "OS": "linux"
  61. }
  62. ]
  63. },
  64. "ForceUpdate": 0,
  65. "Runtime": "container"
  66. },
  67. "Mode": {
  68. "Replicated": {
  69. "Replicas": 1
  70. }
  71. },
  72. "UpdateConfig": {
  73. "Parallelism": 1,
  74. "FailureAction": "pause",
  75. "Monitor": 5000000000,
  76. "MaxFailureRatio": 0,
  77. "Order": "stop-first"
  78. },
  79. "RollbackConfig": {
  80. "Parallelism": 1,
  81. "FailureAction": "pause",
  82. "Monitor": 5000000000,
  83. "MaxFailureRatio": 0,
  84. "Order": "stop-first"
  85. },
  86. "EndpointSpec": {
  87. "Mode": "vip",
  88. "Ports": [
  89. {
  90. "Protocol": "tcp",
  91. "TargetPort": 80,
  92. "PublishedPort": 80,
  93. "PublishMode": "ingress"
  94. }
  95. ]
  96. }
  97. },
  98. "Endpoint": {
  99. "Spec": {
  100. "Mode": "vip",
  101. "Ports": [
  102. {
  103. "Protocol": "tcp",
  104. "TargetPort": 80,
  105. "PublishedPort": 80,
  106. "PublishMode": "ingress"
  107. }
  108. ]
  109. },
  110. "Ports": [
  111. {
  112. "Protocol": "tcp",
  113. "TargetPort": 80,
  114. "PublishedPort": 80,
  115. "PublishMode": "ingress"
  116. }
  117. ],
  118. "VirtualIPs": [
  119. {
  120. "NetworkID": "st2xiy7pjzap093wz4w4u6nbs",
  121. "Addr": "10.0.0.15/24"
  122. }
  123. ]
  124. }
  125. }
  126. ]

可以通过 docker service ps 服务名称|服务ID 查看服务运行在哪些节点上。

 在对应的任务节点上运行 docker ps 可以查看该服务对应容器的相关信息。

11.2 创建服务

接下来我们测试一下服务是否能被正常访问,并且该集群下任意节点的 IP 地址都要能访问到该服务才行。测试结果:5 台机器均可正常访问到该服务。

11.3 弹性服务

将 service 部署到集群以后,可以通过命令弹性扩缩容 service 中的容器数量。在 service 中运行的容器被称为 task(任务)。 通过docker service scale服务名称|服务ID=n 可以将 service 运行的任务扩缩容为 n 个。 通过 docker service update --replicas n 服务名称|服务ID 也可以达到扩缩容的效果。 将 mynginx service 运行的任务扩展为 5 个:

  1. [root@manager1 ~]# docker service scale mynginx=5
  2. mynginx scaled to 5
  3. overall progress: 5 out of 5 tasks
  4. 1/5: running [==================================================>]
  5. 2/5: running [==================================================>]
  6. 3/5: running [==================================================>]
  7. 4/5: running [==================================================>]
  8. 5/5: running [==================================================>]
  9. verify: Service converged

通过 docker service ps 服务名称|服务ID 查看服务运行在哪些节点上。

我们再来一波缩容的操作,命令如下:

  1. [root@manager1 ~]# docker service update --replicas 3 mynginx
  2. mynginx
  3. overall progress: 3 out of 3 tasks
  4. 1/3: running [==================================================>]
  5. 2/3: running [==================================================>]
  6. 3/3: running [==================================================>]
  7. verify: Service converged

通过 docker service ps 服务名称|服务ID 查看服务运行在哪些节点上。

 在 Swarm 集群模式下真正意义实现了所谓的弹性服务,动态扩缩容一行命令搞定,简单、便捷、强大。

11.4 删除服务

通过 docker service rm 服务名称|服务ID 即可删除服务。

  1. [root@manager1 ~]# docker service rm mynginx
  2. mynginx
  3. [root@manager1 ~]# docker service ls
  4. ID NAME MODE REPLICAS IMAGE PORTS

11.5 容器的滚动更新及回滚

Redis 版本如何滚动升级至更高版本再回滚至上一次的操作。 首先,创建 5 个 Redis 服务副本,版本为 5,详细命令如下:

  1. # 创建 5 个副本,每次更新 2 个,更新间隔 10s,20% 任务失败继续执行,超出 20% 执行回滚,每次回滚 2
  2. docker service create --replicas 5 --name redis \
  3. --update-delay 10s \
  4. --update-parallelism 2 \
  5. --update-failure-action continue \
  6. --rollback-monitor 20s \
  7. --rollback-parallelism 2 \
  8. --rollback-max-failure-ratio 0.2 \
  9. redis:5
  1. --update-delay:定义滚动更新的时间间隔;
  2. --update-parallelism:定义并行更新的副本数量,默认为 1;
  3. --update-failure-action:定义容器启动失败之后所执行的动作;
  4. --rollback-monitor:定义回滚的监控时间;
  5. --rollback-parallelism:定义并行回滚的副本数量;
  6. --rollback-max-failure-ratio:任务失败回滚比率,超过该比率执行回滚操作,0.2 表示 20%。

然后通过以下命令实现服务的滚动更新。

docker service update --image redis:6 redis

 回滚服务,只能回滚到上一次操作的状态,并不能连续回滚到指定操作。

docker service update --rollback redis

博文参考

命令说明 - Docker —— 从入门到实践

Docker Compose | 菜鸟教程

Docker:Docker Compose 详解 - 简书

docker -compose 容器常用命令 - 时光一寸灰 - 博客园

https://www.exception.site/docker

Docker Dockerfile | 菜鸟教程

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/953836
推荐阅读
相关标签
  

闽ICP备14008679号