docker-compose命令及yaml⽂件
Docker-compose常⽤命令
docker-compose up -d nginx                    构建建启动nignx容器
docker-compose exec nginx bash            登录到nginx容器中
docker-compose down                              删除所有nginx容器,镜像
docker-compose ps                                  显⽰所有容器
docker-compose restart nginx                  重新启动nginx容器
docker-compose run --no-deps --rm php-fpm php -v  在php-fpm中不启动关联容器,并容器执⾏php -v 执⾏完成后删除容器
docker-compose build nginx                    构建镜像。
docker-compose build --no-cache nginx  不带缓存的构建。
docker-compose logs  nginx                    查看nginx的⽇志
docker-compose logs -f nginx                  查看nginx的实时⽇志
docker-compose config  -q                      验证(l)⽂件配置,当配置正确时,不输出任何内容,当⽂件配置错误,输出错误信息。docker-compose events --json nginx      以json的形式输出nginx的docker⽇志
docker-compose pause nginx                暂停nignx容器
docker-compose unpause nginx            恢复ningx容器
docker-compose rm nginx                      删除容器(删除前必须关闭容器)
docker-compose stop nginx                    停⽌nignx容器
docker-compose start nginx                    启动nignx容器
官⽹⽰例:
version: "3.7"
services:
redis:
image: redis:alpine
ports:
- "6379"
networks:
- frontend
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
db:
image: postgres:9.4
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
deploy:
placement:
constraints: [le == manager]
vote:
image: dockersamples/examplevotingapp_vote:before
ports:
- "5000:80"
networks:
- frontend
depends_on:
- redis
deploy:
replicas: 2
update_config:
parallelism: 2
restart_policy:
condition: on-failure
result:
image: dockersamples/examplevotingapp_result:before
ports:
- "5001:80"
networks:
- backend
depends_on:
-
db
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
worker:
image: dockersamples/examplevotingapp_worker
networks:
-
frontend
- backend
deploy:
mode: replicated
replicas: 1
labels: [APP=VOTING]
restart_policy:
condition: on-failure
delay: 10s
max_attempts: 3
window: 120s
placement:
constraints: [le == manager]
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [le == manager]
networks:
frontend:
backend:
volumes:
db-data:
部分分解
##服务基于已经存在的镜像
services:
web:
image: hello-world
##服务基于dockerfile
build: /path/to/build/dir
build: ./dir
build:
context: ../
dockerfile: path/of/Dockerfile
build: ./dir
image: webapp:tag
##command
command命令可以覆盖容器启动后默认执⾏的命令
command: bundle exec thin -p 3000
command: [bundle, exec, thin, -p, 3000]
##container_name
Compose 的容器名称格式是:<;项⽬名称><;服务名称><;序号>
虽然可以⾃定义项⽬名称、服务名称,但是如果你想完全控制容器的命名,可以使⽤这个标签指定
container_name: app
##depends_on
depends_on解决了容器的依赖、启动先后的问题
version: '2'
services:
web:
build: .
depends_on:
-
db
- redis
redis:
image: redis
db:
##dns
dns: 8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9
dns_search: example
dns_search:
- ample
- ample
##tmfs
挂载临时⽬录到容器内部,与run的参数⼀样效果
tmpfs: /run
tmpfs:
- /run
- /tmp
##environment
设置镜像变量,它可以保存变量到镜像⾥,也就是说启动的容器也会包含这些变量设置
environment:
RACK_ENV: development
SHOW: 'true'
SESSION_SECRET:
environment:
- RACK_ENV=development
- SHOW=true
- SESSION_SECRET
##expose
⽤于指定暴露的端⼝,但是只是作为参考,端⼝映射的话还得ports标签
expose:
-
"3000"
- "8000"
##external_links
在使⽤Docker的过程中,我们会有许多单独使⽤docker run启动的容器,为了使Compose能够连接这些不在l中定义的容器,我们需要⼀个特殊的标签,就是external_links,它可以让Compose项⽬⾥⾯的容器连external_links:
- redis_1
- project_db_1:mysql
- project_db_1:postgresql
##extra_hosts
添加主机名的标签,就是往容器内部/etc/hosts⽂件中添加⼀些记录
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
##labels
向容器添加元数据,和Dockerfile的lable指令⼀个意思
labels:
- "ample.description=Accounting webapp"
- "ample.department=Finance"
- "ample.label-with-empty-value"
##links
nginx停止命令解决容器连接问题,与docker的–link⼀样的效果,会连接到其他服务中的容器,使⽤的别名将会⾃动在服务容器中的/etc/hosts⾥创建
links:
- db
- db:database
- redis
##ports
⽤作端⼝映射
使⽤HOST:CONTAINER格式或者只是指定容器的端⼝,宿主机会随机映射端⼝
ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
当使⽤HOST:CONTAINER格式来映射端⼝时,如果你使⽤的容器端⼝⼩于60你可能会得到错误得结果,因为YAML将会解析xx:yy这种数字格式为60进制。所以建议采⽤字符串格式
##security_opt
为每个容器覆盖默认的标签。简单说来就是管理全部服务的标签,⽐如设置全部服务的user标签值为USER
security_opt:
- label:user:USER
- label:role:ROLE
##volumes
挂载⼀个⽬录或者⼀个已经存在的数据卷容器,可以直接使⽤[HOST:CONTAINER]这样的格式,或者使⽤[HOST:CONTAINER:ro]这样的格式,或者对于容器来说,数据卷是只读的,这样可以有效保护宿主机的⽂件系统。compose的数据卷指定路径可以是相对路径,使⽤ . 或者 … 来指定性对⽬录
volumes:
// 只是指定⼀个路径,Docker 会⾃动在创建⼀个数据卷(这个路径是容器内部的)。
- /var/lib/mysql
// 使⽤绝对路径挂载数据卷
- /opt/data:/var/lib/mysql
// 以 Compose 配置⽂件为中⼼的相对路径作为数据卷挂载到容器。
- ./cache:/tmp/cache
// 使⽤⽤户的相对路径(~/ 表⽰的⽬录是 /home/<⽤户⽬录>/ 或者 /root/)。
- ~/configs:/etc/configs/:ro
// 已经存在的命名的数据卷。
- datavolume:/var/lib/mysql
如果你不使⽤宿主机的路径,你可以指定⼀个volume_driver。
volume_driver: mydriver
##volumes_from
从其它容器或者服务挂载数据卷,可选的参数是:ro或者:rw,前者表⽰容器只读,后者表⽰容器对数据卷是可读可写的,默认是可读可写的
volumes_from:
- service_name
- service_name:ro
- container:container_name
- container:container_name:rw
##network_mode
⽹络模式,与docker client的–net参数类似,只是相对多了⼀个service:[sevice name]的格式
network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
##networks
加⼊指定⽹络
services:
some-service:
networks:
- some-network
- other-network

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。