@[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叢集
重要資訊
- 官網:https://ais.cn/u/vEbMBz