Docker Compose 常用配置指令详解【三】

本文详细介绍了Docker Compose的常用配置指令,包括version、image、build、command、entrypoint、container_name等,以及如何设置服务依赖、端口映射、数据卷挂载和网络模式。此外,还提到了环境变量、重启策略和secrets的使用,帮助读者深入理解Docker Compose在部署多容器应用时的关键配置选项。
摘要由CSDN通过智能技术生成

1. version

  指定本yml从compose那个版本制定的。
  Compose目前有三个版本分别为Version1,Version2,Version3,Compose区分Version1、Version2(Compose 1.6.0+,Docker Engine 1.10.0+)。Version 2支持更多的指令。Version 1将来会被弃用。

2. image

  image是指定服务的镜像名称或镜像ID,如果镜像本地不存在,Compose将会尝试从仓库中拉取镜像。

services:
    web:
        image: hello-world

3. build

  服务除了可以基于指定的镜像,还可以基于一份Dockerfile,在使用up启动时执行构建任务,构建标签是build,可以指定Dockerfile所在文件夹的路径。Compose将会利用Dockerfile自动构建镜像,然后使用镜像启动服务容器。

 #绝对路径
build: /path/to/build/dir  
#相对路径
build: ./dir       
#对象
build:	           
	context: ./dir
    dockerfile: Dockerfile
    args:
        buildno: 1

注:如果同时指定image和build俩个标签,那么Compose会构建镜像并且把镜像命名为image值指定的名字。

4. commond

  使用command可以覆盖容器启动后默认执行的命令。

command: bundle exec thin -p 3000
或
command: [bundle,exec,thin,-p,3000]

5. entrypoint

  覆盖容器默认的 entrypoint。

entrypoint: /code/entrypoint.sh
或
entrypoint:
    - php
    - -d
    - zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so
    - -d
    - memory_limit=-1
    - vendor/bin/phpunit

6. container_name

  指定自定义容器名称,而不是生成的默认名称。

container_name: my-web-container

7. depends_on

  设置服务之间的依赖关系。

version: '2'
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

上面yml文件中定义的容器会先启动redis和db俩个服务,最后才启动web服务。但是web服务不会等待redis、db完全启动之后才启动,一旦redis、db的状态为up就开始启动web。

8. port

  用于映射端口的标签。

ports:
 - "3000" #宿主机随机映射的端口到容器的3000端口
 - "8000:8000"
 - "49100:22"
 - "127.0.0.1:8001:8001
注:
	当使用HOST:CONTAINER格式来映射端口时,如果使用的容器端口小于60可能会得到错误得结果,因为YAML将会解析xx:yy这种数字格式为60进制。所以建议采用字符串格式。

9. port

  添加主机名的标签,会在/etc/hosts文件中添加一些记录。

extra_hosts:
 - "somehost:162.242.195.82"
 - "otherhost:50.31.209.229"

10. volumes

  挂载一个目录或者一个已存在的数据卷容器。

volumes:
	- /var/lib/mysql   #匿名数据卷,会在宿主机中随机创建一个目录。
	- /opt/data:/var/lib/mysql #使用绝对路径挂载数据卷(宿主机:容器)
	- ./cache:/tmp/cache  #相对于Compose配置文件路径作为数据挂载卷挂载到容器。
  	- ~/configs:/etc/configs/:rw  #使用用户的相对路径(~/ 表示的目录是 /home/<用户目录>/ 或者 /root/)。
    - datavolume:/var/lib/mysql #已经存在的命名的数据卷。

11. volumes_from

  从另一个服务或容器挂载其数据卷。

volumes_from:
   - service_name   
     - container_name

12. dns

  自定义DNS服务器。可以是一个值,也可以是一个列表。

dns:8.8.8.8
dns:
    - 8.8.8.8   
    - 9.9.9.9

13. expose

  暴露端口,但不映射到宿主机,只被连接的服务访问,与Dockerfile中expose 对应。

expose:
    - "3000"
    - "8000"

14. port

  对外暴露的端口定义。

ports:   # 暴露端口信息  - "宿主机端口:容器暴露端口"
- "8763:8763"
- "8763:8763"

15. links

  将指定容器连接到当前连接,可以设置别名,避免ip方式导致的容器重启动态改变的无法连接情况。

links:  # 指定服务名称:别名 
    - db
    - db:database
    - redis

16. network_mode

  设置网络模式。

network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"

17. environment

  环境变量配置,可以用数组或字典两种方式。

environment:
    RACK_ENV: development
    SHOW: 'ture'
-------------------------
environment:
    - RACK_ENV=development
    - SHOW=ture

18. env_file

  从文件中获取环境变量,可以指定一个文件路径或路径列表,其优先级低于 environment 指定的环境变量。

env_file: .env
---------------
env_file:
    - ./common.env

19. restart

  设置重启的策略

  • no:是默认的重启策略,在任何情况下都不会重启容器。
  • always:容器总是重新启动。
  • on-failure:在容器非正常退出时(退出状态非0),才会重启容器。
  • unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
restart: "no"
restart: always
restart: on-failure
restart: unless-stopped
注:
	swarm 集群模式,请改用 restart_policy。

20 secrets

  存储敏感数据,例如密码。

version: "3.1"
services:

