跳至主要內容

DockerCompose的使用

Leodocker🛥️docker🛥️约 1065 字大约 4 分钟

Docker | DockerCompose的使用

1.前言

大家好,我是Leo哥🫣🫣🫣,在之前的系列文章中我们学习了Docker几乎所有的操作,我们的Docker系列文章也即将迎来完结篇。这篇文章我们主要介绍一下DockerCompose的基本使用。

2.为什么需要DockerCompose

大家可以看到,我们部署一个简单的Java项目,其中包含3个容器:

  • MySQL
  • Nginx
  • Java项目

而稍微复杂的项目,其中还会有各种各样的其它中间件,需要部署的东西远不止3个。如果还像之前那样手动的逐一部署,就太麻烦了。

而Docker Compose就可以帮助我们实现多个相互关联的Docker容器的快速部署。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器。

3.基本语法

我们可以直接去参考官方文档:https://docs.docker.com/compose/compose-file/compose-file-v3/open in new window

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

举例来说,用docker run部署MySQL的命令如下:

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=root \
  -v ./mysql/data:/var/lib/mysql \
  -v ./mysql/conf:/etc/mysql/conf.d \
  -v ./mysql/init:/docker-entrypoint-initdb.d \
  --network hmall
  mysql

如果用docker-compose.yml文件来定义,就是这样:

version: "3.8"

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: root
    networks:
      - new
networks:
  new:
    name: test-network

对比如下:

docker run 参数docker compose 指令说明
--namecontainer_name容器名称
-pports端口映射
-eenvironment环境变量
-vvolumes数据卷配置
--networknetworks网络

明白了其中的对应关系,编写docker-compose文件就很简单了,我们接着往下看。

4.基础命令

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

基本语法如下:

docker compose [OPTIONS] [COMMAND]

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

类型参数或指令说明
Options-f指定compose文件的路径和名称
-p指定project名称。project就是当前compose文件中设置的多个service的集合,是逻辑概念指定project名称。project就是当前compose文件中设置的多个service的集合,是逻辑概念
Commandsup创建并启动所有service容器
down停止并移除所有容器、网络停止并移除所有容器、网络
ps列出所有启动的容器列出所有启动的容器
logs查看指定容器的日志查看指定容器的日志
stop停止容器停止容器
start启动容器启动容器
restart重启容器重启容器
top查看运行的进程查看运行的进程
exec在指定的运行中容器中执行命令在指定的运行中容器中执行命令

5.实战演示

首先我们需要通过以下命令删除我们之前的一些容器跟镜像。

docker rm -f $(docker ps -qa)
docker rmi mysql

创建我们的docker-compose文件

vim docker-compose.yml
version: "3.8"

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: root
    networks:
      - new
networks:
  new:
    name: test-network

然后通过命令进行启动。 -d 是进行后台启动。

docker compose up -d
image-20231218230222203
image-20231218230222203

然后就开始进行后台启动了。

然后我们通过命令进行查看我们启动的容器。

image-20231218230250172
image-20231218230250172

然后我们通过命令进入MySQL容器中。

docker exec -it mysql bash

连接上MySQL。

image-20231218230845878
image-20231218230845878

可以看到我们成功连接到了MySQL,大功告成!

6.总结

以上便是本文的全部内容,本人才疏学浅,文章有什么错误的地方,欢迎大佬们批评指正!我是Leo,一个在互联网行业的小白,立志成为更好的自己。

如果你想了解更多关于Leo,可以关注公众号-程序员Leo,后面文章会首先同步至公众号。

公众号封面
公众号封面