Docker进阶篇

Posted JF Coder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker进阶篇相关的知识,希望对你有一定的参考价值。

文章目录

Docker Compose

Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务;Compose可在所有环境中工作:生产,登台,开发,测试以及CI工作流。Docker Compose轻松高效的管理容器

使用Compose基本上是一个三步过程:

  1. 使用定义您的应用环境,Dockerfile以便可以在任何地方复制它。
  2. 定义组成应用程序的服务,docker-compose.yml 以便它们可以在隔离的环境中一起运行。
  3. “运行docker-compose up并撰写”将启动并运行您的整个应用程序。

一个docker-compose.yml看起来像这样:

version: "3.9"  # optional since v1.27.0
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
      - logvolume01:/var/log
    links:
      - redis
  redis:
    image: redis
volumes:
  logvolume01: 
  • 安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#官网地址超慢,备用地址:
curl -L https://get.daocloud.io/docker/compose/releases/download/1.28.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  • 将可执行权限应用于二进制文件:
sudo chmod +x /usr/local/bin/docker-compose
[root@jf-server02 composetest]# ll
total 16
-rw-r--r-- 1 root root 514 Mar  1 00:41 app.py #应用
-rw-r--r-- 1 root root 111 Mar  1 00:45 docker-compose.yml #定义服务
-rw-r--r-- 1 root root 252 Mar  1 00:44 Dockerfile #构建镜像
-rw-r--r-- 1 root root  12 Mar  1 00:42 requirements.txt 
  • 运行compose
docker-compose up
  • 如果您开始使用Compose with docker-compose up -d,请在完成服务后停止它们:
$ docker-compose stop
  • 您可以使用down 命令降低所有内容,完全删除容器。通过--volumes还删除Redis容器使用的数据量:
$ docker-compose down --volumes

yaml文件

  • docker-compose.yaml规则
#3层
version: '' #版本
services: '' #服务
服务1:web
  #服务配置
  images
  build
  network
  ........
服务2:redis
  .......
#其他配置
  volumes:
  networks:
  configs:
  

docker compose官方文档


Docker Swarm

搭建docker集群

至少4台服务器

其中一台机器是管理员(称为manager1),其中三台机器是工人(worker1worker2worker3)。

主机之间的开放协议和端口

以下端口必须可用。在某些系统上,这些端口默认情况下处于打开状态。

  • 用于群集管理通信的TCP端口2377
  • TCPUDP端口7946用于节点之间的通信
  • UDP端口4789用于覆盖网络流量

搭建集群

[root@centos7 ~]# docker swarm --help    #swarm命令详细
Usage:	docker swarm COMMAND
Manage Swarm
Options:
      --help   Print usage
Commands:
  init        Initialize a swarm
  join        Join a swarm as a node and/or manager
  join-token  Manage join tokens
  leave       Leave the swarm
  unlock      Unlock swarm
  unlock-key  Manage the unlock key
  update      Update the swarm
在manager服务器上初始化节点
  [root@centos7 ~]# docker swarm init --advertise-addr 192.168.69.131
    Swarm initialized: current node (3auwqn07akc4dm09p0h37o7re) is now a manager.
    To add a worker to this swarm, run the following command:
    docker swarm join \\
    --token SWMTKN-1-2loul1d5zds3bgir4crfh7stgq89r4hvzaznw7frg95dbx2jwc-3z3yeiwz9n35q2xqc6c3elt2o \\
    192.168.69.131:2377
为worker1,worker2,worker3服务器添加节点
[root@centos7 ~]# docker swarm join --token SWMTKN-1-2loul1d5zds3bgir4crfh7stgq89r4hvzaznw7frg95dbx2jwc-3z3yeiwz9n35q2xqc6c3elt2o 192.168.69.131:2377
This node joined a swarm as a worker.
可以自定义获取令牌
#获取令牌
docker swarm join-token manager #管理者
docker swarm join-token worker  #工作者
删除节点
  1. 在manager服务器上
   docker node update --availability drain 节点ID #使要删除节点离开容器
  1. 在该节点服务器上
     # 让节点主动离开集群,让节点处于down状态
     docker swarm leave
  1. 删除 node节点
   # 删除 node节点(在 manager 上操作) 
   docker node rm 节点ID
强制删除节点
  • 在强行删除管理器节点之前,必须首先将其降级为工作角色
$ docker node rm --force node9

如果报错,可能是防火墙没有关闭,或者是前面所说的端口没有打开;

  1. 查看防火墙状态
firewall-cmd --state
  1. 停止firewall
systemctl stop firewalld.service
  1. 禁止firewall开机启动
systemctl disable firewalld.service 
查看全部节点加入到集群成功(双主双从)
[root@centos7 ~]# docker node ls
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
3auwqn07akc4dm09p0h37o7re *  centos7   Ready   Active        Leader
gmphg1ronedtyu6lohgju3e56    centos7   Ready   Active        
jcizbovjafu4z9t5n4vr98eah    centos7   Ready   Active        
ycp95fmaycx841vl6tz8kf04v    centos7   Ready   Active        Reachable       

Docker的Raft协议保证集群要大于两台(manager)在线,如果只剩一台则无法使用集群;


集群启动

启动nginx

docker service create -p 8888:80 --name mynginx nginx
[root@centos7 ~]# docker service ls
ID            NAME     MODE        REPLICAS  IMAGE
9lp4yohv9l8e  mynginx  replicated  1/1       nginx:latest   

动态扩缩容,节点随机分配;

[root@centos7 ~]# docker service update --replicas 3 mynginx #创建三个副本

回滚到原来位置

[root@centos7 ~]# docker service update --replicas 1 mynginx #回滚

使用scale

[root@centos7 ~]# docker service scale mynginx=5  #扩展五台

一键三连


以上是关于Docker进阶篇的主要内容,如果未能解决你的问题,请参考以下文章

Docker笔记(进阶篇)— Docker Compose

《docker高级篇(大厂进阶):4.Docker网络》包括:是什么常用基本命令能干嘛网络模式docker平台架构图解

Docker进阶篇

docker-compose 进阶篇

Docker数据卷之进阶篇

Python进阶篇:MySQL隔离级别详解