Docker 入门篇(八)-- Docker Compose 使用指南

一、Docker Compose 简介

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

Compose 使用的三个步骤:

  • 使用 Dockerfile 定义应用程序的环境。

  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。

  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

二、离线安装 docker-compose

1. 下载docker-compose

官方地址:

复制代码
> https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-linux-x86_64

2. 安装

将 docker-compose-linux-x86_64 文件上传到 /root 目录,执行下列命令

bash 复制代码
#移动文件到/usr/local/bin/,并重命名为docker-compose
sudo mv /root/docker-compose-linux-x86_64  /usr/local/bin/docker-compose
#赋予docker-compose 可执行权限。
sudo chmod +x /usr/local/bin/docker-compose

#查看版本 docker-compose version

bash 复制代码
docker-compose -v

三、yml 配置指令参考

1. version

指定本 yml 依从的 compose 哪个版本制定的。

2. build

指定为构建镜像上下文路径:

例如 webapp 服务,指定为从上下文路径 ./dir/Dockerfile 所构建的镜像:

bash 复制代码
version: "3.7"
services:
  webapp:
    build: ./dir

或者,作为具有在上下文指定的路径的对象,以及可选的 Dockerfile 和 args:

bash 复制代码
version: "3.7"
services:
  webapp:
    build:
      context: ./dir
      dockerfile: Dockerfile-alternate
      args:
        buildno: 1
      labels:
        - "com.example.description=Accounting webapp"
        - "com.example.department=Finance"
        - "com.example.label-with-empty-value"
      target: prod
  • context:上下文路径。
  • dockerfile:指定构建镜像的 Dockerfile 文件名。
  • args:添加构建参数,这是只能在构建过程中访问的环境变量。
  • labels:设置构建镜像的标签。
  • target:多层构建,可以指定构建哪一层。

3. command

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

bash 复制代码
command: ["bundle", "exec", "thin", "-p", "3000"]

4.container_name

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

bash 复制代码
container_name: my-web-container

5.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 之前停止。

bash 复制代码
version: "3.7"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

6.expose

暴露端口,但不映射到宿主机,只被连接的服务访问。

仅可以指定内部端口为参数

bash 复制代码
expose:
 - "3000"
 - "8000"

7. image

指定容器运行的镜像。以下格式都可以:

bash 复制代码
image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd # 镜像id

更多配置参考:runoob:docker-compose

8.volumes

将主机的数据卷或者文件挂载到容器里。

bash 复制代码
version: "3.7"
services:
  db:
    image: postgres:latest
    volumes:
      - "/localhost/postgres.sock:/var/run/postgres/postgres.sock"
      - "/localhost/data:/var/lib/postgresql/data"

9.networks

  1. 默认网络:默认情况下,Docker Compose 会为应用程序创建一个网络,名称为 Docker Compose 配置文件(docker-compose.yml)所在目录名称的小写形式加上 "_default" 。例如,如果配置文件位于名为 "myapp" 的目录中,那么默认网络的名称就是 "myapp_default"。每个在 docker-compose.yml 文件中定义的服务(services)都会加入这个默认网络中,使得它们可以相互通信

  2. 自定义网络:除了默认网络之外,你还可以在 docker-compose.yml 文件中定义自定义网络。这样,你可以为应用程序创建具有特定名称和配置的网络。例如:

bash 复制代码
version: '3'  
services:  
  web:  
    build: .  
    ports:  
      - "80:80"  
    networks:  
      - mynetwork  
  db:  
    image: mysql:latest  
    networks:  
      - mynetwork  
networks:  
  mynetwork:  
    driver: bridge
  1. 使用已存在的网络:如果你已经使用 docker network create 命令创建了一个网络,并且希望 Docker Compose 的服务能够加入这个网络 ,你可以在 docker-compose.yml 文件中使用 external 关键字来引用这个网络。例如:
bash 复制代码
version: '3'  
services:  
  web:  
    build: .  
    ports:  
      - "80:80"  
    networks:  
      - myexistingnetwork  
networks:  
  myexistingnetwork:  
    external: true

在这个例子中,"web" 服务将加入名为 "myexistingnetwork" 的已存在网络。注意,在引用已存在网络时,你不需要指定网络驱动程序或其他配置选项,只需要设置 external: true 即可。

四、Docker Compose 实例

1. 配置 nginx 启动的 docker-compose.yml

bash 复制代码
version: '3'  
services:  
  nginx:  
    image: nginx:latest  
    container_name: my-nginx
    ports:  
      - "80:80"  
    volumes:  
      - /home/docker_data/nginx/conf:/etc/nginx 	
      - /home/docker_data/nginx/html:/usr/share/nginx/html
      - /home/docker_data/nginx/logs:/var/log/nginx  
    environment:
      - NGINX_PORT=80
  
# 如果有需要,可以添加其他的服务或配置

要启动由 docker-compose.yml 文件定义的服务,您可以在文件所在的目录下运行以下命令:

bash 复制代码
docker-compose up -d

-d 参数表示以"detached"模式运行容器,即在后台运行。

查看 nginx容器 状态

bash 复制代码
docker ps
相关推荐
极简网络科技1 小时前
Docker、Wsl 打包迁移环境
运维·docker·容器
杨浦老苏1 小时前
轻量级Docker管理工具Docker Switchboard
运维·docker·群晖
江湖有缘1 小时前
【Docker管理工具】部署Docker可视化管理面板Dpanel
运维·docker·容器
一加一等于二2 小时前
docker部署postgresql17,并且安装插件
docker·postgresql
猫咪老师19953 小时前
多系统一键打包docker compose下所有镜像并且使用
java·docker·容器
aitav03 小时前
⚡️ Linux Docker 基本命令参数详解
linux·运维·docker
Nazi63 小时前
docker数据管理
运维·docker·容器
姓刘的哦4 小时前
ubuntu中使用docker
linux·ubuntu·docker
孔令飞6 小时前
Go 为何天生适合云原生?
ai·云原生·容器·golang·kubernetes
Altairr6 小时前
Docker基础(二)
运维·docker·容器