当前位置: 首页 > news >正文

Docker的容器编排

目录

  • 1. 什么是容器编排(Docker Compose)
  • 2. 容器编排的功能
  • 3. 容器编排文件(docker-compose.yml)的介绍
    • 3.1 文件语法版本
    • 3.2 文件基本结构及常见指令
  • 4. Docker Compose命令详解
    • 4.1 Docker Compose命令清单
    • 4.2 命令格式和常见选项说明
    • 4.3 常见命令说明
      • 4.3.1 docker compose up命令
      • 4.3.2 docker compose down命令
      • 4.3.3 docker compose run命令
  • 5. Docker Compose的基本操作
  • 6. Docker Compose 部署自定义服务
  • 7. Docker Compose 部署 WordPress
    • 7.1 什么是 WordPress
    • 7.2 部署 WordPress
  • 8. 常见问题总结

1. 什么是容器编排(Docker Compose)

(1)docker-compose 是 Docker 官方的开源项目,使用 python 编写,实现上调用了Docker 服务的 API 进行容器管理及编排,其官方定义为定义和运行多个 Docker 容器的应用。docker-compose 中有两个非常重要的概念:

  • 服务 ( service ):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
  • 项目( project ):由一组关联的应用容器组成的一个完整业务单元,在 dockercompose.yml 文件中定义, 整个 docker-compose.yml 定义一个项目。

(2)Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。通过 compose 可以方便的管理多个服务。

(3)生活案例来理解容器编排:

  • docker compose 就像航母一样,有舰载机、防空导弹,舰载机、导弹呢就是一个个容器。

2. 容器编排的功能

(1)在介绍功能之前先解释一下为什么需要容器编排(Docker Compose):

  • Docker 是一个轻量化的应用程序, Docker 官方推荐每个 Docker 容器中只运行一个进程。
  • 如果一个应用需要涉及到 MySQL、 nginx 等环境, 那么我们需要分别为应用、数据库和 nginx 创建单独的 docker 容器,然后分别启动容器。
  • 想象一下,当我们构建好 Docker 之后,每次启动应用,都至少需要 docker run三次, 或者写一些脚本来实现, 这样会比较繁琐。
  • 另外,这些 docker 容器都是分散独立的,也不方便镜像管理。那既然这些 docker容器 都是为了同一个应用服务,我们就应该把它们放到一起,这就引出了 dockercompose 来解决这类型的问题。

(2)Docker Compose 的安装:

  • 安装 docker 的时候,我们默认已经安装了 docker-compose,安装的组件包名称为docker-compose-plugin,此处不再赘述
#检查安装是否成功
[xiaomaker@xiaomaker-virtual-machine:compose]$ docker compose version
Docker Compose version v2.16.

(3)Docker Compose 的功能:

  1. Compose的使用的步骤:
    • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
    • 最后,执行 docker compose up 命令来启动并运行整个应用程序。
  2. 核心功能:Compose 具有管理应用程序整个生命周期的命令。
    • 启动,停止和重建服务。
    • 查看正在运行的服务的状态。
    • 流式传输运行服务的日志输出。
    • 在服务上运行一次性命令。

(4)Docker Compose的使用场景:

  1. 单主机部署:快速搭建一个单节点开发或者测试环境,方便使用。
  2. 不同环境隔离:通过指定 project 来运行不同的环境,实现隔离的目的。

3. 容器编排文件(docker-compose.yml)的介绍

3.1 文件语法版本

(1)目前官方支持三个大版本, 即 Version 1、 Version 2 及 Version 3, 其中 Version 1 已经被废弃掉了。当前最新的版本是 3.8,它支持的 Docker Engine 版本不得低于 19.03.0。我们是基于 3.8 版本的 Compose file 语法进行讲解,其他版本介绍参见官方文档。

3.2 文件基本结构及常见指令

(1)基本格式如下:

version: "3.8" # 定义版本, 表示当前使用的 docker-compose 语法的版本
services: # 服务,可以存在多个
servicename: # 服务名字,它也是内部 bridge 网络可以使用的 DNS name,如果不是集群模式相当于 docker run 的时候指定的一个名称,
#集群(Swarm)模式是多个容器的逻辑抽象image: # 必选,镜像的名字command: # 可选,如果设置,则会覆盖默认镜像里的 CMD 命令environment: # 可选,等价于 docker container run 里的 --env 选项设置环境变量volumes: # 可选,等价于 docker container run 里的 -v 选项 绑定数据卷networks: # 可选,等价于 docker container run 里的 --network 选项指定网络ports: # 可选,等价于 docker container run 里的 -p 选项指定端口映射expose: # 可选,指定容器暴露的端口build: #构建目录depends_on: #服务依赖配置env_file: #环境变量文件
servicename2:image:command:networks:ports:
servicename3:#...volumes: # 可选,等价于 docker volume createnetworks: # 可选,等价于 docker network create

