docker-compose.yml文件和docker compose使用
注:当使用 HOST:CONTAINER 格式来映射端口时,如果你使用的容器端口小于 60 你可能会得到错误得结果,因为 YAML 将会解析 xx:yy 这种数字格式为 60 进制。只给定名称的变量会自动获取它在 Compose 主机上的值,可以用来防止泄露不必要的数据。用于设置指定网络,子标签aliases用于设置服务别名,相同的别名可以在不同的网络中拥有不同的识别别名。链接到其它服务中的容器。
1. 概要
默认的模板文件是 docker-compose.yml
,其中定义的每个服务可以通过 image
指令指定镜像或 build
指令(需要 Dockerfile)来自动构建。
注意如果使用 build
指令,在 Dockerfile
中设置的选项(例如:CMD
, EXPOSE
, VOLUME
, ENV
等) 将会自动被获取,无需在 docker-compose.yml
中再次设置。如果设置了会被YML覆盖
2. 常用的docker-compose命令
命令 | 描述 |
---|---|
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 | 启动容器 |
2.1、image
说明
指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose
将会尝试拉去这个镜像。
image: ubuntu
image: mysql:5.7.22
2.2、build
说明
指定 Dockerfile
所在文件夹的路径。 Compose
将会利用它自动构建这个镜像,然后使用这个镜像。
build: ./
build: ./web/
2.3、command
说明
覆盖容器启动后默认执行的命令。
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
2.4、links
说明
链接到其它服务中的容器。使用服务名称(同时作为别名)或服务名称:服务别名 (SERVICE:ALIAS)
格式都可以。
links:
- mysql
- db:database
- redis
使用的别名将会自动在服务容器中的 /etc/hosts
里创建。例如:
172.17.2.111 db
172.17.2.112 database
172.17.2.113 redis
2.5、external_links
说明
链接到 docker-compose.yml 外部的容器,甚至 并非 Compose
管理的容器。参数格式跟 links
类似。
external_links:
- redis
- web_db_mysql:mysql
- web_db_oracle:oracle
- web_db_oracle:postgre
2.6、ports
说明
暴露端口信息。使用宿主:容器 (HOST:CONTAINER)
格式或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。
ports:
- "6379"
- "8000:8000"
- "46200:22"
- "127.0.0.1:8080:8080"
注:当使用 HOST:CONTAINER 格式来映射端口时,如果你使用的容器端口小于 60 你可能会得到错误得结果,因为 YAML 将会解析 xx:yy 这种数字格式为 60 进制。所以建议采用字符串格式。
1.7、expose
说明
暴露端口,但不映射到宿主机,只被连接的服务访问。可以指定内部端口为参数
expose:
- "3307"
- "6380"
1.8、volumes
说明
卷挂载路径设置。可以设置宿主机路径 (HOST:CONTAINER
) 或加上访问模式 (HOST:CONTAINER:ro 或者rw
)。
volumes:
- ./mysql/data:/var/lib/mysql
- ./configs:/etc/configs/:ro
1.9、volumes_from
说明
从另一个服务或容器挂载它的所有卷。
volumes_from:
- service_name
- container_name
1.10、environment
说明
设置环境变量。只给定名称的变量会自动获取它在 Compose 主机上的值,可以用来防止泄露不必要的数据。
environment:
MYSQL_ROOT_PASSWORD: root
TZ: Asia/Shanghai
1.11、networks
说明
用于设置指定网络,子标签aliases用于设置服务别名,相同的别名可以在不同的网络中拥有不同的识别别名。
可以在service中使用,也可以在顶级标签中使用
services:
some-service:
networks:
some-network:
aliases:
- alias1
- alias3
other-network:
aliases:
- alias2
# 定义网络
networks:
default:
external:
name: app
1.12、depends_on
说明
-
字段名称:depends_on
-
数据类型:字典(对象)
-
作用:定义当前服务依赖的其他服务
-
语法:depends_on:
-
service_name: 依赖的服务名称,可以是单个服务或服务列表。
services:
web:
image: nginx
depends_on:
- db
- redis
db:
image: mysql
redis:
image: redis
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)