本文共 4376 字,大约阅读时间需要 14 分钟。
前言
主要目录是讲解三剑客之间的使用关系以及各自的角色。
需要具备知识docker-compose命令行和文件书写知识,docker命令,docker-swarm命令,docker-compose命令三剑客简介
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或更高版本。
参考docker-swarm操作
参考集群管理创建一个集群。
安装swarmdocker 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 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
转载地址:https://chenyuan.blog.csdn.net/article/details/80454111 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!