(2)下面将逐个介绍常见字段格式语法。

  • image:指定容器运行的镜像。以下格式都可以:
image: redis
image: redis:5
image: redis@sha256:0ed5d5928d4737458944eb604cc8509e245c3e19d02ad83935398bc4b991aac7
image: library/redis
image: docker.io/library/redis
image: my_private.registry:5000/redis
  • command:覆盖容器启动的默认命令。
command: ["bundle", "exec", "thin", "-p", "3000"]
command: bundle exec thin -p 3000
  • entrypoint:覆盖容器默认的 entrypoint。
entrypoint: /code/entrypoint.sh
  • entrypoint也可以是以下格式:
entrypoint:- php- -d- zend_extension=/usr/local/lib/php/extensions/no-debug-nonzts-20100525/xdebug.so- -d- memory_limit=-1- vendor/bin/phpunit
  • environment:添加环境变量。您可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,以确保 YML 解析器不会将其转换为 True 或 False。
#map 语法environment:RACK_ENV: developmentSHOW: "true"USER_INPUT:
#数组语法
environment:- RACK_ENV=development- SHOW=true- USER_INPUT
  • networks:指定容器运行的网络。首先配置容器网络:
services:frontend:image: awesome/webappnetworks:- front-tier- back-tiermonitoring:image: awesome/monitoringnetworks:- adminbackend:image: awesome/backendnetworks:back-tier:aliases:- databaseadmin:aliases:- mysql
networks:front-tier:back-tier:admin:
  • networks配置网络驱动和子网信息:
services:frontend:image: awesome/webappnetworks:front-tier:ipv4_address: 172.16.238.10
networks:front-tier:ipam:driver: defaultconfig:- subnet: "172.16.238.0/24"
  • volumes:将主机的数据卷或者文件挂载到容器里。
#短语法
services:db:image: postgres:latestvolumes:- "/localhost/postgres.sock:/var/run/postgres/postgres.sock"- "/localhost/data:/var/lib/postgresql/data"#完整语法
services:backend:image: awesome/backendvolumes:- type: volume#命名卷source: db-datatarget: /datavolume:nocopy: true#绑定卷- type: bindsource: /var/run/postgres/postgres.socktarget: /var/run/postgres/postgres.sock
volumes:db-data:
  • ports:指定端口映射。以下格式都可以:
#完整语法
ports:- target: 80host_ip: 127.0.0.1published: 8080protocol: tcpmode: host- target: 80host_ip: 127.0.0.1published: 8000-9000protocol: tcpmode: host#短语法
ports:- "3000"- "3000-3005"- "8000:8000"- "9090-9091:8080-8081"- "49100:22"- "127.0.0.1:8001:8001"- "127.0.0.1:5000-5010:5000-5010"- "6060:6060/udp"
  • expose:暴露端口,但不映射到宿主机,只被连接的服务访问。仅可以指定内部端口为参数:
expose:- "3000"- "8000"
  • build:指定为构建镜像上下文路径。例如 webapp 服务,指定为从上下文路径 ./dir/Dockerfile 所构建的镜像:
version: "3.7"
services:webapp:build: ./dir
  • build也可以作为具有在上下文指定的路径的对象,以及可选的 Dockerfile 和 args:
version: "3.7"
services:webapp:build:context: ./dirdockerfile: Dockerfile-alternateargs:buildno: 1labels:- "com.example.description=Accounting webapp"- "com.example.department=Finance"- "com.example.label-with-empty-value"
  • build构建下各个字段的含义:

    • context:上下文路径。
    • dockerfile:指定构建镜像的 Dockerfile 文件名。
    • args:添加构建参数,这是只能在构建过程中访问的环境变量。
    • labels:设置构建镜像的标签。
  • depends_on:设置依赖关系。

    • docker compose up:以依赖性顺序启动服务。在以下示例中,先启动 db 和redis ,才会启动 web。
    • docker compose up SERVICE:自动包含 SERVICE 的依赖项。在以下示例中,docker compose up web 还将创建并启动 db 和 redis。
    • docker compose stop:按依赖关系顺序停止服务。在以下示例中, web 在 db 和redis 之前停止。
version: "3.7"
services:web:build: .depends_on:- db- redisredis:image: redisdb:image: postgres
  • depends_on可以指定条件, healthy 需要配置 healthcheck 来完成:
