一、什么是dockerfile?
DockerFile 分为四部分组成:基础镜像信、维护者信息、镜像操作指令和容器启动时执行指令。
build DockerFile文件生成项目镜像。
二、什么是docker-compose? (容器只能运行在单机而非分布式)
Docker run 或者 Dockerfile 可以让用户管理一个单独的应用容器;而 Compose 则允许
用户在一个模板(YAML 格式)中定义一组相关联的应用容器(被称为一个 project,即项
目),docker run web mysql redis
使用 Docker compose 可以管理多个容器,在 docker compose 配置文件中,所有容器通
过使用 service 来定义,然后使用 docker-compose 脚本来启动、停止和重启 docker 应用。
三、什么是docker-swarm?
Manager:接收客户端服务定义,将任务发送到 worker 节点;维护集群期望状态和集群管
理功能及 Leader 选举。默认情况下 manager 节点也会运行任务,也可以配置只做管理任务。
Worker:接收并执行从管理节点分配的任务,并报告任务当前状态,以便管理节点维护每
个服务期望状态。
Docker swarm 两个重点
重点一:
任务(Task):任务是 Swarm 中最小的调度单位,目前来说就是单一的容器。
重点二:
服务(Services):服务是指一组任务的集合,服务定义了任务的属性,服务有两种
模式:
replicated services (复制)按照一定规则在各个工作节点上运行指定个数的任务。
global services 每个工作节点上运行一个任务
Swarm 集群由管理节点和工作节点组成。我们来创建一个包含一个管理节点和一个工作节点的最小 Swarm 集群。
docker-swarm集群搭建:
192.168.0.11 (manager)
192.168.0.12 (worker)
192.168.0.13 (manager)
192.168.0.14 (worker)
192.168.0.11上管理节点初始化 swarm :
[root@manager1 ~]# docker swarm init
Swarm initialized: current node (b0ohpxfmfrjz7su1zealie45l) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-1zkkaw3w2zfg6i8cj5kfojn858hyig5k6m1trqhwlc2q9ft8mn-5y0qmdcsbxw4ep6zbnv2fhjdl 192.168.0.11:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
[root@manager1 ~]# systemctl stop firewalld
[root@manager1 ~]#
192.168.0.12、192.168.0.14上工作节点加入 swarm :
docker swarm join --token SWMTKN-1-1zkkaw3w2zfg6i8cj5kfojn858hyig5k6m1trqhwlc2q9ft8mn-5y0qmdcsbxw4ep6zbnv2fhjdl 192.168.0.11:2377
192.168.0.11上查看 swarm manager 的连接令牌
[root@manager1 ~]#docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join --token SWMTKN-1-1zkkaw3w2zfg6i8cj5kfojn858hyig5k6m1trqhwlc2q9ft8mn-cymca3h9llxtjw61geunexq0e 192.168.0.11:2377
[root@manager1 ~]#
192.168.0.13上管理节点加入 swarm :
docker swarm join --token SWMTKN-1-1zkkaw3w2zfg6i8cj5kfojn858hyig5k6m1trqhwlc2q9ft8mn-cymca3h9llxtjw61geunexq0e 192.168.0.11:2377
至此docker-swarm 集群搭建完成!
[root@manager1 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
b0ohpxfmfrjz7su1zealie45l * manager1 Ready Active Leader 20.10.17
w84rljbp8l4sr3xqnd1lc8e6j manager2 Ready Active Reachable 20.10.17
mi687zicwmyq7492zj8mqadkb work1 Ready Active 20.10.17
itd71adlroai072ek6qd1q6uw work2 Ready Active 20.10.17
[root@manager1 ~]#
查看 swarm worker 的连接令牌
docker swarm join-token worker
查看 swarm manager 的连接令牌
docker swarm join-token manager
使旧令牌无效并生成新令牌
docker swarm join-token --rotate
四、docker-swarm 服务部署及管理
# 创建服务
[root@manager1 ~]# docker service create --replicas 3 --name php richarvey/nginx-php-fpm
klqzg203vo8x07rnmajtul1up
overall progress: 3 out of 3 tasks
1/3: running [==================================================>]
2/3: running [==================================================>]
3/3: running [==================================================>]
verify: Service converged
[root@manager1 ~]#
[root@manager1 ~]#
[root@manager1 ~]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
klqzg203vo8x php replicated 3/3 richarvey/nginx-php-fpm:latest
[root@manager1 ~]#
[root@manager1 ~]#
[root@manager1 ~]# docker service ps k
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
xfshji5d37b2 php.1 richarvey/nginx-php-fpm:latest work2 Running Running 35 seconds ago
5s8qg5ek05nb php.2 richarvey/nginx-php-fpm:latest work1 Running Running 31 seconds ago
aqjk5bd9tyzg php.3 richarvey/nginx-php-fpm:latest manager1 Running Running 35 seconds ago
[root@manager1 ~]#
五、什么是docker-stack?
我们使用 docker service create 一次只能部署一个服务,我们可以使用docker-compose.yaml 我们可以一次启动多个服务或启动多个相关联的服务。
docker stack deploy -c docker-compose.yml wordpress