Docker Compose 使用

发布时间 2023-12-15 11:10:50作者: 貌似大家

Docker Compose 使用

Compose 简介

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

使用

# yaml 配置
version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
  redis:
    image: "redis:alpine"

该 Compose 文件定义了两个服务:web 和 redis。

  • web:该 web 服务使用从 Dockerfile 当前目录中构建的镜像。然后,它将容器和主机绑定到暴露的端口 5000。此示例服务使用 Flask Web 服务器的默认端口 5000 。
  • redis:该 redis 服务使用 Docker Hub 的公共 Redis 映像。
build               Build or rebuild services
bundle              Generate a Docker bundle from the Compose file
config              Validate and view the Compose file
create              Create services
down                Stop and remove containers, networks, images, and volumes
events              Receive real time events from containers
exec                Execute a command in a running container
help                Get help on a command
images              List images
kill                Kill containers
logs                View output from containers
pause               Pause services
port                Print the public port for a port binding
ps                  List containers
pull                Pull service images
push                Push service images
restart             Restart services
rm                  Remove stopped containers
run                 Run a one-off command
scale               Set number of containers for a service
start               Start services
stop                Stop services
top                 Display the running processes
unpause             Unpause services
up                  Create and start containers
version             Show the Docker-Compose version information

参数

context:上下文路径。
dockerfile:指定构建镜像的 Dockerfile 文件名。
args:添加构建参数,这是只能在构建过程中访问的环境变量。
labels:设置构建镜像的标签。
target:多层构建,可以指定构建哪一层。

command

覆盖容器启动的默认命令。

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

container_name

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

container_name: my-web-container

logging

容器日志设置

logging:
  driver: "json-file"
  options:
    max-size: "100m"
    max-file: "3"
  remove: true

depends_on

设置依赖关系。

  • docker-compose up :以依赖性顺序启动服务。在以下示例中,先启动 db 和 redis ,才会启动 web。
  • docker-compose up SERVICE :自动包含 SERVICE 的依赖项。在以下示例中,docker-compose up web 还将创建并启动 db 和 redis。
  • docker-compose stop :按依赖关系顺序停止服务。在以下示例中,web 在 db 和 redis 之前停止。
version: "3.7"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

networks

方法二:使用自定义网络

version: "3"
services:
  your_service:
    image: your_image
    network_mode: "host" # 这样容器将与主机共享网络命名空间 且 ports 将不再生效

方法二:使用自定义网络

version: "3"
services:
  your_service:
    image: your_image
    networks:
      - custom_network

networks:
  custom_network:
    driver: bridge

在这个例子中,your_service 将连接到 custom_network 网络。你可以使用容器的名称或 IP 地址来访问服务。例如,如果你的容器名称是 your_service,你可以使用 http://your_service:container_port 来访问服务。

选择哪种方法取决于你的需求和安全考虑。如果只是需要快速访问主机上的端口,使用 "host" 网络模式可能更方便。如果你想更好地控制网络连接并保持更好的隔离性,可以选择使用自定义网络。

environment

设置环境变量 等于 docker run -e MY_VARIABLE=my_value my_image

version: '3'

services:
  my_service:
    image: my_image
    environment:
      - MY_VARIABLE=my_value
      - ANOTHER_VARIABLE=another_value
# 顶层设置等于给所有启动容器用
environment:
 - COMMON_VARIABLE=common_value

extra_hosts

添加主机名映射。类似 docker client --add-host。

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

以上会在此服务的内部容器中 /etc/hosts 创建一个具有 ip 地址和主机名的映射关系:

162.242.195.82  somehost
50.31.209.229   otherhost

# 实际ip 映射ip

最佳实例

docker-compose.yml

version: '3'
services:
  my-container:
    image: nginx:latest
    container_name: nginx
    environment:
      - USER=RENOYUAN
    volumes:
      - ./shared:/app/shared
    network_mode: "host"
    ports:
     - "1102:1102"
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
        max-file: "3"
      remove: true

使用 Compose 命令运行应用

在 docker-compose.yml 目录下运行

启动容器
docker-compose up  -d -v my-service  
# 可选参数 -d 后台启动 -v 删除容器卷   my-service 只操作里面指定服务
关闭/删除容器
docker-compose down
重启服务
docker-compose restart
暂停服务
docker-compose pause
恢复服务
docker-compose unpause

其他

关于YML

YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。

YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。

YAML 的配置文件后缀为 .yml,如:runoob.yml

基本语法

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • '#'表示注释

https://www.runoob.com/w3cnote/yaml-intro.html