ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

【Docker】Docker Compose部署单节点多容器应用

【Docker】Docker Compose部署单节点多容器应用

文章目录

  • 一. Docker Compose 的能力
  • 二. 部署博客系统(博客+mysql)
    • 1. docker命令部署
    • 2. Compose文件部署多应用
  • 三. Docker Compose使用讲解
    • 1. 文件语法
    • 2. 启动compose
    • 3. 停止应用
    • 4. 其他命令
  • 四. 常用命令

一. Docker Compose 的能力

Docker Compose 通过一个YAML 文件来定义应用的服务、网络和卷等,实现单宿主机下启动多容器的部署和管理。

二. 部署博客系统(博客+mysql)

1. docker命令部署

bitnami部署文档:

https://hub.docker.com/r/bitnami/wordpress?uuid=DEB26A7C-3F72-4B06-AA81-1A5A78638230

#创建网络dockernetwork create wordpress-network

创建数据库

docker run -d --name mariadb \ --env ALLOW_EMPTY_PASSWORD=yes \ --env MARIADB_USER=bn_wordpress \ --env MARIADB_PASSWORD=bitnami \ --env MARIADB_DATABASE=bitnami_wordpress \ --network wordpress-network \ --volume mariadb_data:/bitnami/mariadb \ bitnami/mariadb:latest
dockervolume create--namewordpress_datadockerrun-d--namewordpress\-p18080:8080-p8443:8443\--envALLOW_EMPTY_PASSWORD=yes\--envWORDPRESS_DATABASE_USER=bn_wordpress\--envWORDPRESS_DATABASE_PASSWORD=bitnami\--envWORDPRESS_DATABASE_NAME=bitnami_wordpress\--networkwordpress-network\--volumewordpress_data:/bitnami/wordpress\bitnami/wordpress:latest

访问:

2. Compose文件部署多应用

# 包含4个一级key:version、services、networks、volumes。# 一. 服务services:mariadb:# 1. 容器名称# 如果不配置container_name# a.容器的名称以项目名称(所在目录名称)为前缀。# b. 以一个数字为后缀用于标识容器实例序号——因为Docker Compose允许扩缩容。container_name:mariadb# 2.本地镜像image:bitnami/mariadb:latest# 3. 端口映射ports:-'13306:3306'# 4. 卷映射## 会创建一个卷:如果容器中此目录下有则不用volumes:-'mariadb_data:/bitnami/mariadb'# 5. 环境变量映射environment:# ALLOW_EMPTY_PASSWORD is recommended only for development.-ALLOW_EMPTY_PASSWORD=yes-MARIADB_USER=bn_wordpress-MARIADB_DATABASE=bitnami_wordpress# 6. 重启策略## always:开机就重启restart:always# 7. 网络:networks:-blogwordpress:container_name:wordpressimage:bitnami/wordpress:latestports:-'10081:80'-'10443:8443'volumes:-'wordpress_data:/bitnami/wordpress'environment:# ALLOW_EMPTY_PASSWORD is recommended only for development.-ALLOW_EMPTY_PASSWORD=yes# 内部网络:直接使用容器端口和hostname-WORDPRESS_DATABASE_HOST=mariadb-WORDPRESS_DATABASE_PORT_NUMBER=3306-WORDPRESS_DATABASE_USER=bn_wordpress-WORDPRESS_DATABASE_NAME=bitnami_wordpressdepends_on:-mariadbnetworks:-blogrestart:always# 二. 卷配置## 总体卷volumes:mariadb_data:driver:localwordpress_data:driver:local# 三. 网络## 这里的容器都用此网络networks:blog:

启动

dockercompose-fdocker-compose.yaml up-d

注意:

增量更新:修改 Docker Compose 文件重新启动应用,只会触发修改的容器重新启动。
数据不删:默认就算down了容器,所有挂载的卷不会被移除。比较安全。

三. Docker Compose使用讲解

