docker compose基本使用以及示例
一、docker-compose模板文件
字段 | 含义 |
build | 指定Dockerfile所在的文件夹路径 |
image | 指定为镜像名称或镜像ID |
container_name | 指定容器模式 |
depends_on | 指定多个服务之间的依赖关系 |
ports | 端口映射 |
command | 覆盖容器启动后默认执行的命令 |
entrypoint | 覆盖容器中默认的入口命令 |
env_file | 从文件中获取环境变量 |
environment | 设置环境变量 |
expose | 暴露端口,但不映射到宿主机 |
restart | 指定重启策略 |
healthcheck | 指定检测应用健康状态的机制 |
volumes | 数据卷所挂载路径设置 |
extends | 基于其他模板文件进行扩展 |
networks | 所加入的网络 |
ulimits | 指定容器的ulimits限制值 |
二、docker compose常用命令
命令 | 含义 |
docker compose up | 启动所有服务(-d 后台运行) |
docker compose down | 停止并删除容器(-v 同时删除数据卷) |
docker compose config | 校验和查看compose文件的配置信息 |
docker compose exec | 在一个运行中的容器内执行给定命令 |
docker compose logs | 查看服务容器的输出 |
docker compose pause | 暂停一个服务容器 |
docker compose restart | 重启项目中的服务 |
docker compose ps | 列出项目中目前的所有容器 |
docker compose top | 显示服务栈中正在运行的服务 |
三、docker-compose示例
部署discuz论坛和wordpress博客,使用adminer管理数据库。
1、编写docker-compose.yml:
[root@openEuler-4 ~]# mkdir discuz_wordpress && cd discuz_wordpress
[root@openEuler-4 discuz_wordpress]# vim docker-compose.yml
name: discuz_wordpress
services:adminer:container_name: adminerdepends_on:db:condition: service_startedrequired: trueimage: adminernetworks:mynetwork:ipv4_address: 172.18.0.15ports:- mode: ingresstarget: 8080published: "8080"protocol: tcprestart: alwaysdb:command:- --character-set-server=utf8- --collation-server=utf8_general_cicontainer_name: mysql57environment:MYSQL_DATABASE: wordpressMYSQL_PASSWORD: wordpressMYSQL_ROOT_PASSWORD: "123456"MYSQL_USER: wordpressimage: mysql:5.7networks:mynetwork:ipv4_address: 172.18.0.10restart: unless-stoppedvolumes:- type: volumesource: db_datatarget: /var/lib/mysqlvolume: {}discuz:container_name: discuzdepends_on:db:condition: service_startedrequired: trueenvironment:DISCUZ_DB_HOST: db:3306image: tencentci/discuznetworks:mynetwork:ipv4_address: 172.18.0.12ports:- mode: ingresstarget: 80published: "80"protocol: tcprestart: unless-stoppedvolumes:- type: volumesource: discuz_datatarget: /var/www/htmlvolume: {}wordpress:container_name: wordpressdepends_on:db:condition: service_startedrequired: trueenvironment:WORDPRESS_DB_HOST: db:3306WORDPRESS_DB_NAME: wordpressWORDPRESS_DB_PASSWORD: wordpressWORDPRESS_DB_USER: wordpressimage: wordpress:latestnetworks:mynetwork:ipv4_address: 172.18.0.11ports:- mode: ingresstarget: 80published: "8001"protocol: tcprestart: unless-stoppedvolumes:- type: volumesource: wp_datatarget: /var/www/htmlvolume: {}
networks:mynetwork:name: discuz_wordpress_mynetworkdriver: bridgeipam:driver: defaultconfig:- subnet: 172.18.0.0/24gateway: 172.18.0.1
volumes:db_data:name: discuz_wordpress_db_datadiscuz_data:name: discuz_wordpress_discuz_datawp_data:name: discuz_wordpress_wp_data
2、启动服务:
[root@openEuler-4 discuz_wordpress]# docker compose up -d
[root@openEuler-4 discuz_wordpress]# docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
adminer adminer "entrypoint.sh docke…" adminer 15 seconds ago Up 12 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
discuz tencentci/discuz "docker-php-entrypoi…" discuz 15 seconds ago Up 13 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp
mysql57 mysql:5.7 "docker-entrypoint.s…" db 15 seconds ago Up 14 seconds 3306/tcp, 33060/tcp
wordpress wordpress:latest "docker-entrypoint.s…" wordpress 15 seconds ago Up 13 seconds 0.0.0.0:8001->80/tcp, :::8001->80/tcp
3、测试
输入http://IP:80访问discuz:
输入http://IP:8001访问wordpress:
输入http://IP:8080访问adminer: