DockerCompose的使用
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/
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 指令 | 说明 |
---|---|---|
--name | container_name | 容器名称 |
-p | ports | 端口映射 |
-e | environment | 环境变量 |
-v | volumes | 数据卷配置 |
--network | networks | 网络 |
明白了其中的对应关系,编写docker-compose
文件就很简单了,我们接着往下看。
4.基础命令
编写好docker-compose.yml文件,就可以部署项目了。常见的命令:
基本语法如下:
docker compose [OPTIONS] [COMMAND]
其中,OPTIONS和COMMAND都是可选参数,比较常见的有:
类型 | 参数或指令 | 说明 |
---|---|---|
Options | -f | 指定compose文件的路径和名称 |
-p | 指定project名称。project就是当前compose文件中设置的多个service的集合,是逻辑概念 | 指定project名称。project就是当前compose文件中设置的多个service的集合,是逻辑概念 |
Commands | up | 创建并启动所有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
然后就开始进行后台启动了。
然后我们通过命令进行查看我们启动的容器。
然后我们通过命令进入MySQL容器中。
docker exec -it mysql bash
连接上MySQL。
可以看到我们成功连接到了MySQL,大功告成!
6.总结
以上便是本文的全部内容,本人才疏学浅,文章有什么错误的地方,欢迎大佬们批评指正!我是Leo,一个在互联网行业的小白,立志成为更好的自己。
如果你想了解更多关于Leo,可以关注公众号-程序员Leo,后面文章会首先同步至公众号。