mysql:
  image: mysql
  environment:
    MYSQL_ROOT_PASSWORD_FILE: /run/secrets/my_secret
  secrets:
    - my_secret

secrets:
  my_secret:
    file: ./my_secret.txt

21. Docker-Compose模板文件示例

version: '3'
services:
  web1:
    image: nginx
    ports:
      - "6061:80"
    container_name: "web1"
    networks:
      - dev
  web2:
    image: nginx
    ports:
      - "6062:80"
    container_name: "web2"
    networks:
      - dev
      - pro
  web3:
    image: nginx
    ports:
      - "6063:80"
    container_name: "web3"
    networks:
      - pro
 
networks:
  dev:
    driver: bridge
  pro:
    driver: bridge
docker-compose 搭建的lamp+redis 代码 附上docker-compose # 标准配置文件应该包含 version、services、networks 大部分, # 其中最关键的就是 services 和 networks 两个部分,下面先来看 services 的书写规则 # 指定版本号 version: '2' services: # 在 services 标签下的第二级标签是 console,这个名字是用户自己自定义,它就是服务名称。 console: # 为自定义的容器指定一个名称,而不是使用默认的名称 container_name: console # 容器内置名称 hostname: console # 指明路径 build: # context 指定绝对路径或者相对路径 context: ./images/console # dockerfile 指定 Dockerfile 的文件名称 dockerfile: Dockerfile # volumes_from 从其它容器或者服务挂载数据卷, # 可选的参数是 :ro 或 :rw,前者表示容器只读,后者表示容器对数据卷是可读可写的(默认情况为可读可写的)。 volumes_from: - php # 挂载一个目录或者一个已存在的数据卷容器,可以直接使用 HOST:CONTAINER 这样的格式 # ,或者使用 HOST:CONTAINER:ro 这样的格式,后者对于容器来说,数据卷是只读的,这样可以有效保护宿主机的文件系统 volumes: # 使用绝对路径挂载数据卷 - /root/.ssh/:/root/.ssh/ # 类似于使用 docker run 的效果 我也不知道 不写因为console并不是直接启动导致镜像不会产生 tty: true # web,这个名字是用户自己自定义,它就是服务名称。 web: # 为自定义的容器指定一个名称,而不是使用默认的名称 container_name: web # 容器内置名称 hostname: web # 指明路径 build: # context 指定绝对路径或者相对路径 context: ./images/nginx # dockerfile 指定 Dockerfile 的文件名称 dockerfile: Dockerfile # 映射端口 ports: - '80:80' # 此选项解决了启动顺序的问题 这个的意思是必须在php启动以后才能启动 # 注意的是,默认情况下使用 docker-compose up web 这样的方式启动 web 服务时, # 也会启动 php 服务,因为在配置文件中定义了依赖关系 depends_on: - php # volumes_from 从其它容器或者服务挂载数据卷, volumes_from: - php volumes: # 已经存在的命名的数据卷 - nginx-log:/var/log/nginx # 以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器 - ./images/nginx/sites-enabled:/etc/nginx/sites-enabled - ./images/nginx/cert:/etc/nginx/cert # 加入指定网络 networks: default: # 同一网络上的其他容器可以使用服务器名称或别名来连接到其他服务的容器 aliases: - web.sunchanghao.top - mid.sunchanghao.top - sevice.sunchanghao.top - admin.sunchanghao.top # php,这个名字是用户自己自定义,它就是服务名称。 php: # 为自定义的容器指定一个名称,而不是使用默认的名称 container_name: php # 容器内置名称 hostname: php # 服务除了可以基于指定的镜像,还可以基于一份 Dockerfile, # 在使用 up 启动之时执行构建任务,这个构建标签就是 build,它可以指定 Dockerfile # 所在文件夹的路径。Compose 将会利用它自动构建这个镜像,然后使用这个镜像启动服务容器 build: # context 选项可以是 Dockerfile 的文件路径,也可以是到链接到 git 仓库的 url # 当提供的值是相对路径时,它被解析为相对于撰写文件的路径,此目录也是发送到 Docker 守护进程的 context context: ./images/php # 使用此 dockerfile 文件来构建,必须指定构建路径 dockerfile: Dockerfile # 挂载一个目录或者一个已存在的数据卷容器, volumes: # 以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器。 - ./app:/mnt/app # db,这个名字是用户自己自定义,它就是服务名称。 db: # 为自定义的容器指定一个名称,而不是使用默认的名称 container_name: db # 容器内置名称 hostname: db # 从指定的镜像中启动容器,可以是存储仓库、标签以及镜像 ID image: mysql:5.7 environment: MYSQL_USER: 'sch' MYSQL_PASS: '1111' MYSQL_ROOT_PASSWORD: 'root' volumes: - db:/var/lib/mysql ports: - '3306:3306' redis: # 为自定义的容器指定一个名称,而不是使用默认的名称 container_name: redis # 容器内置名称 hostname: redis # image 则是指定服务的镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。 image: redis:3.2.7 # 设置端口号 ports: - '6379:6379' # 挂载一个目录或者一个已存在的数据卷容器 volumes: # 已经存在的命名的数据卷。 - redis:/data # node volumes: nginx-log: # 设置volume的驱动,默认是local. driver: local db: driver: local redis: driver: local
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值