好物优选点击查看详情 京东购买

暂无内容

Docker学习九:Docker Compose

Docker Compose 是 Docker 官方的单机多容器管理系统,它本质是一个 Python 脚本,它通过解析用户编写的 yaml 文件,调用 Docker API 实现动态的创建和管理多个容器

要想使用 Docker Compose,需要先安装一个 Docker Compose。

在 macOS 和 Windows 系统下 ,Docker Compose 都是随着 Docker 的安装一起安装好的。这里重点介绍如何在Linux系统中安装Docker Compose。

在安装Docker Compose,需要先确保机器上已经安装了Docker。

# 下载 Docker Compose 的安装包 $ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 这里安装的是1.27.3 版本 # 修改 Docker Compose 执行权限 $ sudo chmod +x /usr/local/bin/docker-compose # 检查 Docker Compose 是否安装成功 $ docker-compose --version docker-compose version 1.27.3, build 1110ad01 

在使用 Docker Compose 启动容器时, Docker Compose 会默认使用 docker-compose.yml 文件, docker-compose.yml 文件的格式为 yaml。

Docker Compose 文件主要分为三部分: services(服务)、networks(网络) 和 volumes(数据卷):

  • services(服务):服务定义了容器启动的各项配置,就像执行docker run命令时传递的容器启动的参数一样,指定了容器应该如何启动,例如容器的启动参数,容器的镜像和环境变量等。
  • networks(网络):网络定义了容器的网络配置,就像执行docker network create命令创建网络配置一样。
  • volumes(数据卷):数据卷定义了容器的卷配置,就像执行docker volume create命令创建数据卷一样。

一个典型的Docker Compose文件结构如下:

 version: "3" services: nginx:  networks: frontend: backend: volumes: db-data: 

首先需要定义服务名称,如service名称为nginx

version: "3.8" services: nginx: 

接着需要在服务名称的下一级定义当前服务的各项配置,常见的有16种配置:

用于构建 Docker 镜像,类似于docker build命令,build 可以指定 Dockerfile 文件路径,然后根据 Dockerfile 命令来构建文件。

build:  context: .  dockerfile: Dockerfile-name 

指定容器可以使用到哪些内核能力(capabilities)

cap_add: - NET_ADMIN cap_drop: - SYS_ADMIN 

用于覆盖容器默认的启动命令,它和 Dockerfile 中的 CMD 用法类似,也有两种使用方式:

command: sleep 3000 command: ["sleep", "3000"] 

用于指定容器启动时容器的名称

container_name: nginx 

用于指定服务间的依赖关系,这样可以先启动被依赖的服务。例如,服务依赖数据库服务 db,可以指定 depends_on 为 db

version: "3.8" services: my-web: build: . depends_on: - db db: image: mysql 

挂载主机的设备到容器中

devices: - "/dev/sba:/dev/sda" 

自定义容器中的 dns 配置

dns: - 8.8.8.8 - 114.114.114.114 

配置 dns 的搜索域

dns_search: - svc.cluster.com - svc1.cluster.com 

覆盖容器的 entrypoint 命令

entrypoint: sleep 3000 entrypoint: ["sleep", "3000"] 

指定容器的环境变量文件,启动时会把该文件中的环境变量值注入容器中。

env_file: - ./dbs.env 

env 文件的内容格式如下:

KEY_ENV=values 

指定容器启动时的环境变量

environment: - KEY_ENV=values 

指定容器镜像的地址

image: busybox:latest 

共享主机的进程命名空间,像在主机上直接启动进程一样,可以看到主机的进程信息

pid: "host" 

暴露端口信息,使用格式为 HOST:CONTAINER,前面填写要映射到主机上的端口,后面填写对应的容器内的端口

ports: - "1000" - "1000-1005" - "8080:8080" - "8888-8890:8888-8890" - "2222:22" - "127.0.0.1:9999:9999" - "127.0.0.1:3000-3005:3000-3005" - "6789:6789/udp" 

服务要使用的网络名称,对应顶级的 networks 中的配置

services: my-service: networks: - hello-network - hello1-network 

不仅可以挂载主机数据卷到容器中,也可以直接挂载主机的目录到容器中,使用方式类似于使用docker run启动容器时添加 -v 参数

version: "3" services: db: image: mysql:5.6 volumes: - type: volume source: /var/lib/mysql target: /var/lib/mysql 

除了上面介绍的长语法外,还支持短语法的书写方式

