指令
最后更新于:2022-04-02 03:06:10
[TOC]
## 指令
### build 指定 `Dockerfile`路径,并构建它
`Dockerfile`所在绝对或相对路径
`build: /path/to/build/dir`
### command 覆盖容器启动后默认执行的命令
```
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
```
### devices 指定设备映射
```
devices:
- "/dev/ttyUSB1:/dev/ttyUSB0"
```
### env_file 导入 env 环境
```
env_file: .env
env_file:
- ./common.env
- ./apps/web.env
- /opt/secrets.env
```
common.env
```bash
# common.env: 自持 # 注释
PROG_ENV=development
```
### environment 设置环境变量
```
environment:
RACK_ENV: development
SESSION_SECRET:
//or
environment:
- RACK_ENV=development
- SESSION_SECRET
```
> 如果变量名称或者值中用到`true|false,yes|no`等表达布尔含义的词汇,最好放到引号里,避免 YAML 自动解析某些内容为对应的布尔语义
### expose 暴露端口,但不映射到宿主机
只被连接的服务访问,仅可以指定内部端口为参数
```
expose:
- "3000"
- "8000"
```
### extends 基于其它模板文件进行扩展
```
# common.yml
webapp:
build: ./webapp
environment:
- DEBUG=false
- SEND_EMAILS=false
```
```
# development.yml
web:
extends:
file: common.yml
service: webapp
ports:
- "8000:8000"
links:
- db
environment:
- DEBUG=true
db:
image: postgres
```
> 推荐在基础模板中只定义一些可以共享的镜像和环境变量,在扩展模板中具体指定应用变量、链接、数据卷等信息
### extra_hosts
```
extra_hosts:
- "googledns:8.8.8.8"
- "dockerhub:52.1.157.61"
```
会在启动后的服务容器中`/etc/hosts`文件中添加如下两条条目。
```
8.8.8.8 googledns
52.1.157.61 dockerhub
```
### image 指定镜像名为或 id
指定镜像名为或 id ,Compose 会进行拉取
```
image: ubuntu
image: orchardup/postgresql
image: a4bc65fd
```
### labels 为容器添加 Docker 元数据
为容器添加 Docker 元数据(metadata)信息。例如可以为容器添加辅助说明信息。
```
labels:
com.startupteam.description: "webapp for a startup team"
com.startupteam.department: "devops department"
com.startupteam.release: "rc3 for v1.0"
```
### links 链接到其它服务中的容器
使用服务名称(同时作为别名)或服务名称:服务别名
```
links:
- db
- db:database
- redis
```
使用的别名将会自动在服务容器中的 /etc/hosts 里创建。例如:
```
172.17.2.186 db
172.17.2.186 database
172.17.2.187 redis
```
### net 设置网络模式
使用和 docker client 的 --net 参数一样的值。
```
net: "bridge"
net: "none"
net: "container:[name or id]"
net: "host"
```
### ports 暴露端口信息
```
ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
```
### ulimits
指定容器的 ulimits 限制值
```
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000
```
### privileged 拥有正真的 root权限
开了可以挂载host上的硬盘或其它的设备
### volumes
数据卷所挂载路径设置
```
volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
```
### volumes_from
```
从另一个服务或容器挂载它的数据卷。
volumes_from:
- service_name
- container_name
```
### entrypoint 指定服务容器启动后执行的命令
`entrypoint: /code/entrypoint.sh`
### user: nginx 指定容器中运行应用的用户名
`user: nginx`
### working_dir 指定容器中工作目录
`working_dir: /code`
### restart:always 指定容器退出后的重启策略为始终重启
`restart: always`
### 模拟一个假的远程控制台
`tty: true`
';