Docker-Compose
容器编排
是一个容器编排工具,可以通过一个脚本,先安装 Tomcat 容器,在安装 MySQL 容器
容器编排工具
- 可以通过一个脚本,先安装 Tomcat 容器,在安装 MySQL 容器
- 容器之间形成一个依赖关系,过程中每一个容器需要的配置文件,都可以进行相应的绑定
- 将多个容器在一个文件当中进行编排,先执行哪个后执行哪个,称为是容器的编排
Docker-Compose 概述
- Compose 是一个用户定义和运行多个容器的 Docker 应用程序,是一个容器编排工具
- 在 Compose 中你可以使用
YAML
文件来配置你的应用服务 - 只需要一个简单的命令,就可以创建并启动你配置的所有服务
- Compose 只能在一台宿主机上对容器进行自动化的部署
- 如果是在集群环境,对很多台宿主机进行部署,就要去使用像
K8S
这些集群部署工具 - 如果你的 docker 安装在 windows 系统或者是 Mac 系统当中,它里边会自带
docker-compose
工具
Docker-Compose
下载 Docker-Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.6/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
对 Docker-Compose 进行文件夹的授权
sudo chmod +x /usr/local/bin/docker-compose
使用 docker-compose -version
查看版本
docker-compose -version
SpringBoot 项目打包
首先需要添加(安装)打包插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
执行 install
命令,然后对应的 jar 包就会被打出来
了解了SpringBoot将项目进行打包之后我这里将会给出一个小小的项目就是单表CRUD的包含对应的SQL语句
这里有一个注意点,我把 application.yml 中 datasource 中 url 里面数据库地址换成了 db
如下图所示,这么做的原因就是后面我会利用 docker-compose 来进行替换,就是运行一个 MySQL 容器之后该项目启动的时候依赖于该镜像,会自动的去找该 MySQL 镜像所启动的容器
首先我们需要将 .jar
与 .sql
文件上传到 Linux 服务器系统当中,如下
上图当中我没有进行分包所以分包之后的效果如下图,当然也可以不分
创建 App 的 Dockerfile
进入到 myApp 文件夹当中然后创建 Dockerfile 文件,内容如下
FROM openjdk:11.0-jre
WORKDIR /usr/local/my-springboot-project
ADD myProject.jar .
EXPOSE 8808
CMD ["java", "-jar", "myProject.jar"]
构建一个所对应的镜像构建命令如下
docker build -t it6666/myapp:1.0 .
以该镜像启动一个容器如下
docker run it6666/myapp:1.0
可以看到已经启动完毕了,App 的已经完毕,接下来要介绍的是 MySQL 的打包和启动,这里有一个注意点需要讲解所以我单独的拎出来讲解了如下
创建 DB 的 Dockerfile
FROM mysql:8.0
WORKDIR /docker-entrypoint-initdb.d
ADD springboot.sql .
请注意如上的 Dockerfile 内容当中有一句 WORKDIR /docker-entrypoint-initdb.d
这句的含义为就是在以镜像创建所对应的容器的时候做初始化的时候会帮你执行 ADD 命令所对应的 .sql
文件它会自动的帮你进行运行并初始化好所对应的表以及数据库,好了到这里先介绍这么多先构建镜像,待会运行所对应的容器在看这个注意点即可
docker build -t it6666/mydb .
构建完毕之后在以该镜像运行一个容器,运行容器命令如下
docker run -d -e MYSQL_ROOT_PASSWORD=1234 it6666/mydb:latest
构建完成然后在进入到容器当中,查看数据库如下已经自动的帮你运行了 ADD .sql
所指定的文件内容数据库已经创建好了
docker exec -it a4a950ec3df3 bash
如上构建 App 与 DB 都已经讲解完毕,接下来就利用 docker-compose 来将它们整合在一起,一起启动一起关闭,在 myapp 与 mydb 同层级文件夹下创建一个 docker-compose.yml
文件内容如下
version: '3.3'
services:
db:
build: ./mydb/
restart: always
container_name: mysql
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
environment:
MYSQL_ROOT_PASSWORD: 1234
app:
build: ./myapp/
depends_on:
- db
ports:
- "8808:8808"
restart: always
利用 docker-compose
启动容器命令如下
docker-compose up
启动完成即可访问部署好的项目效果如下所示
但是如果使用如上的方式进行启动的话你关闭了项目就停掉了,如果想要在后台运行加上一个 -d
即可
docker-compose up -d
如果想要关闭容器可以利用如下命令进行关闭
docker-compose down