Docker进阶篇
Posted JF Coder
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker进阶篇相关的知识,希望对你有一定的参考价值。
文章目录
Docker Compose
Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务;Compose可在所有环境中工作:生产,登台,开发,测试以及CI工作流。Docker Compose轻松高效的管理容器
使用Compose基本上是一个三步过程:
- 使用定义您的应用环境,
Dockerfile
以便可以在任何地方复制它。 - 定义组成应用程序的服务,
docker-compose.yml
以便它们可以在隔离的环境中一起运行。 - “运行
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 Swarm
搭建docker集群
至少4台服务器
其中一台机器是管理员(称为manager1
),其中三台机器是工人(worker1
和worker2
, worker3
)。
主机之间的开放协议和端口
以下端口必须可用。在某些系统上,这些端口默认情况下处于打开状态。
- 用于群集管理通信的TCP端口2377
- TCP和UDP端口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 #工作者
删除节点
- 在manager服务器上
docker node update --availability drain 节点ID #使要删除节点离开容器
- 在该节点服务器上
# 让节点主动离开集群,让节点处于down状态
docker swarm leave
- 删除 node节点
# 删除 node节点(在 manager 上操作)
docker node rm 节点ID
强制删除节点
- 在强行删除管理器节点之前,必须首先将其降级为工作角色
$ docker node rm --force node9
如果报错
,可能是防火墙没有关闭,或者是前面所说的端口没有打开;
- 查看防火墙状态
firewall-cmd --state
- 停止firewall
systemctl stop firewalld.service
- 禁止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进阶篇的主要内容,如果未能解决你的问题,请参考以下文章