《docker高階篇(大廠進階):5.Docker-compose容器編排》包括是什麼能幹嘛去哪下、Compose核心概念

刘大猫發表於2024-12-10

在這裡插入圖片描述
@[toc]

二、高階篇(大廠進階)

5.Docker-compose容器編排

在這裡插入圖片描述
在這裡插入圖片描述

5.1是什麼

Docker-Compose是Docker官方的開源專案,負責實現對Docker容器叢集的快速編排。
在這裡插入圖片描述

5.2能幹嘛

在這裡插入圖片描述

5.3去哪下

在這裡插入圖片描述

  • 官網
https://docs.docker.com/compose/compose-file/compose-file-v3/
  • 官網下載
https://docs.docker.com/compose/install/
  • 安裝步驟
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

在這裡插入圖片描述

  • 解除安裝步驟
    在這裡插入圖片描述

    5.4 Compose核心概念

    在這裡插入圖片描述

    5.5 Compose使用的三個步驟

    在這裡插入圖片描述

    5.6 Compose常用命令

Compose常用命令
docker-compose -h                           # 檢視幫助
docker-compose up                           # 啟動所有docker-compose服務
docker-compose up -d                        # 啟動所有docker-compose服務並後臺執行
docker-compose down                         # 停止並刪除容器、網路、卷、映象。
docker-compose exec  yml裡面的服務id                 # 進入容器例項內部  docker-compose exec docker-compose.yml檔案中寫的服務id /bin/bash
docker-compose ps                      # 展示當前docker-compose編排過的執行的所有容器
docker-compose top                     # 展示當前docker-compose編排過的容器程序
docker-compose logs  yml裡面的服務id     # 檢視容器輸出日誌
docker-compose config     # 檢查配置
docker-compose config -q  # 檢查配置,有問題才有輸出
docker-compose restart   # 重啟服務
docker-compose start     # 啟動服務
docker-compose stop      # 停止服務

5.7 Compose編排微服務

在這裡插入圖片描述
在這裡插入圖片描述

5.7.1改造升級微服務工程docker_boot
  • 隨便建立個springboot專案,專案使用redis和mysql,編寫查詢和新增功能即可
  • mvn package命令將微服務形成新的jar包,並上傳到Linux伺服器/mydocker目錄下
  • 編寫Dockerfile
# 基礎映象使用java
FROM java:8
# 作者
MAINTAINER zzyy
# VOLUME 指定臨時檔案目錄為/tmp,在主機/var/lib/docker目錄下建立了一個臨時檔案並連結到容器的/tmp
VOLUME /tmp
# 將jar包新增到容器中並更名為zzyy_docker.jar
ADD docker_boot-0.0.1-SNAPSHOT.jar zzyy_docker.jar
# 執行jar包
RUN bash -c 'touch /zzyy_docker.jar'
ENTRYPOINT ["java","-jar","/zzyy_docker.jar"]
#暴露6001埠作為微服務
EXPOSE 6001
  • 構建映象
執行命令:docker build -t zzyy_docker:1.6 .
5.7.2不用Compose

在這裡插入圖片描述

  • 單獨的mysql容器例項-新建mysql容器例項
docker run -p 3306:3306 --name mysql57 --privileged=true -v /zzyyuse/mysql/conf:/etc/mysql/conf.d -v /zzyyuse/mysql/logs:/logs -v /zzyyuse/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
  • 單獨的mysql容器例項-進入mysql容器例項並新建庫db2021+新建表t_user
docker exec -it mysql57 /bin/bash
mysql -uroot -p
create database db2021;
use db2021;
CREATE TABLE `t_user` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '使用者名稱',
  `password` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '密碼',
  `sex` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '性別 0=女 1=男 ',
  `deleted` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0' COMMENT '刪除標誌,預設0不刪除,1刪除',
  `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
  `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='使用者表';
  • 單獨的redis容器例項
docker run  -p 6379:6379 --name redis608 --privileged=true -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf
  • 微服務工程
docker run -d -p 6001:6001 zzyy_docker:1.6
  • 上面三個容器例項依次順序啟動成功
    在這裡插入圖片描述

    5.7.3swagger測試
  • swagger測試
http://localhost:你的微服務埠/swagger-ui.html#/
5.7.4上面成功了,有哪些問題?

在這裡插入圖片描述

5.7.5使用Compose

在這裡插入圖片描述

  • 編寫docker-compose.yml檔案
version: "3"
services:
  microService:
    image: zzyy_docker:1.6
    container_name: ms01
    ports:
      - "6001:6001"
    volumes:
      - /app/microService:/data
    networks: 
      - atguigu_net 
    depends_on: 
      - redis
      - mysql
  redis:
    image: redis:6.0.8
    ports:
      - "6379:6379"
    volumes:
      - /app/redis/redis.conf:/etc/redis/redis.conf
      - /app/redis/data:/data
    networks: 
      - atguigu_net
    command: redis-server /etc/redis/redis.conf
  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: '123456'
      MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
      MYSQL_DATABASE: 'db2021'
      MYSQL_USER: 
      MYSQL_PASSWORD: 
    ports:
       - "3306:3306"
    volumes:
       - /app/mysql/db:/var/lib/mysql
       - /app/mysql/conf/my.cnf:/etc/my.cnf
       - /app/mysql/init:/docker-entrypoint-initdb.d
    networks:
      - atguigu_net
    command: --default-authentication-plugin=mysql_native_password #解決外部無法訪問
