Docker-Compose

容器编排

是一个容器编排工具,可以通过一个脚本,先安装 Tomcat 容器,在安装 MySQL 容器

容器编排工具

  • 可以通过一个脚本,先安装 Tomcat 容器,在安装 MySQL 容器
  • 容器之间形成一个依赖关系,过程中每一个容器需要的配置文件,都可以进行相应的绑定
  • 将多个容器在一个文件当中进行编排,先执行哪个后执行哪个,称为是容器的编排

Docker-Compose 概述

  • Compose 是一个用户定义和运行多个容器的 Docker 应用程序,是一个容器编排工具
  • 在 Compose 中你可以使用 YAML 文件来配置你的应用服务
  • 只需要一个简单的命令,就可以创建并启动你配置的所有服务
  • Compose 只能在一台宿主机上对容器进行自动化的部署
  • 如果是在集群环境,对很多台宿主机进行部署,就要去使用像 K8S 这些集群部署工具
  • 如果你的 docker 安装在 windows 系统或者是 Mac 系统当中,它里边会自带 docker-compose 工具

Docker-Compose

官网:https://docs.docker.com/

image-20210905015836944

下载 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

image-20210905021740206

SpringBoot 项目打包

首先需要添加(安装)打包插件

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

image-20210905095148768

执行 install 命令,然后对应的 jar 包就会被打出来

image-20210905095223546

了解了SpringBoot将项目进行打包之后我这里将会给出一个小小的项目就是单表CRUD的包含对应的SQL语句

这里有一个注意点,我把 application.yml 中 datasource 中 url 里面数据库地址换成了 db 如下图所示,这么做的原因就是后面我会利用 docker-compose 来进行替换,就是运行一个 MySQL 容器之后该项目启动的时候依赖于该镜像,会自动的去找该 MySQL 镜像所启动的容器

image-20210905113523638

首先我们需要将 .jar.sql 文件上传到 Linux 服务器系统当中,如下

image-20210905115331907

上图当中我没有进行分包所以分包之后的效果如下图,当然也可以不分

image-20210905122254642

创建 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"]

image-20210905133457097

构建一个所对应的镜像构建命令如下

docker build -t it6666/myapp:1.0 .

image-20210905133709848

以该镜像启动一个容器如下

docker run it6666/myapp:1.0

image-20210905133834133

可以看到已经启动完毕了,App 的已经完毕,接下来要介绍的是 MySQL 的打包和启动,这里有一个注意点需要讲解所以我单独的拎出来讲解了如下

创建 DB 的 Dockerfile

FROM mysql:8.0
WORKDIR /docker-entrypoint-initdb.d
ADD springboot.sql .

image-20210905134106712

请注意如上的 Dockerfile 内容当中有一句 WORKDIR /docker-entrypoint-initdb.d 这句的含义为就是在以镜像创建所对应的容器的时候做初始化的时候会帮你执行 ADD 命令所对应的 .sql 文件它会自动的帮你进行运行并初始化好所对应的表以及数据库,好了到这里先介绍这么多先构建镜像,待会运行所对应的容器在看这个注意点即可

docker build -t it6666/mydb .

image-20210905153417149

构建完毕之后在以该镜像运行一个容器,运行容器命令如下

docker run -d -e MYSQL_ROOT_PASSWORD=1234 it6666/mydb:latest

构建完成然后在进入到容器当中,查看数据库如下已经自动的帮你运行了 ADD .sql 所指定的文件内容数据库已经创建好了

docker exec -it a4a950ec3df3 bash

image-20210905154508598

image-20210905160503616

如上构建 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

image-20210905161251430

image-20210905163143922

利用 docker-compose 启动容器命令如下

docker-compose up

image-20210905161527893

启动完成即可访问部署好的项目效果如下所示

image-20210905162050963

但是如果使用如上的方式进行启动的话你关闭了项目就停掉了,如果想要在后台运行加上一个 -d 即可

docker-compose up -d

image-20210905163123161

如果想要关闭容器可以利用如下命令进行关闭

docker-compose down

image-20210905163855945

posted @ 2021-09-05 02:00  BNTang  阅读(478)  评论(0编辑  收藏  举报