背景

在现代应用开发中,容器化技术已成为不可或缺的一部分。而当我们从单容器应用转向更复杂的多容器应用时,Docker Compose便成为了一个强大的工具。本文将介绍Docker Compose的核心概念、基本用法以及它在实际开发中的优势。

Docker Compose

Docker Compose是一个用于定义和运行多容器Docker应用的工具。它通过一个简单的YAML文件(通常命名为docker-compose.yml)来配置应用的服务、网络和卷,然后使用单一命令即可创建并启动所有服务。

docker-compose文件中可以定义多个相互关联的应用容器,每一个应用容器被称为一个服务(service)。由于service就是在定义某个应用的运行时参数,因此与docker run参数非常相似。

 在这里docker run 参数 和 docker compose 指令进行对比:

docker run 参数

docker compose 指令

说明

--name

container_name

容器名称

-p

ports

端口映射

-e

environment

环境变量

-v

volumes

数据卷配置

--network

networks

网络

 这样很直观的让我们了解到了,他们的对应关系。

列举一个部署文件:

version: "3.8"

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/init:/docker-entrypoint-initdb.d"
    networks:
      - hm-net
  hmall:    //项目名
    build: 
      context: .
      dockerfile: Dockerfile
    container_name: hmall
    ports:
      - "8080:8080"
    networks:
      - hm-net
    depends_on:
      - mysql
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "18080:18080"
      - "18081:18081"
    volumes:
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"
      - "./nginx/html:/usr/share/nginx/html"
    depends_on:
      - hmall
    networks:
      - hm-net
networks:
  hm-net:
    name: hmall

 常用命令

编写好docker-compose.yml文件,就可以部署项目了。常见的命令:

基本语法如下:

docker compose [OPTIONS] [COMMAND]

其中,OPTIONS和COMMAND都是可选参数,比较常见的有:

类型

参数或指令

说明

Options

-f

指定compose文件的路径和名称

-p

指定project名称。project就是当前compose文件中设置的多个service的集合,是逻辑概念

Commands

up

创建并启动所有service容器

down

停止并移除所有容器、网络

ps

列出所有启动的容器

logs

查看指定容器的日志

stop

停止容器

start

启动容器

restart

重启容器

top

查看运行的进程

exec

在指定的运行中容器中执行命令

 总结

        Docker Compose极大地简化了多容器应用的管理,使开发者能够更专注于应用逻辑而非基础设施配置。无论是本地开发、CI/CD流水线还是小型生产部署,它都是一个不可或缺的工具。

        通过掌握Docker Compose,您可以更高效地构建、测试和部署容器化应用,加速开发流程并提高团队协作效率。

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