networks: 
   atguigu_net: 
  • 第二次修改微服務工程docker_boot-寫YML-透過服務名訪問,IP無關
    把springboot專案配置檔案中資料庫的ip換為mysql,redis的ip換為redis
    在這裡插入圖片描述
  • 第二次修改微服務工程docker_boot-mvn package命令將微服務形成新的jar包,並上傳到Linux伺服器/mydocker目錄下
  • 第二次修改微服務工程docker_boot-編寫Dockerfile
# 基礎映象使用java
FROM java:8
# 作者
MAINTAINER zzyy
# VOLUME 指定臨時檔案目錄為/tmp,在主機/var/lib/docker目錄下建立了一個臨時檔案並連結到容器的/tmp
VOLUME /tmp
# 將jar包新增到容器中並更名為zzyy_docker.jar
ADD docker_boot-0.0.1-SNAPSHOT.jar zzyy_docker.jar
# 執行jar包
RUN bash -c 'touch /zzyy_docker.jar'
ENTRYPOINT ["java","-jar","/zzyy_docker.jar"]
#暴露6001埠作為微服務
EXPOSE 6001
  • 第二次修改微服務工程docker_boot-構建映象
執行命令:docker build -t zzyy_docker:1.6 .
  • 執行 docker-compose up或者執行 docker-compose up -d
    在這裡插入圖片描述
    在這裡插入圖片描述
  • 進入mysql容器例項並新建庫db2021+新建表t_user
docker exec -it 容器例項id /bin/bash
mysql -uroot -p
create database db2021;
use db2021;
CREATE TABLE `t_user` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '使用者名稱',
  `password` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '密碼',
  `sex` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '性別 0=女 1=男 ',
  `deleted` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0' COMMENT '刪除標誌,預設0不刪除,1刪除',
  `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
  `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='使用者表';
  • 測試透過
  • Compose常用命令
Compose常用命令
docker-compose -h                           # 檢視幫助
docker-compose up                           # 啟動所有docker-compose服務
docker-compose up -d                        # 啟動所有docker-compose服務並後臺執行
docker-compose down                         # 停止並刪除容器、網路、卷、映象。
docker-compose exec  yml裡面的服務id                 # 進入容器例項內部  docker-compose exec docker-compose.yml檔案中寫的服務id /bin/bash
docker-compose ps                      # 展示當前docker-compose編排過的執行的所有容器
docker-compose top                     # 展示當前docker-compose編排過的容器程序
docker-compose logs  yml裡面的服務id     # 檢視容器輸出日誌
dokcer-compose config     # 檢查配置
dokcer-compose config -q  # 檢查配置,有問題才有輸出
docker-compose restart   # 重啟服務
docker-compose start     # 啟動服務
docker-compose stop      # 停止服務
  • 關停
    在這裡插入圖片描述

注意點1:
docker-compose.yml檔案內容器載入順序由depends_on控制,案例裡會先啟動redis -> mysql -> 微服務

注意點2:
docker-compose.yml檔案編排好後,最後執行命令:docker-compose up -d時就是把檔案內命令轉化為你認識的一條條類似docker run -d -p 6379:6379 redis:6.0.8這樣的命令進行操作

注意點3:
有一個重要的檢查docker-compose.yml檔案編寫是否語法有誤的命令:dokcer-compose config -q # 檢查配置,有問題才有輸出

本人其他相關文章連結

1.《docker高階篇(大廠進階):1.Docker複雜安裝詳說》包括:安裝mysql主從複製、安裝redis叢集
2.《docker高階篇(大廠進階):2.DockerFile解析》包括:是什麼、DockerFile構建過程解析、DockerFile常用保留字指令、案例、小總結
3.《docker高階篇(大廠進階):3.Docker微服務實戰》
4.《docker高階篇(大廠進階):4.Docker網路》包括:是什麼、常用基本命令、能幹嘛、網路模式、docker平臺架構圖解
5.《docker高階篇(大廠進階):5.Docker-compose容器編排》包括是什麼能幹嘛去哪下、Compose核心概念、Compose使用三個步驟、Compose常用命令、Compose編排微服務
6.《docker高階篇(大廠進階):6.Docker輕量級視覺化工具Portainer》
7.《docker高階篇(大廠進階):7.Docker容器監控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什麼、compose容器編排,一套帶走
8.docker基礎篇:安裝tomcat
9.docker基礎篇:安裝mysql單機版
10.docker基礎篇:安裝redis單機版
11.docker高階篇(大廠進階):安裝mysql主從複製
12.docker高階篇(大廠進階):安裝redis叢集

image.png

重要資訊
  • 官網:https://ais.cn/u/vEbMBz

image.png
image.png

相關文章