services:web:build: .depends_on:db:condition: service_healthyredis:condition: service_startedredis:image: redisdb:image: postgres
  • health check 样例:
version: "3.8"
services:web:image: nginx:1.24.0environment:TEST: 1depends_on:mysql:condition: service_healthymysql:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: "bit@123"volumes:- /data/maxhou/mysqldata/varlib/:/var/lib/mysqlhealthcheck:test: mysql --user=root --password='bit@123' -e "SELECT 1;"interval: 10stimeout: 5sretries: 10
  • env_file:从文件添加环境变量。可以是单个值或列表的多个值。
env_file: .env
  • env_file也可以是列表格式:
env_file:- ./common.env- ./apps/web.env- /opt/secrets.env

其他的指令可以参考官方文档。 建议多看官方文档。

4. Docker Compose命令详解

(1)Docker Compose命令官网参考地址:https://docs.docker.com/reference/cli/docker/compose/。

4.1 Docker Compose命令清单

(1)命令清单如下:

命令功能
docker compose build构建服务
docker compose config规范的格式来显示服务配置
docker compose cp在本地系统和服务容器直接拷贝文件
docker compose create创建服务的容器
docker compose down停止所有容器,并删除容器
docker compose events从服务器获取实时事件
docker compose exec在容器中执行命令
docker compose images列出所有容器使用的镜像
docker compose kill强制停止服务的容器
docker compose logs显示日志
docker compose ls显示所有项目
docker compose pause暂停服务
docker compose port列出所有的端口映射
docker compose ps该命令可以列出项目中目前的所有容器
docker compose pull拉取服务镜像
docker compose push推送服务镜像
docker compose restart重启或者重启某个服务
docker compose rm删除服务停止的容器
docker compose run在指定服务容器上执行相关的命令
docker compose start启动当前停止的某个容器
docker compose stop停止当前运行的某个容器
docker compose top显示运行的进程
docker compose unpause恢复服务
docker compose upup 命令会构建,(重新)创建,启动,链接一个服务相关的容器。默认情况下如果容器已经存在,将会停止并尝试重新创建他们。并使用之前挂载的卷。 --no-recreate 参数可以让容器不被停止或者重新创建, -d 表示后台运行
docker compose version查看版本

4.2 命令格式和常见选项说明

(1)对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器。如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令影响。docker-compose 命令的基本的使用格式为:

docker compose [OPTIONS] COMMAND [ARGS...]

(2)常见选项说明:

  • -f,–file 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可
    以多次指定。
  • -p, --project-name 指定项目名称,默认将使用所在目录名称作为项目名。

4.3 常见命令说明

4.3.1 docker compose up命令

(1)该命令的作用十分强大,它会尝试自动完成包括构建镜像、(重新)创建服务、启动服务并关联服务相关容器的一系列操作,可以直接通过该命令来启动一个项目。

docker compose up [options] [SERVICE...]
  • -d 在后台运行服务容器, 推荐在生产环境下使用该选项。
  • –force-recreate 强制重新创建容器,不能与 --no-recreate 同时使用。
  • –no-recreate 如果容器已经存在了,则不重新创建,不能与 --forcerecreate 同时使用。

4.3.2 docker compose down命令

(1)停止所有容器,并删除容器和网络:

docker compose down [options] [SERVICE...]
  • -v,–volumes 删除容器同时删除目录映射。

4.3.3 docker compose run命令

(1)该命令可以在指定服务容器上执行相关的命令:

# 例如:启动一个 ubuntu 服务容器,并执行 ping docker.com 命令
# docker compose run ubuntu ping docker.com
docker compose run [options] SERVICE [COMMAND] [ARGS...]
  • -d 后台运行容器。
  • –name NAME 为容器指定一个名字。
  • –entrypoint CMD 覆盖默认的容器启动指令。
  • -e KEY=VAL 设置环境变量值,可多次使用选项来设置多个环境变量。
  • -u, --user=“” 指定运行容器的用户名或者 uid。
  • –rm 运行命令后自动删除容器。
  • -p,–publish=[] 映射容器端口到本地主机。

5. Docker Compose的基本操作

(1)创建 compose 目录:

mkdir -p /data/myworkdir/compose/base
cd /data/myworkdir/compose/base

(2)进入 base 目录,创建 docker-compose.yml 文件:

cd /data/myworkdir/compose/base/
vi docker-compose.yml

(3)输入以下内容:

