Docker Compose

1. 概览

参考:比特就业课

1.1 Docker Compose是什么

docker-compose 是 Docker 官方的开源项目,使用 python 编写,实现上调用了Docker 服务的 API 进行容器管理及编排,其官方定义为定义和运行多个 Docker 容器的应用。

docker-compose 中有两个非常重要的概念:

Compose的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。通过compose可以方便的管理多个服务。

1.2 为什么要 Docker Compose

Docker 是一个轻量化的应用程序,Docker 官方推荐每个 Docker 容器中只运行一个进程。

如果一个应用需要涉及到 MySQL、nginx 等环境, 那么我们需要分别为应用、数据库和 nginx 创建单独的 docker 容器,然后分别启动容器。想象一下,当我们构建好 Docker 之后,每次启动应用,都至少需要 docker run三次, 或者写一些脚本来实现, 这样会比较繁琐。

另外,这些 docker 容器都是分散独立的,也不方便镜像管理。那既然这些 docker 容器 都是为了同一个应用服务,我们就应该把它们放到一起,这就引出了 docker-compose 来解决这类型的问题。

2. Docker Compose 的安装

我们安装docker的时候已经顺便安装了,大家可以看看前面的章节(第一章)。

检查是否安装上了。

3. Docker Compose 的功能简介

3.1 使用步骤

Compose 使用的步骤:

3.2 核心功能

Compose 具有管理应用程序整个生命周期的命令:

4. Docker Compose 文件(docker-compose.yml

4.1 文件语法版本

目前官方支持三个大版本, 即 Version 1、Version 2 及 Version 3, 其中 Version 1 已经被废弃掉了。当前最新的版本是 3.8,它支持的 Docker Engine 版本不得低于 19.03.0。

官方文档:

4.2 文件的基本结构

4.3 常见字段格式语法

4.3.1 image

先准备好目录先。

把配置文件写好。

启动配置文件里面的所有东西。

会默认创建一个桥网络的,然后把工程相关的容器加入到这个项目的网络里面去,和docker默认网络分开的。

停止和删除。

4.3.2 command

覆盖容器启动的默认命令。

4.3.3 entrypoint

覆盖容器默认的 entrypoint。

两种格式。

4.3.4 environment

添加环境变量。您可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,以确保 YML 解析器不会将其转换为 True 或 False。

4.3.5 networks

指定容器运行的网络。

要调整网络的信息也很容易。如下面的例子所示即可。

4.3.6 volumes

将主机的数据卷或者文件挂载到容器里。

4.3.7 ports

端口映射,其实就是命令中的-p选项。

4.3.8 expose

暴露端口,但不映射到宿主机,只被连接的服务访问。

4.3.9 build

这个参数我们学完dockerFile之后就能理解了,现在先不讲。

4.3.10 depends_on

设置依赖关系。

这个参数比较复杂,大家来看看例子。

可以指定条件,healthy 需要配置 healthcheck 来完成。

healthcheck案例。

4.3.11 env_file

从文件添加环境变量。可以是单个值或列表的多个值。

5. Docker Compose 命令

5.1 命令清单

命令功能
docker compose build构建服务
docker compose config规范的格式来显示服务配置
docker compose cp在本地系统和服务容器直接拷贝文件
docker compose create创建服务的容器
docker compose down停止所有容器,并删除容器
docker compose events从服务器获取实时时间
docker compose exec在容器中执行命令
docker compose images列出所有容器使用的镜像
docker compose kill强制停止服务的容器
docker compose logs显示日志
docker compose ls显示所有项目
docker compose pause暂停服务
docker compose port列出所有的端口映射
docker compose ps该命令可以列出项目中目前的所有容器
docker compose pull拉取服务镜像
docker compose push推送服务镜像
docker compose restart重启或者重启某个服务
docker compose rm删除服务停止的容器
docker compose run在指定服务容器上执行相关的命令
docker compose start启动当前停止的某个容器
docker compose stop停止当前运行的某个容器
docker compose top显示运行的进程
docker compose unpause恢复服务
docker compose upup 命令会构建,(重新)创建,启动,
链接一个服务相关的容器。
默认情况下如果容器已经存在,
将会停止并尝试重新创建他们。并使用之前挂载的卷。
--no-recreate 参数可以让容器不被停止或者重新创建,
-d 表示后台运行
docker compose version查看版本

5.2 命令格式

对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器。如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令影响。docker-compose 命令的基本的使用格式为如下所示。

5.3 常用选项

5.4 常见命令

5.4.1 up

该命令的作用十分强大,它会尝试自动完成包括构建镜像、(重新)创建服务、启动服务并关联服务相关容器的一系列操作,可以直接通过该命令来启动一个项目。

参数。

5.4.2 down

停止所有容器,并删除容器和网络。

参数。

5.4.3 run

该命令可以在指定服务容器上执行相关的命令。

参数。

6. 综合案例

6.1 综合案例一

nginx
系统服务
MySQL

6.1.1 编写数据初始化脚本

设计数据非常简单的一个表信息,写入两条数据,文件为init.sql

这样手动操作是可以的。但是我们希望,每次启动服务的时候,会直接运行这些,初始化我的数据。所以这些东西要写到一个sql文件里面去。

这个就叫做数据初始化脚本!

6.1.2 创建一个 springboot 应用, 配置 maven 项目

6.1.3 添加启动类

6.1.4 配置数据库信息

注意本地测试的时候红色部分调整为 ip 地址,而我们实际的服务使用的 mysql 的一个服务名称。

6.1.5 配置用户控制器

简单配置,不再去涉及 mapper 那些内容通过 jdbc 直接完成操作。

6.1.6 编译打包

6.1.7 本地测试

6.1.8 编写 docker-compose.yml

6.1.9 创建工程目录和卷目录

6.1.10 将 nginx 的反向代理配置 bit.conf 放入到./nginx/conf.d

6.1.11 将数据库初始化文件 init.sql 放入到./mysql/init 目录

6.1.12 将应用 jar 包放入到./app 目录

6.1.13 启动我们的项目

6.2 综合案例二

6.2.1 什么是 WordPress

WordPress 是使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一款个人博客系统,并逐步演化成一款内容管理系统软件,它是使用PHP 语言和 MySQL 数据库开发的,用户可以在支持 PHP 和 MySQL 数据库的服务器上使用自己的博客。

WordPress 有许多第三方开发的免费模板,安装方式简单易用。不过要做一个自己的模板,则需要你有一定的专业知识。比如你至少要懂的标准通用标记语言下的一个应用 HTML 代码、CSS、PHP 等相关知识。WordPress 官方支持中文版,同时有爱好者开发的第三方中文语言包,如 wopus 中文语言包。WordPress 拥有成千上万个各式插件和不计其数的主题模板样式。

6.2.2 编写 docker compose

通过这个命令检查这个文件的语法是否有问题。

6.2.3 启动服务+安装博客系统

直接用8080端口访问。

输入东西,然后安装。

其实我们所有东西都存在这里了。