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

news/2024/11/18 11:54:46/

文章目录

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

一. Docker Compose 的能力

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

 

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

docker_12">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 disk5. Stopping counterapp_redis_1  ... done6. 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 psName                  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 topcounterapp_redis_1
PID     USER     TIME    COMMAND
------------------------------------
843   dockrema   0:00  redis-servercounterapp_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 downdocker compose start image_name
docker compose stop image_name
启动多实例:docker compose scale image_name=2

http://www.ppmy.cn/news/1547975.html

相关文章

C++初阶学习第十一弹——list的用法和模拟实现

一、list的使用 list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向 其前一个元素和后一个元素。 常见的list的函数的使用 std::list<int> It {1, 2, 3, 4, 5};通过迭代器访问元素&#xff1a; std:…

这段时间 `weapp-vite` 的功能更新与优化

这段时间 weapp-vite 的功能更新与优化 自从上次宣布 weapp-vite 的发布&#xff0c;已经过去三个月&#xff1b;weapp-vite 也逐渐迭代至 1.7.6 版本。 在此期间&#xff0c;我对其进行了多项功能的增强和优化&#xff0c;接下来我将为大家详细介绍近期的阶段性成果。 下面列…

FreeRTOS消息队列实验与出现的问题

目录 实验名字&#xff1a;队列操作实验 1、实验目的 2、实验设计 3、实验工程 4、实验程序与分析 ●任务设置 ● 其他应用函数 ● main()函数 ● 任务函数 ●中断初始化及处理过程 5.程序运行结果分析 6.进行实验移植时所遇到的问题 1.项目中mymalloc等函数缺少 …

Go语言的创始人, 核心特性和学习资源

Go语言的创始人 Go语言的创始人有三位&#xff0c;分别是&#xff1a; Robert Griesemer&#xff1a;他参与开发了Java HotSpot虚拟机。Rob Pike&#xff1a;他是Go语言项目的总负责人&#xff0c;曾是贝尔实验室Unix团队的成员&#xff0c;参与过Plan 9、Inferno操作系统和L…

第 13 章 -Go 语言 接口

在面向对象编程中&#xff0c;接口&#xff08;Interface&#xff09;是一种规范的定义&#xff0c;它描述了一组操作方法&#xff08;方法签名&#xff09;但不提供具体的实现。接口是实现抽象的一种方式&#xff0c;它允许将行为与实现分离&#xff0c;从而支持灵活的设计和代…

大数据-226 离线数仓 - Flume 优化配置 自定义拦截器 拦截原理 拦截器实现 Java

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…

系统架构设计师论文

资源库&#xff1a;https://blog.csdn.net/weixin_43905586/article/details/118719986 2019年 2019年下半年试题二&#xff1a;论软件系统架构评估及其应用 2012年 2012年下半年试题一&#xff1a;论基于架构的软件设计方法及应用

C++第十二讲:二叉搜索树

C第十二讲&#xff1a;二叉搜索树 1.什么是二叉搜索树2.二叉搜索树的性能分析3.二叉搜索树的实现3.1二叉搜索树的插入3.2二叉搜索树的查找3.3二叉树搜索树的打印3.4二叉树搜索树的删除3.5全部代码实现 4.二叉搜索树的使用场景4.1key使用场景4.2 key/value搜索场景 1.什么是二叉…