version: 3.8
services:web:image: nginx:1.24.0environment:TEST: 1ports:- 8979:80networks:- mytestnetvolumes:- ./mynginxhome:/usr/share/nginx/htmldepends_on:mysql:condition: service_healthyredis:condition: service_healthymysql:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: "bit@123"networks:- mytestnetvolumes:- /data/maxhou/mysqldata/varlib/:/var/lib/mysqlhealthcheck:test: mysql --user=root --password='bit@123' -e "SELECT 1;"interval: 10stimeout: 5sretries: 10redis:image: redis:7networks:- mytestnethealthcheck:test: redis-cli pinginterval: 10stimeout: 5sretries: 10
networks:mytestnet:

(4)输入 docker config 会做检查:

[xiaomaker@xiaomaker-virtual-machine:base]$ docker compose config
version must be a string

(5)我们修改错误信息,将版本转为字符串,再次检查:

version: "3.8"
services:web:image: nginx:1.24.0environment:TEST: 1ports:- 8979:80networks:- mytestnetvolumes:- ./mynginxhome:/usr/share/nginx/htmldepends_on:mysql:condition: service_healthyredis:condition: service_healthymysql:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: "bit@123"networks:- mytestnetvolumes:- /data/maxhou/mysqldata/varlib/:/var/lib/mysqlhealthcheck:test: mysql --user=root --password='bit@123' -e "SELECT 1;"interval: 10stimeout: 5sretries: 10redis:image: redis:7networks:- mytestnethealthcheck:test: redis-cli pinginterval: 10stimeout: 5sretries: 10
networks:mytestnet:[xiaomaker@xiaomaker-virtual-machine:base]$ docker compose config
name: base
services:mysql:environment:MYSQL_ROOT_PASSWORD: bit@123healthcheck:test:- CMD-SHELL- mysql --user=root --password='bit@123' -e "SELECT 1;"timeout: 5sinterval: 10sretries: 10image: mysql:5.7networks:mytestnet: nullvolumes:- type: bindsource: /data/maxhou/mysqldata/varlib/target: /var/lib/mysqlbind:create_host_path: trueredis:healthcheck:test:- CMD-SHELL- redis-cli pingtimeout: 5sinterval: 10sretries: 10image: redis:7networks:mytestnet: nullweb:depends_on:mysql:condition: service_healthyredis:condition: service_healthyenvironment:TEST: "1"image: nginx:1.24.0networks:mytestnet: nullports:- mode: ingresstarget: 80published: "8979"protocol: tcpvolumes:- type: bindsource: /data/myworkdir/compose/base/mynginxhometarget: /usr/share/nginx/htmlbind:create_host_path: true
networks:mytestnet:name: base_mytestnet

(6)创建首页目录,编辑首页内容:

[xiaomaker@xiaomaker-virtual-machine:base]$ mkdir -p ./mynginxhome
[xiaomaker@xiaomaker-virtual-machine:base]$ cd ./mynginxhome/
[xiaomaker@xiaomaker-virtual-machine:mynginxhome]$ echo "Hello" > index.html

(7)启动服务:

[xiaomaker@xiaomaker-virtual-machine:base]$ docker compose up -d
[+] Running 4/4
? Network base_mytestnet Created 0.1s
? Container base-mysql-1 Healthy 11.6s
? Container base-redis-1 Healthy 11.6s
? Container base-web-1 Started 11.8s

(8)通过页面访问:

(9)停止服务:

[xiaomaker@xiaomaker-virtual-machine:base]$ docker compose stop
[+] Running 3/3
✔ Container base-web-1 Stopped 10.2s
✔ Container base-mysql-1 Stopped 2.0s
✔ Container base-redis-1 Stopped 0.2s

(10)启动服务:

[xiaomaker@xiaomaker-virtual-machine:base]$ docker compose start
[+] Running 3/3
✔ Container base-redis-1 Healthy 11.3s
✔ Container base-mysql-1 Healthy 11.3s
✔ Container base-web-1 Started 0.4s

(11)删除服务:

[xiaomaker@xiaomaker-virtual-machine:base]$ docker compose down
[+] Running 4/4
✔ Container base-web-1 Removed 0.2s
✔ Container base-redis-1 Removed 0.2s
✔ Container base-mysql-1 Removed 1.8s
✔ Network base_mytestnet Removed 0.1s

6. Docker Compose 部署自定义服务

我们编写一个简单的案例, nginx 反向代理到我们的一个 springboot 微服务,微服务访问我们的 msyql 数据库查询用户信息。

(1)设计数据非常简单的一个表信息,写入两条数据,文件为 init.sql:

