创建服务
我们知道使用 docker-compose.yml
可以来一次配置、启动多个容器,在 Swarm
集群中也可以使用 compose
文件 (docker-compose.yml
) 来配置、启动多个服务。
使用 docker service create
一次只能部署一个服务,使用 docker-compose.yml
我们可以一次启动多个关联的服务。
我们以在 Swarm
集群中部署 WordPress
为例进行说明(官方例子):
# docker-compose.yml version: "3" services: wordpress: image: wordpress ports: - 80:80 networks: - overlay environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress deploy: mode: replicated replicas: 3 db: image: mysql networks: - overlay volumes: - db-data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress deploy: 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] volumes: db-data: networks: overlay:
在该compose文件中定义了3个服务,一个是wordpress服务,一个是worldpress依赖的数据库服务,另外一个是提供一个可视化页面的服务,通过该服务能够从浏览器中很直观的查看集群中各个服务的运行节点。
swarm中管理管理通过compose启动的服务,需要使用docker stack
命令。
部署服务
上面我们编写好了docker-compose.yml文件,文件中定义了我们要启动的服务,并且定义了各个服务之前的依赖关系,我们边可以通过该文件来启动一组服务了。
部署服务使用 docker stack deploy
,其中 -c
参数指定 compose 文件名,最后跟上服务名(自定义,这里为worldpress)。
[root@node1 /opt/mycontainer/wordpress]# docker stack deploy -c docker-compose.yml wordpress Creating network wordpress_overlay Creating network wordpress_default Creating service wordpress_worldpress Creating service wordpress_db Creating service wordpress_visualizer
从上面的执行结果可以看到,所有的服务都以"worldpress_x x x"的形式存在,这样是为了避免多个服务组之间的服务名冲突。
查看刚才启动的服务,可以观察到服务名称叫“wordpress”,服务数量有3个:
[root@node1 /opt/mycontainer/wordpress]# docker stack ls NAME SERVICES ORCHESTRATOR wordpress 3 Swarm
查看每个服务的信息:
[root@node1 /opt/mycontainer/wordpress]# docker stack services wordpress ID NAME MODE REPLICAS IMAGE PORTS 3c8tgiwvncn1 wordpress_visualizer replicated 1/1 dockersamples/visualizer:stable *:8080->8080/tcp vgh0g9aoxwgk wordpress_db replicated 1/1 mysql:latest wu96zajgvs1v wordpress_worldpress replicated 0/3 worldpress:latest *:81->80/tcp
删除服务
如果要移除服务,那么请使用docker stack down
,但是该命令不会移除服务所使用的 数据卷
,如果你想移除数据卷请使用 docker volume rm
。
[root@node1 /opt/mycontainer/wordpress]# docker stack down wordpress Removing service wordpress_db Removing service wordpress_visualizer Removing service wordpress_worldpress Removing network wordpress_overlay Removing network wordpress_default [root@node1 /opt/mycontainer/wordpress]# ls -1 /var/lib/docker/volumes/ ... metadata.db mydata registry_registry-data wordpress_db_data # 数据卷还在 [root@node1 /opt/mycontainer/wordpress]# docker volume rm wordpress_db_data wordpress_db_data # 数据卷被删除了 [root@node1 /opt/mycontainer/wordpress]# ls -1 /var/lib/docker/volumes/ ... metadata.db mydata registry_registry-data