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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM