默认的模板文件是 `docker-compose.yml`,其中定义的每个服务可以通过 `image` 指令指定镜像或 `build` 指令(当前路径下需要 Dockerfile)来自动构建。
**注意**如果使用 `build` 指令,在 `Dockerfile` 中设置的选项(例如:`CMD`, `EXPOSE`, `VOLUME`, `ENV` 等) 将会自动被获取,无需在 `docker-compose.yml` 中再次设置。如果设置了会被YML覆盖
命令 | 描述 |
---|---|
docker-compose up -d | 构建建启动容器 |
docker-compose exec bash | 登录到容器中 |
docker-compose down | 删除所有容器,镜像 |
docker-compose ps | 显示所有容器 |
docker-compose restart | 重新启动容器 |
docker-compose run --no-deps --rm php-fpm php -v | 在php-fpm中不启动关联容器,并容器执行php -v 执行完成后删除容器 |
docker-compose build | 构建镜像 |
docker-compose build --no-cache | 不带缓存的构建 |
docker-compose logs | 查看的日志 |
docker-compose logs -f | 验证(docker-compose.yml)文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息 |
docker-compose pause | 暂停容器 |
docker-compose unpause | 恢复容器 |
docker-compose rm | 删除容器(删除前必须关闭容器) |
docker-compose stop | 停止容器 |
docker-compose start | 启动容器 |
指定为镜像名称或镜像 ID。如果镜像在本地不存在,`Compose` 将会尝试拉去这个镜像。
image: ubuntu
image: mysql:5.7.22
指定 `Dockerfile` 所在文件夹的路径。 `Compose` 将会利用它自动构建这个镜像,然后使用这个镜像。
build: ./
build: ./web/
覆盖容器启动后默认执行的命令。
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
链接到其它服务中的容器。使用服务名称(同时作为别名)或服务名称:服务别名 `(SERVICE:ALIAS)` 格式都可以。使用的别名将会自动在服务容器中的 `/etc/hosts` 里创建
links:
- mysql
- db:database
- redis
容器内/etc/hosts
172.17.2.111 db
172.17.2.112 database
172.17.2.113 redis
链接到 docker-compose.yml 外部的容器,甚至 并非 `Compose` 管理的容器。参数格式跟 `links` 类似。
external_links:
- redis
- web_db_mysql:mysql
- web_db_oracle:oracle
- web_db_oracle:postg
暴露端口信息。使用 宿主:容器 `(HOST:CONTAINER)`格式或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。
ports:
- "6379"
- "8000:8000"
- "46200:22"
- "127.0.0.1:8080:8080"
暴露端口,但不映射到宿主机,只被连接的服务访问。可以指定内部端口为参数
expose:
- "3307"
- "6380"
卷挂载路径设置。可以设置宿主机路径 (`HOST:CONTAINER`) 或加上访问模式 (`HOST:CONTAINER:ro 或者rw`)。
volumes:
- ./mysql/data:/var/lib/mysql
- ./configs:/etc/configs/:ro
从另一个服务或容器挂载它的所有卷。
volumes_from:
- service_name
- container_name
设置环境变量。只给定名称的变量会自动获取它在 Compose 主机上的值,可以用来防止泄露不必要的数据。
environment:
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=wordpress
容器编排部署wordpress
[root@server01 ~]# vim docker-compose.yaml
version: '3'
services:
web:
image: wordpress:2.0
container_name: wordpress-web
ports:
- "80:80/tcp"
links:
- db:mysql-db
depends_on:
- db
db:
image: mysql:5.7
container_name: wordpress-db
environment:
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=wordpress
volumes:
- /opt/aaa:/var/lib/mysql
构建建启动容器
[root@server01 test]# docker compose -f docker-compose.yaml up #-f 指定文件