version: "3.8" services: web: build: . depends_on: - db - redis redis: image: redis db: image: mysql
上述 YAML 文件定义的容器会先启动 db 和 redis 两个服务 , 最后才启动 web 服务 。
ports
容器对外暴露的端口 , 格式:左边宿主机端口:右边容器端口 。
ports: - "80:80" - "8080:8080"
expose
容器暴露的端口不映射到宿主机 , 只允许能被连接的服务访问 。
expose: - "80" - "8080"
restart
容器重启策略 , 简单的理解就是 Docker 重启以后容器要不要一起启动:
- no:默认的重启策略 , 在任何情况下都不会重启容器;
- on-failure:容器非正常退出时 , 比如退出状态为非0(异常退出) , 才会重启容器;
- always:容器总是重新启动 , 即使容器被手动停止了 , 当 Docker 重启时容器也还是会一起启动;
- unless-stopped:容器总是重新启动 , 除非容器被停止(手动或其他方式) , 那么 Docker 重启时容器则不会启动 。
services: nginx: image: nginx container_name: mynginx ports: - "80:80" restart: always
environment
添加环境变量 。可以使用数组也可以使用字典 。布尔相关的值(true、false、yes、no)都需要用引号括起来 , 以确保 YML 解析器不会将它们转换为真或假 。
environment: RACK_ENV: development SHOW: 'true' SESSION_SECRET:
或者以下格式: environment: - RACK_ENV=development - SHOW=true - SESSION_SECRET
env_file
从文件中获取环境变量 , 可以指定一个或多个文件 , 其优先级低于 environment 指定的环境变量 。
env_file: - /opt/runtime_opts.env # 绝对路径 - ./common.env # 相对路径 , 相对当前 docker-compose.yml 文件所在目录 - ./Apps/web.env # 相对路径 , 相对当前 docker-compose.yml 文件所在目录
注意:env 文件中的每一行需采用 键=值 格式 。以 # 开头的行会被视为注释并被忽略 。空行也会被忽略 。
command
覆盖容器启动后默认执行的命令 。
command: echo "helloworld"
该命令也可以是一个列表 。 command: ["echo", "helloworld"]
volumes
数据卷 , 用于实现目录挂载 , 支持指定目录挂载、匿名挂载、具名挂载 。
- 指定目录挂载的格式为:左边宿主机目录:右边容器目录 , 或者左边宿主机目录:右边容器目录:读写权限;
- 匿名挂载格式为:容器目录即可 , 或者容器目录即可:读写权限;
- 具名挂载格式为:数据卷条目名称:容器目录 , 或者数据卷条目名称:容器目录:读写权限 。
关于匿名挂载/具名挂载更多的内容请阅读《Docker 最常用的镜像命令和容器命令 》文章中容器相关命令部分的目录挂载(容器数据卷操作)的内容 。
# 描述 Compose 文件的版本信息 version: "3.8" # 定义服务 , 可以多个 services: mysql: # 服务名称 image: mysql:8 # 创建容器时所需的镜像 container_name: mysql8 # 容器名称 , 默认为"工程名称_服务条目名称_序号" ports: # 宿主机与容器的端口映射关系 - "3306:3306" # 左边宿主机端口:右边容器端口 environment: # 创建容器时所需的环境变量 MYSQL_ROOT_PASSWORD: 1234 volumes: # 绝对路径 - "/mydata/docker_mysql/data:/var/lib/mysql" # 相对路径 , 相对当前 docker-compose.yml 文件所在目录 - “./conf:/etc/mysql/conf.d“ # 匿名挂载 , 匿名挂载只需要写容器目录即可 , 容器外对应的目录会在 /var/lib/docker/volume 中生成 - "/var/lib/mysql" # 具名挂载 , 就是给数据卷起了个名字 , 容器外对应的目录会在 /var/lib/docker/volume 中生成 - "mysql-data-volume:/var/lib/mysql" # 定义数据卷 , 可以多个 volumes: mysql-data-volume: # 一个具体数据卷的条目名称 name: mysql-data-volume # 数据卷名称 , 默认为"工程名称_数据卷条目名称"
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Docker-For-Pentest的渗透测试镜像推荐
- Docker 安装es和kibana踩坑记录
- Calico网络架构
- linux操作系统上安装docker
- docker 镜像的使用
- 用docker搭建 drogon 环境 世界最快WEB
- 用这个Python的Docker正式版镜像,你也能成容器高玩
- k8s版本平滑升级
- 如何按照条件向Spring容器中注册bean?这次我懂了
- Docker 的前世今生