Docker核心文件:DockerCompose文件

目录

1、概念

2、文件结构

3、核心配置项

[3.1 version - 版本声明](#3.1 version - 版本声明)

[3.2 services - 服务定义](#3.2 services - 服务定义)

[3.3 networks - 网络配置](#3.3 networks - 网络配置)

[3.4 volumes - 数据卷配置](#3.4 volumes - 数据卷配置)

[4、实战示例:搭建 WordPress](#4、实战示例:搭建 WordPress)

5、常用操作命令


1、概念

一个 Docker Compose 文件(通常是 docker-compose.yml)是一个 YAML 格式的配置文件。它的核心作用是用一份配置文件,定义一个多容器的应用,包括各个服务、它们之间的网络、数据卷等资源。之后,只需要一个简单的 docker-compose up 命令,就能启动整个应用栈。

2、文件结构

一个典型的 Docker Compose 文件包含以下几个主要部分:

部分 功能说明
version 定义 Compose 文件格式的版本。
services 核心部分,定义应用中的各个服务容器。
networks 定义服务之间通信所使用的网络。
volumes 定义服务中需要使用的持久化数据卷。

3、核心配置项

3.1 version - 版本声明

这行代码通常位于文件首行,用于指定 Compose 文件格式的版本,它与 Docker Engine 的版本有对应关系。建议使用较新的版本(如 '3.8')以获得更多功能。

bash 复制代码
version: '3.8'

3.2 services - 服务定义

这是文件中最关键的部分,每个服务都对应一个容器。

配置项 作用与示例
image 指定服务所使用的镜像。 image: nginx:latest
build 如果服务需要从 Dockerfile 构建镜像(自定义镜像),则指定构建上下文路径。 build: ./app 或 详细配置: build: context: . dockerfile: Dockerfile.dev
ports 映射宿主机端口与容器端口。 ports: - "8080:80" - "443:443"
volumes 挂载宿主机目录或数据卷到容器中,用于数据持久化 或配置文件映射。 volumes: - ./html:/usr/share/nginx/html - db_data:/var/lib/mysql
environment 直接设置容器内的环境变量。 environment: - MYSQL_ROOT_PASSWORD=my-secret-pw - MYSQL_DATABASE=myapp
env_file 从一个文件中加载环境变量。 env_file: - ./.env
depends_on 表达服务之间的启动依赖关系 。Docker Compose 会先启动依赖的服务。 depends_on: - db - redis
command 覆盖容器启动后默认执行的命令。 command: ["nginx", "-g", "daemon off;"]
restart 配置容器的重启策略 ,例如 always 表示总是重启。 restart: always

3.3 networks - 网络配置

可以定义自定义网络,以实现服务间更安全、更高效的通信。

bash 复制代码
services:
  web:
    image: nginx
    networks:
      - frontend
  db:
    image: mysql
    networks:
      - frontend
      - backend

networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge

在这个例子中,webdb 服务通过 frontend 网络相连,而 db 还单独连接了 backend 网络。

3.4 volumes - 数据卷配置

数据卷用于持久化容器产生的数据,防止数据因容器删除而丢失。

bash 复制代码
services:
  db:
    image: mysql
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:
    driver: local

这里定义了一个名为 db_data 的命名卷,并挂载到了 MySQL 容器的数据目录。

4、实战示例:搭建 WordPress

下面是一个经典的 WordPress 项目的 Docker Compose 文件,它清晰地展示了上述配置项是如何协同工作的。

bash 复制代码
version: '3.9'

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - wordpress_data:/var/www/html
    ports:
      - "8888:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress

volumes:
  db_data: {}
  wordpress_data: {}

这个例子是如何工作的:

  • 服务 :定义了 db(数据库)和 wordpress(网站)两个服务。

  • 依赖wordpress 服务通过 depends_on 指明它依赖于 db 服务,因此数据库会先启动。

  • 持久化 :通过命名卷 db_datawordpress_data 分别保存数据库数据和网站文件。

  • 环境变量:通过环境变量配置数据库连接信息,例如密码、数据库名等。

  • 端口映射 :将主机的 8888 端口映射到 wordpress 容器的 80 端口,这样就能通过 http://localhost:8888 访问网站了。

5、常用操作命令

在包含 docker-compose.yml 文件的目录下,执行以下命令:

命令 说明
docker-compose up -d 创建并启动所有服务(后台模式)。
docker-compose down 停止并移除所有容器、网络。
docker-compose ps 查看当前服务的状态。
docker-compose logs 查看所有服务的日志输出。
docker-compose restart 重启所有服务。
相关推荐
荣光波比3 小时前
CI/CD(三)—— 【保姆级实操】Jenkins+Docker GitLab+Tomcat 实现微服务CI/CD全流程部署
ci/cd·docker·jenkins
xx.ii4 小时前
k8s:service资源详解
运维·网络·容器·kubernetes
janthinasnail4 小时前
使用Docker搭建DOClever接口管理平台
docker·api接口文档
chinesegf10 小时前
Docker篇4-本地项目app.py与docker加载项目镜像的开发顺序
运维·docker·容器
CyreneSimon10 小时前
Docker 拉取配置教程:解决镜像拉取连接超时问题
运维·docker·容器
xx.ii13 小时前
k8s的资源管理
云原生·容器·kubernetes
人间打气筒(Ada)14 小时前
Kubeadm快速部署k8s集群----1.20.0版本(基于centos7.9,因为k8s版本为1.24之下,所以可以直接使用docker)
docker·容器·kubernetes
维尔切14 小时前
k8s 实战入门
云原生·容器·kubernetes
xx.ii14 小时前
K8s练习
云原生·容器·kubernetes