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