前言
主要目录是讲解三剑客之间的使用关系以及各自的角色。
需要具备知识docker-compose命令行和文件书写知识,docker命令,docker-swarm命令,docker-compose命令
Compose 命令说明
docker-compose.yml 配置文件编写详解
Docker Compose 配置文件详解(V3)
官方配置详情
官方样例配置
三剑客简介
Docker Machine
Docker Machine是一个简化安装Docker环境的工具,主要作用是创建和管理docker主机。一般公司云服务器毕竟少,个人觉得Docker Machine在实际使用中用处不大。直接在云服务器上安装即可。
docker-compose
这个和下面要介绍的docker-swarm用处较大,compose是服务编排,即事先安排好服务的启动,依赖,创建服务的数量等等。主要作用在于服务的安排和部署上。dcoker-compose技术,就是通过一个.yml配置文件,将所有的容器的部署方法、文件映射、容器连接等等一系列的配置写在一个配置文件里。便利了复杂的多服务的部署。
docker-swarm
服务的集群。创建docker服务集群。通过暴露的简单的几条api命令实现集群的创建和使用。与docker-compose配合使用。docker-swarm关注的更多的是服务的查询,实际使用中不需要我们手动通过docker-swarm命令创建服务,创建服务交给docker-compose。
开始
安装docker
要求至少版本1.13或更高版本。
参考阿里云CentOS环境之docker安装,启动,加速器,docker-compose(十四)
docker-swarm操作
参考阿里云CentOS环境之-实战docker集群swarm(十五)集群管理创建一个集群。
安装swarm
docker pull swarm
创建集群
docker swarm init --listen-addr 127.0.0.1:8280 --advertise-addr 127.0.0.1
至此集群操作告一段落。上面我说过,docker swarm关注的是集群创建和查询,管理,我们不需要docker service create
手动创建服务,交给docker-compose来做。
docker-compose操作
执行安装docker-compose命令:
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
chmod +x /usr/local/bin/docker-compose
写2个yml,一个用于编译,一个用户部署
编译配置文件docker-compose-build.yml:
version: '3'
services:
eureka-server:
build: eureka-server
image: eureka-server
ports:
- 8284:8284
service-hi:
build: service-hi
image: service-hi
ports:
- 8286:8286
build指定需要编译的项目,image指定编译成功后镜像名(默认镜像名为当前项目名+服务名)。ports指定端口号
执行编译命令:
docker-compose -f docker-compose-build.yml build
部署配置文件docker-compose.yml:
version: '3'
services:
eureka-server:
image: eureka-server
restart: always
ports:
- 8284:8284
service-hi:
image: service-hi
restart: always
ports:
- 8286:8286
image指定部署的镜像名,重点是deploy配置,指定在集群部署里的参数,具体配置建议看docker-compose.yml 配置文件编写详解
部署命令:
docker stack deploy -c docker-compose.yml getstartedlab
getstartedlab是应用名,启动的服务为应用名+服务名
,比如getstartedlab_eureka-server
docker-compose.yml
V3版本配置文件
version: "3"
services:
redis:
image: redis:alpine
ports:
- "6379"
networks:
- frontend
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
db:
image: postgres:9.4
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
deploy:
placement:
constraints: [node.role == manager]
vote:
image: dockersamples/examplevotingapp_vote:before
ports:
- "5000:80"
networks:
- frontend
depends_on:
- redis
deploy:
replicas: 2
update_config:
parallelism: 2
restart_policy:
condition: on-failure
result:
image: dockersamples/examplevotingapp_result:before
ports:
- "5001:80"
networks:
- backend
depends_on:
- db
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
worker:
image: dockersamples/examplevotingapp_worker
networks:
- frontend
- backend
deploy:
mode: replicated
replicas: 1
labels: [APP=VOTING]
restart_policy:
condition: on-failure
delay: 10s
max_attempts: 3
window: 120s
placement:
constraints: [node.role == manager]
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
frontend:
backend:
volumes:
db-data:
与集群协作
例如:
version: '3'
services:
eureka-server:
image: chapter11-2_eureka-server
restart: always
ports:
- 8284:8284
deploy:
replicas: 3
service-hi:
image: chapter11-2_service-hi
restart: always
ports:
- 8286:8286
deploy:
replicas: 3
构建镜像
docker-compose -f docker-compose-dev.yml up
相关命令:
部署
官方配置
语法:docker stack deploy -c <composefile> <appname>
docker stack deploy -c docker-compose.yml getstartedlab
getstartedlab
服务的前缀名,相当于app名,里面的每个服务都属于应用下面。
删除服务:
docker stack rm getstartedlab
释放集群(在manager上执行)
docker swarm leave --force
展示应用下有多少服务
docker stack ls
展示应用下具体服务
docker stack ps getstartedlab
删除TAG为none的镜像
rm.sh
#删除TAG为none的容器
docker ps --all|grep "`docker images|grep none|awk '{print $3}'`"|awk '{print $1}'|xargs docker rm
删除服务名为“oil”,状态为"Exited"的容器
docker ps --all|grep "Exited"|grep "oil"|awk '{print $1}'|xargs docker rm
#删除TAG为none镜像
docker images|grep none|awk '{print $3}'|xargs docker rmi