1. 文件语法

包含4个一级key:version、services、networks、volumes。

  1. version:可选。位于文件的第一行。它定义了Compose文件格式(主要是API)的版本

  2. services:用于定义不同的应用服务。Docker Compose会将每个服务部署在各自的容器中。

  3. networks: 用于指引Docker创建新的网络。默认情况下,Docker Compose会创建bridge网络。这是一种单主机网络,只能够实现在同一主机上容器的连接。当然,也可以使用driver属性来指定不同的网络类型。

  4. volumes用于指引Docker来创建新的卷。 当第一次部署该应用的时候,Docker Compose会检查是否有同名的卷存在。如果不存在,则会创建它。


Docker Compose会在部署服务之前创建网络和卷。如下可见,Docker
Compose会首先创建网络和卷(甚至先于构建和拉取镜像)​。

2. 启动compose

默认情况下,docker-compose up会查找名为docker-compose.yml或docker-compose.yaml的Compose文件。
如果Compose文件是其他文件名,则需要通过-f参数来指定。

docker-compose-f prod-equus-bass.yml up-d

启动时会构建所需的镜像,创建网络和卷,并启动容器。

前台启动:&

# 前台启动:&docker-compose-f prod-equus-bass.yml up-d&# 后台启动docker-compose up-d# 修改完docker文件后重新发布docker-compose up--build

3. 停止应用

停止应用:docker-compose down

docker-compose down# 尝试关闭两个服务1.Stopping counterapp_redis_1...2.Stopping counterapp_web-fe_1...# stop指令会发送SIGTERM信号。信号会被发送到每个容器中PID为1的进程。1.redis_1|1:signal-handler Received SIGTERM scheduling shutdown...2.redis_1|1:M09Jan11:16:00.456# User requested shutdown...3.redis_1|1:M09Jan11:16:00.456*Saving the final RDB snap...|# 优雅关闭1.redis_11:M09Jan11:16:00.463*DB saved on disk5.Stopping counterapp_redis_1...done6.counterapp_redis_1 exitedwithcode0# 已成功停止Redis。8.Stopping counterapp_web-fe_1...done# 容器被删除。10. Removing counterapp_redis_1...done11. Removing counterapp_web-fe_1...done# 删除网络12. Removing network counterapp_counter-net# docker-compose up进程退出。13.[1]+Done docker-compose up

需要特别注意的是,counter-vol卷并没有被删除,因为卷应该是用于数据的长期持久化存储的。因此,卷的生命周期是与相应的容器完全解耦的。

4. 其他命令

查看应用状态

docker-compose ps Name Command State Ports--------------------------------------------------------------------------counterapp_redis_1 docker-entrypoint...Up6379/tcp counterapp_web-fe_1 python app.py Up0.0.0.0:5000->5000/tcp

列出各个容器内运行的进程

docker-compose top counterapp_redis_1 PID USER TIME COMMAND------------------------------------843dockrema0:00redis-server counterapp_web-fe_1 PID USER TIME COMMAND-------------------------------------------------928root0:00python app.py1016root0:00/usr/local/bin/python app.py

四. 常用命令

文件配置文档:
https://docs.docker.com/reference/compose-file/

创建并启动所有应用

docker-composeup-d# 读取docker-compose.yml,启动各个容器# -f:可以指定文件名# -d:后台启动。
# 命令会停止Compose应用相关的所有容器,但不会删除它们。docker-composestop# 删除已停止的Compose应用。它会删除容器和网络,但是不会删除卷和镜像。docker-composerm# 重启已停止的Compose应用# 注意:变更的内容不会反映在重启后的应用中,这时需要重新部署应用使变更生效。docker-composerestart# 停止并删除运行中的Compose应用。它会删除容器和网络,但是不会删除卷和镜像。docker-composedowndockercompose start image_namedockercompose stop image_name 启动多实例:docker compose scaleimage_name=2
返回列表