自学内容网 自学内容网

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

一. Docker Compose 的能力

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

 

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

1. docker命令部署

bitnami部署文档:

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

#创建网络
docker network 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
docker volume create --name wordpress_data
docker run -d --name wordpress \
  -p 18080:8080 -p 8443:8443 \
  --env ALLOW_EMPTY_PASSWORD=yes \
  --env WORDPRESS_DATABASE_USER=bn_wordpress \
  --env WORDPRESS_DATABASE_PASSWORD=bitnami \
  --env WORDPRESS_DATABASE_NAME=bitnami_wordpress \
  --network wordpress-network \
  --volume wordpress_data:/bitnami/wordpress \
  bitnami/wordpress:latest

访问:

![[Pasted image 20241108174744.png]]

 

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:  
      - blog  
  wordpress:  
    container_name: wordpress  
    image: bitnami/wordpress:latest  
    ports:  
      - '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_wordpress  
    depends_on:  
      - mariadb  
    networks:  
      - blog  
    restart: always  
# 二. 卷配置  
## 总体卷  
volumes:  
  mariadb_data:  
    driver: local  
  wordpress_data:  
    driver: local  
# 三. 网络  
## 这里的容器都用此网络  
networks:  
  blog:

启动

docker compose -f docker-compose.yaml up -d 

![[Pasted image 20241108181342.png]]

注意:

增量更新:修改 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:M 09 Jan 11:16:00.456 # User requested shutdown...
 3. redis_1   | 1:M 09 Jan 11:16:00.456 * Saving the final RDB snap... |
# 优雅关闭
 1. redis_1   1:M 09 Jan 11:16:00.463 * DB saved on disk
 5. Stopping counterapp_redis_1  ... done
 6. counterapp_redis_1 exited with code 0
# 已成功停止Redis。
 8. Stopping counterapp_web-fe_1 ... done
# 容器被删除。
10. Removing counterapp_redis_1  ... done
11. 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...    Up      6379/tcp
counterapp_web-fe_1   python app.py           Up      0.0.0.0:5000->5000/tcp

 

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

docker-compose top

counterapp_redis_1
PID     USER     TIME    COMMAND
------------------------------------
843   dockrema   0:00  redis-server

counterapp_web-fe_1
PID    USER   TIME             COMMAND
-------------------------------------------------
928    root   0:00    python app.py
1016   root   0:00    /usr/local/bin/python app.py

 

四. 常用命令

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

创建并启动所有应用

docker-compose up -d
# 读取docker-compose.yml,启动各个容器
# -f:可以指定文件名
# -d:后台启动。
# 命令会停止Compose应用相关的所有容器,但不会删除它们。
docker-compose stop

# 删除已停止的Compose应用。它会删除容器和网络,但是不会删除卷和镜像。
 docker-compose rm

#  重启已停止的Compose应用
# 注意:变更的内容不会反映在重启后的应用中,这时需要重新部署应用使变更生效。
docker-compose restart


# 停止并删除运行中的Compose应用。它会删除容器和网络,但是不会删除卷和镜像。
docker-compose down


docker compose start image_name
docker compose stop image_name
启动多实例:docker compose scale image_name=2


原文地址:https://blog.csdn.net/hiliang521/article/details/143733089

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!