version: "3" services: db: image: mysql:5.6 volumes: - /var/lib/mysql:/var/lib/mysql 

Docker Compose 文件顶级声明的 networks 允许创建自定义的网络,类似于docker network create命令

 version: "3" services: web: networks: mybridge: ipv4_address: 172.16.1.11 networks: mybridge: driver: bridge ipam: driver: default config: subnet: 172.16.1.0/24 

如果想在多个容器间共享数据卷,则需要在外部声明数据卷,然后在容器里声明使用数据卷。

 version: "3" services: my-service1: image: service:v1 volumes: - type: volume source: logdata target: /var/log/mylog my-service2: image: service:v2 volumes: - type: volume source: logdata target: /var/log/mylog volumes: logdata: 

编写完 Docker Compose 模板文件后,需要使用 docker-compose 命令来运行这些文件。

docker-compose 的基本使用格式如下:

docker-compose [-f <arg>...] [options] [--] [COMMAND] [ARGS...] 

其中,options 是 docker-compose 的参数,支持的参数和功能说明如下:

 -f, --file FILE 指定 docker-compose 文件,默认为 docker-compose.yml -p, --project-name NAME 指定项目名称,默认使用当前目录名称作为项目名称 --verbose 输出调试信息 --log-level LEVEL 日志级别 (DEBUG, INFO, WARNING, ERROR, CRITICAL) -v, --version 输出当前版本并退出 -H, --host HOST 指定要连接的 Docker 地址 --tls 启用 TLS 认证 --tlscacert CA_PATH TLS CA 证书路径 --tlscert CLIENT_CERT_PATH TLS 公钥证书问价 --tlskey TLS_KEY_PATH TLS 私钥证书文件 --tlsverify 使用 TLS 校验对端 --skip-hostname-check 不校验主机名 --project-directory PATH 指定工作目录,默认是 Compose 文件所在路径。 

COMMAND 为 docker-compose 支持的命令。支持的命令如下:

 build 构建服务 config 校验和查看 Compose 文件 create 创建服务 down 停止服务,并且删除相关资源 events 实时监控容器的时间信息 exec 在一个运行的容器中运行指定命令 help 获取帮助 images 列出镜像 kill 杀死容器 logs 查看容器输出 pause 暂停容器 port 打印容器端口所映射出的公共端口 ps 列出项目中的容器列表 pull 拉取服务中的所有镜像 push 推送服务中的所有镜像 restart 重启服务 rm 删除项目中已经停止的容器 run 在指定服务上运行一个命令 scale 设置服务运行的容器个数 start 启动服务 stop 停止服务 top 限制服务中正在运行中的进程信息 unpause 恢复暂停的容器 up 创建并且启动服务 version 打印版本信息并退出 

使用 Docker Compose 管理 WordPress。

# 在 /tmp 目录下创建一个 WordPress 的目录 $ mkdir /tmp/wordpress # 进入工作目录 $ cd /tmp/wordpress # 创建 docker-compose.yml 文件 $ touch docker-compose.yml # 启动服务 $ docker-compose up -d Starting wordpress_mysql_1 ... done Starting wordpress_wordpress_1 ... done 

其中, docker-compose.yml 文件的内容如下:

version: '3' services: mysql: image: mysql:5.7 volumes: - mysql_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: mywordpress MYSQL_USER: mywordpress MYSQL_PASSWORD: mywordpress wordpress: depends_on: - mysql image: wordpress:php7.4 ports: - "8080:80" restart: always environment: WORDPRESS_DB_HOST: mysql:3306 WORDPRESS_DB_USER: mywordpress WORDPRESS_DB_PASSWORD: mywordpress WORDPRESS_DB_NAME: mywordpress volumes: mysql_data: {} 

启动成功之后,可以通过 http://localhost:8080 访问WordPress。

# 停止启动的服务 $ docker-compose stop Stopping wordpress_wordpress_1 ... done Stopping wordpress_mysql_1 ... done 

原文链接:https://blog.csdn.net/weixin_41402069/article/details/125866494?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168623078216800185866810%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168623078216800185866810&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-6-125866494-null-null.268%5Ev1%5Ekoosearch&utm_term=docker%E3%80%81wordpress%E3%80%81wordpress%E5%BB%BA%E7%AB%99%E3%80%81wordpress%E4%B8%BB%E9%A2%98%E3%80%81%E5%AE%B9%E5%99%A8%E9%95%9C%E5%83%8F%E3%80%81

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享