Docker全系列 - Docker Compose 详解

1,185 阅读3分钟

Docker Compose 详解

前面我们学完了Dockerfile,知道Dockerfile可以用来构建镜像。

此时我在想,能不能用一个文件就把项目代码所需的所有环境都搭建好呢?就像使用git管理代码一样来管理我的代码环境🤔

此时Docker Compose就派上用场了,Docker Compose是一个用于定义和运行多容器应用的工具,可以帮助大家快速构建和管理分布式应用,提高开发和运维工作效率。

如何安装Docker Compose

使用的MAC开发的同学可以跳过这一步,因为安装Docker Desktop时就已经安装了Docker Compose

// 首先要完成Docker环境安装,因为Docker Compose是基于Docker运行的
// 安装Docker Compose有两种方式,下载源码包或者使用python3 pip下载,下面分别演示

// 首先是源码方式
 [root@localhost ~]  sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
 [root@localhost ~] chmod +x /usr/local/bin/docker-compose
 
// 其次是python pip
[root@localhost ~] pip install docker-compose
[root@localhost ~] chmod +x /usr/local/bin/docker-compose

// 打印 Docker Compose 版本
 [root@localhost ~] docker-compose -v
 

Docker Compose 如何使用

Docker Compose和Dockerfie一样,其实都是一个配置文件,不同点在于Dockerfile是用来搭建镜像,而Docker Compose是用来搭建容器(也可以理解成搭建环境)

另外Docker Compose是一个以.yml为后缀的文件,遵循YAML语法标准,而Dockerfile文件不需要后缀,遵循Docker独有的语法标准

Docker Compose包含了4个一级标签(version、service、networkes、volumes)

version 是必须指定的,而且总是位于文件的第一行。它定义了 Compose 文件格式(主要是 API)的版本。注意,version 并非定义 Docker Compose 或 Docker 引擎的版本号。


services 用于定义不同的应用服务。上边的例子定义了两个服务:一个名为 lagou-mysql数据库服 务以及一个名为lagou-eureka的微服。Docker Compose 会将每个服务部署在各自的容器中。


networks 用于指引 Docker 创建新的网络。默认情况下,Docker Compose 会创建 bridge 网络。 这是一种单主机网络,只能够实现同一主机上容器的连接。当然,也可以使用 driver 属性来指定不 同的网络类型。


volumes 用于指引 Docker 来创建新的卷。

下面我们来写一段示例 (你也可以用vscode、sublime text来写,编辑器基本都有支持yaml语法的插件)

[root@localhost ~] vim docker-compose.yml

version: '3'
services:
  web:
    ports:
       - "80:80"
       - "443:443"
    image: nginx:latest
    volumes:
       - "[宿主机资源目录]:/usr/share/nginx/html"
    links:
       - php

  php:
    ports:
       - "9000:9000"
       - "1238:1238"
    image: psq1995/psq-phpfpm72:v4
    volumes:
       - "[宿主机资源目录]:/var/www/html"
  db:
    ports:
       - "3306"
    image: mysql:latest
    volumes:
      - "[宿主机资源存放目录]:/var/lib/mysql"
    environment:
      MYSQL_ROOT_PASSWORD: root
      

我在上面的docker-compose.yml文件中创建了三个容器,web,php,db,并使用 "docker-compose up"启动了它们

docker-compose 有哪些常用指令

这些命令都需要在包含 docker-compose.yml 文件的目录中使用。例如,要在当前目录中启动所有容器,可以使用命令:

 # 在当前目录中启动所有容器
 [root@localhost ~] docker-compose up
 # 停止并删除当前目录中的所有容器
 [root@localhost ~] docker-compose down 
 # 启动当前目录中的所有容器
 [root@localhost ~] docker-compose start 
 # 停止当前目录中的所有容器
 [root@localhost ~] docker-compose stop 
 # 重新启动当前目录中的所有容器
 [root@localhost ~] docker-compose restart 
 # 根据 Dockerfile 构建项目中的容器
 [root@localhost ~] docker-compose build 
 # 在已启动的容器中运行命令
 [root@localhost ~] docker-compose exec 
 # 查看容器的日志
 [root@localhost ~] docker-compose logs 

 # 你还可以查看不同指令之可以传递什么参数
 [root@localhost ~] docker-compose [指令] --help