drop database if exists test;
CREATE DATABASE `test` DEFAULT CHARACTER SET utf8mb4 ;
use `test`;
CREATE TABLE `users` (
`sno` int(11) DEFAULT NULL,
`sname` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO users (sno,sname) VALUES
(1,'pony'),
(2,'maxhou');

(2)创建一个 springboot 应用,配置 maven 项目。

(3)添加启动类:

package com.bit.demojdbc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemojdbcApplication {public static void main(String[] args) {SpringApplication.run(DemojdbcApplication.class, args);}
}

(4)配置数据库信息,注意本地测试的时候红色部分调整为 ip 地址,而我们实际的服务使用的 mysql 的一个服务名称。

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://mysql:3306/test
spring.datasource.username=root
spring.datasource.password=roo

(5)配置用户控制器,简单配置,不再去涉及 mapper 那些内容通过 jdbc 直接完成操作:

package com.bit.demojdbc;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/user")
public class UserController {@AutowiredJdbcTemplate jdbcTemplate;@RequestMapping("/list")@ResponseBodypublic Object Users(){return jdbcTemplate.queryForList("select * from users");}
}

(6)编译打包:

(7)进入打包的目录,本地测试正常启动。

(8)本地测试正常访问:

(9)编写 docker-compose.yml:

version: "3.8"
services:web:image: nginx:1.24.0ports:- 8112:80networks:- myhellonetvolumes:- ./nginx/conf.d:/etc/nginx/conf.ddepends_on:mysys:condition: service_startedmysys:image: java:8depends_on:mysql:condition: service_healthycommand: java -jar /app/demojdbc-0.0.1-SNAPSHOT.jarvolumes:- ./app/:/app/networks:- myhellonetmysql:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: "root"networks:- myhellonetvolumes:- ./mysql/varlib/:/var/lib/mysql- ./mysql/init/:/docker-entrypoint-initdb.d/healthcheck:test: mysql --user=root --password='root' -e "SELECT 1;"interval: 10stimeout: 5sretries: 10
networks:myhellonet:

(10)创建工程目录和卷目录:

mkdir -p /data/maxhou/mycompose/prj16
cd /data/maxhou/mycompose/prj16
mkdir -p ./nginx/conf.d
mkdir -p ./app
mkdir -p ./mysql/varlib/
mkdir -p ./mysql/init/

(11)将 nginx 的反向代理配置 bit.conf 放入到./nginx/conf.d,其中内容为:

server {listen 80;access_log off;location / {proxy_pass http://mysys:8080/user/;}
}

(12)将数据库初始化文件 init.sql 放入到./mysql/init 目录

(13)将应用 jar 包放入到./app 目录:

[xiaomaker@xiaomaker-virtual-machine:prj16]$ ll ./app
total 19132
drwxr-xr-x 2 root root 4096 Apr 25 23:44 ./
drwxr-xr-x 5 root root 4096 Apr 26 00:04 ../
-rw-r--r-- 1 root root 19579363 Apr 26 00:07 demojdbc-0.0.1-
SNAPSHOT.jar
[xiaomaker@xiaomaker-virtual-machine:prj16]$ ll ./nginx/conf.d/
total 12
drwxr-xr-x 2 root root 4096 Apr 25 23:49 ./
drwxr-xr-x 3 root root 4096 Apr 25 23:42 ../
-rw-r--r-- 1 root root 117 Apr 25 23:49 bit.conf
[xiaomaker@xiaomaker-virtual-machine:prj16]$ ll ./mysql/init/
total 12
drwxr-xr-x 2 root root 4096 Apr 25 23:49 ./
drwxr-xr-x 4 root root 4096 Apr 25 23:43 ../
-rw-r--r-- 1 root root 417 Apr 26 00:11 init.sql

(14)启动我们的项目:

[xiaomaker@xiaomaker-virtual-machine:prj16]$ docker compose up -d
[+] Running 4/4
✔ Network prj16_myhellonet Created 0.1s
✔ Container prj16-mysql-1 Healthy 11.2s
✔ Container prj16-mysys-1 Started 11.5s
✔ Container prj16-web-1 Started 12.2s

(15)浏览器访问 nginx,可以看到用户信息正常返回:


至此我们完成了我们的 nginx 服务,后台服务和数据的完整的一个应用。

7. Docker Compose 部署 WordPress

7.1 什么是 WordPress

(1)概念如下:

  • WordPress 是使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。
  • WordPress 是一款个人博客系统,并逐步演化成一款内容管理系统软件,它是使用PHP 语言和 MySQL 数据库开发的,用户可以在支持 PHP 和 MySQL 数据库的服务器上使用自己的博客。
  • WordPress 有许多第三方开发的免费模板,安装方式简单易用。不过要做一个自己的模板,则需要你有一定的专业知识。比如你至少要懂的标准通用标记语言下的一个应用 HTML 代码、 CSS、 PHP 等相关知识。
  • WordPress 官方支持中文版,同时有爱好者开发的第三方中文语言包,如 wopus 中文语言包。 WordPress 拥有成千上万个各式插件和不计其数的主题模板样式。

7.2 部署 WordPress

(1)编写 Docker Compose:

version: '3.8'
# 定义所有的 service 信息, services 下面的第一级别的 key 既是一个service 的名称
services:db:image: mysql:5.7volumes:- ./db_data:/var/lib/mysql# 定义容器重启策略restart: always# 设置环境变量, environment 的值可以覆盖 env_file 的值environment:MYSQL_ROOT_PASSWORD: mywordpressMYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wordpresshealthcheck:test: mysql --user=root --password='mywordpress' -e "SELECT 1;"interval: 10stimeout: 5sretries: 10wordpress:#docker compose up 以依赖顺序启动服务,先启动 dbdepends_on:db:condition: service_healthyimage: wordpress:latest# 建立宿主机和容器之间的端口映射关系,容器的 80 端口和宿主机的 8000端口建立映射关系ports:- "8000:80"restart: alwaysvolumes:- ./wordpress:/var/www/htmlenvironment:WORDPRESS_DB_HOST: db:3306WORDPRESS_DB_USER: wordpressWORDPRESS_DB_PASSWORD: wordpressWORDPRESS_DB_NAME: wordpress

(2)运行站点:

docker compose up -d

(3)访问 web 页面:

(4)配置参数,点击安装:

(5)登录:

(6)进入后台:

(7)删除,释放空间:

[xiaomaker@xiaomaker-virtual-machine:compose]$ docker compose down
[+] Running 3/2
⠿ Container compose-wordpress-1 Removed 3.3s
⠿ Container compose-db-1 Removed 1.9s
⠿ Network compose_default Removed

8. 常见问题总结

(1)up、 run 和 start 之间有什么区别:

  • 通常,你想要 docker compose up. 用于 up 启动或重新启动 docker-compose.yml.在默认的“附加”模式下,会看到来自所有容器的所有日志。在“分离”模式 ( -d) 中,启动容器后 Compose 退出,但容器继续在后台运行。
  • 该 docker compose run 命令用于运行“一次性”或“临时”任务。它需要您要运行的服务名称,并且只为正在运行的服务所依赖的服务启动容器。用于 run 运行测试或执行管理任务,例如从数据卷容器中删除或添加数据。
  • 该 run 命令的作用类似于 dockerrun -ti 它打开容器的交互式终端并返回与容器中进程的退出状态匹配的退出状态。docker compose start 命令仅对重新启动先前创建但已停止的容器有用。它从不创建新容器。

(2)如何在同一主机上运行 Compose 文件的多个副本:

  • Compose 使用项目名称为项目的所有容器和其他资源创建唯一标识符。要运行项目的多个副本,请使用-p 命令行选项 或 COMPOSE_PROJECT_NAME 环境变量设置自定义项目名称。

(3)可以控制服务启动顺序吗?

  • 可以控制启动顺序,通过依赖指定,并且可以配合 healthcheck 等健康检查成功以后再启动。

相关文章:

Docker的容器编排

目录 1. 什么是容器编排(Docker Compose)2. 容器编排的功能3. 容器编排文件(docker-compose.yml)的介绍3.1 文件语法版本3.2 文件基本结构及常见指令 4. Docker Compose命令详解4.1 Docker Compose命令清单4.2 命令格式和常见选项…...

Java Web项目部署教程简单实用

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默, 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把…...

推送本地仓库到远程git仓库

目录 推送本地仓库到远程git仓库1.1修改本地仓库用户名1.2 push 命令1.3远程分支查看 推送本地仓库到远程git仓库 删除之前的仓库中的所有内容,从新建库,同时创建一个 A.txt 文件 清空原有的远程仓库内容,重新创建一个新的仓库,…...

线性池学习

一、什么是进程?什么是线程? 1. 进程的定义 从操作系统的角度解释: 进程是操作系统分配资源和调度执行的基本单位。每个进程都是操作系统中一个独立的实体,拥有自己的内存空间、文件描述符、代码、数据等资源。进程是程序在执行…...

微积分复习笔记 Calculus Volume 2 - 4.3 Separable Equations

4.3 Separable Equations - Calculus Volume 2 | OpenStax...

前端项目部署方法

ngnix服务器部署 下载nignx,我下的是windows版本的 下载链接:[https://nginx.org/en/download.html](https://nginx.org/en/download.html) 解压文件 如果原本的80端口号被占用了,可以改为其他的端口号 可以点击nginx.exe文件启动nginx,它可能…...

Docker创建一个mongodb实例,并用springboot连接 mongodb进行读写文件

一、通过Docker 进行运行一个 mongodb实例 1、拉取镜像 docker pull mongo:5.0.5 2、创建 mongodb容器实例 docker run -d --name mongodb2 \-e MONGO_INITDB_ROOT_USERNAMEsalaryMongo \-e MONGO_INITDB_ROOT_PASSWORD123456 \-p 27017:27017 \mongo:5.0.5 3、进入容器&am…...

Android app反编译 攻与防

大概是2020年的时候,有一次,我们的竞争同行有另外一家公司要用我们的安卓软件app,拉了个群,告知他用一个软件多少钱,然后在群里发了一个我打包的apk包。结果就没有下文了。又过了一个月。我同事在那个要买我们apk的人的朋友圈&…...

ElasticSearch 简介

一、什么是 ElastcSearch? ElasticSearch 是基于 Lucene 的 Restful 的分布式实时全文搜索引擎。 1.1 ElasticSearh 的基本术语概念 index 索引 索引类似与 mysql 中的数据库,ES 中的索引是存储数据的地方,包含了一堆有相似结构的文档数据…...

Kerberos实验

kdc:192.168.72.163 客户端(机器账户win10):192.168.72.159 用户:administrator 抓包:开机登录win10,使用administrator域用户凭据登录。 生成 Kerberos 解密文件 抓取 krbtgt 用户和 win1…...

Android之RecyclerView显示数据列表和网格

一、RecyclerView的优势 RecyclerView 的最大优势在于,它对大型列表来说非常高效: 默认情况下,RecyclerView 仅会处理或绘制当前显示在屏幕上的项。例如,如果您的列表包含一千个元素,但只有 10 个元素可见&#xff0…...

docker mysql挂载

在提供的 docker run 命令中,已经挂载了三个卷到 MySQL 容器中:日志目录、数据目录和配置目录。然而,还没有挂载一个包含 cube_admin.sql 文件的目录。要将 SQL 文件放入容器中并在 MySQL 中执行它,可以按照以下步骤操作&#xff…...

顺序表-递增有序表合并

两个递增有序表合并操作 题目: 将两个递增有序的顺序表 A 和 B 合并成一个新的递增有序顺序表 C。 思路: 使用三个索引 i, j, k 分别遍历顺序表 A, B 和合并后的顺序表 C。比较 A 和 B 当前索引指向的元素,将较小的元素放入 C 中&#xf…...

【Qt】qt安装

在工作一年之后,还是想做一个Qt的教程,遥想研一刚刚接触Qt,从0到1学习,没有什么参考书籍,网上的资料也不多,幸好Qt官方文档写得好,加上自己肯研究,才堪堪入门。 现在我想自己写一个…...

CXF WebService SpringBoot 添加拦截器,处理响应报文格式

描述 XFIRE升级CXF框架,但是对接的系统不做调整,这时候就要保证参数报文和响应报文和以前是一致的。但是不同的框架有不同的规则,想要将报文调整的一致,就需要用到拦截器拦截报文,自定义解析处理。 CXF框架本身就是支…...

vue iframe进行父子页面通信并切换URL

使用通义千问提问后得到一个很好的示例。 需求是2个项目需要使用同一个面包屑进行跳转&#xff0c;其中一个是iframe所在的项目&#xff0c;另一个需要通过地址访问。通过 window.parent.postMessage &#xff0c;帮助 <iframe> 内嵌入的子页面和其父页面之间进行跨域通…...

基于Spring Boot的摄影师分享交流社区

一、系统背景与目的 随着摄影技术的不断发展和摄影爱好者群体的日益扩大&#xff0c;摄影师们需要一个能够展示自己作品、分享摄影心得、交流摄影技巧的平台。基于Spring Boot的摄影师分享交流社区应运而生&#xff0c;它旨在满足摄影师们的这些需求&#xff0c;促进摄影文化的…...

Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:电影院后台管理系统(前后端源码 + 数据库 sql 脚本)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 项目介绍 2.0 用户登录功能 3.0 用户管理功能 4.0 影院管理功能 5.0 电影管理功能 6.0 影厅管理功能 7.0 电影排片管理功能 8.0 用户评论管理功能 9.0 用户购票功…...

Linux(网络协议和管理)

后面也会持续更新&#xff0c;学到新东西会在其中补充。 建议按顺序食用&#xff0c;欢迎批评或者交流&#xff01; 缺什么东西欢迎评论&#xff01;我都会及时修改的&#xff01; 在这里真的很感谢这位老师的教学视频让迷茫的我找到了很好的学习视频 王晓春老师的个人空间…...

C++ 入门第 20 天:STL 容器之无序集合与无序多重集合

往期回顾&#xff1a; C 入门17&#xff1a;STL 容器之映射&#xff08;map&#xff09;与多重映射&#xff08;multimap&#xff09;_-CSDN博客 C 入门18&#xff1a;STL 容器之栈&#xff08;stack&#xff09;与队列&#xff08;queue&#xff09;-CSDN博客 C 入门19&#x…...

devops-部署Harbor实现私有Docker镜像仓库

文章目录 概述下载配置安装安装后生成的文件使用和维护Harbor参考资料 概述 Harbor是一个开源注册中心&#xff0c;它使用策略和基于角色的访问控制来保护工件&#xff0c;确保镜像被扫描并且没有漏洞&#xff0c;并将镜像签名为可信的。Harbor是CNCF的一个毕业项目&#xff0…...

rebase ‘A‘ onto ‘master‘ 和 merge ‘master‘ into ‘A‘有什么区别

在Git版本控制系统中&#xff0c;rebase 和 merge 是两种不同的操作&#xff0c;用于合并分支。rebase A onto master 和 merge master into A 虽然最终目的都是将两个分支的更改合并在一起&#xff0c;但它们在处理方式和结果上有所不同。 rebase ‘A’ onto ‘master’ 含义…...

Vulhub:Jackson[漏洞复现]

CVE-2017-7525(Jackson反序列化) 启动漏洞环境 docker-compose up -d 阅读vulhub给出的漏洞文档 cat README.zh-cn.md # Jackson-databind 反序列化漏洞&#xff08;CVE-2017-7525&#xff09; Jackson-databind 支持 [Polymorphic Deserialization](https://github.com/Fas…...

strongswan构建测试环境

make-testing脚本文件负责构建strongswan的虚拟化测试系统。位于目录strongswan-5.9.14/testing/&#xff0c;需要以管理员身份运行make-testing。生成测试用到的虚拟客户机镜像&#xff0c;KVM虚拟机和虚拟网络的配置文件位于目录:config/kvm。 ~/strongswan-5.9.14/testing$…...

前端:金额高精度处理

Decimal 是什么 想必大家在用js 处理 数字的 加减乘除的时候&#xff0c;或许都有遇到过 精度不够 的问题&#xff0c;还有那些经典的面试题 0.20.1 ! 0.3&#xff0c; 至于原因&#xff0c;那就是 js 计算底层用的是 IEEE 754 &#xff0c;精度上有限制&#xff0c; 那么Deci…...

面试题整理3----nc命令的常见用法

面试题整理3----nc命令的常见用法 1. NC是什么2. NC的常用参数2.1 开启指定端口TCP监听(-l小写的L)2.2 测试端口是否能访问(-v)2.3 开启指定端口UDP监听(-u)2.4 端口扫描(-z)2.5 指定超时时间(-w)2.6 指定本地端口号连接(-p)2.7 指定的命令(-e) 1. NC是什么 nc&#xff08;Net…...

Trimble天宝三维激光扫描仪在建筑工程竣工测量中的应用【沪敖3D】

竣工测量是建筑项目竣工阶段的一个至关重要的环节&#xff0c;它为建筑工程的质量验收和成果核查提供了核心的参考依据。传统的竣工测量方法&#xff0c;如全站仪测量&#xff0c;主要依赖于现场人工操作&#xff0c;存在一些明显的局限性&#xff0c;例如作业时间长、工作量大…...

IntelliJ IDEA 使用技巧与插件推荐

目录 常用使用技巧 1. 使用快捷键提升开发效率 2. 多光标编辑 3. 代码自动补全 4. 使用 Find Action 快速执行操作 5. 集成版本控制系统&#xff08;VCS&#xff09; 6. 快速查看代码文档 推荐插件 1. Lombok Plugin 2. Rainbow Brackets 3. Key Promoter X 4. Chec…...

Oracle 技术精选学习

Oracle 技术犹如一座闪耀着无尽光芒的灯塔&#xff0c;为众多 IT 从业者和技术爱好者照亮了前行的道路。无论是数据库管理、企业应用开发还是数据分析&#xff0c;Oracle 都以其强大、稳定和广泛的应用而占据着行业的重要地位。学习 Oracle 技术&#xff0c;更是能为个人带来诸…...

sqlilabs第三十关到第三十五关靶场攻略

第三十关 第三十关和二十九关差不多&#xff0c;将单引号换成双引号 查询表名&#xff0c;字段名&#xff0c;数据 ?id1&id-2" union select 1,group_concat(table_name),3 from information_schema.tables where table_schemadatabase()-- ?id1&id-2" …...