前言:
請各大網友尊重本人原創知識分享,謹記本人部落格:南國以南i
概念介紹:
Docker
Docker 這個東西所扮演的角色,容易理解,它是一個容器引擎,也就是說實際上我們的容器最終是由Docker建立,執行在Docker中,其他相關的容器技術都是以Docker為基礎,它是我們使用其他容器技術的核心。
Docker-Compose
前面我們使用 Docker 的時候,定義 Dockerfile 檔案,然後使用 docker build、docker run 等命令操作容器。然而微服務架構的應用系統一般包含若干個微服務,每個微服務一般都會部署多個例項,如果每個微服務都要手動啟停,那麼效率之低,維護量之大可想而知
優點:
根據定義的docker-compose.yaml配置檔案批量容器編排,輕鬆高效的管理容器定義,Docker就會按照你宣告的配置去把所有的容器啟動起來及執行
缺點:
但是Docker-Compose只能管理當前主機上的Docker,也就是說不能去啟動其他主機上的Docker容器
使用事項:
compose是docker官方的開源專案,需要安裝!與它配對使用的是一個docker-compose.yaml檔案,docker-compose命令必須在一個包含docker-compose.yaml檔案目錄下才能使用。
Compose 使用的三個步驟:
-
使用
Dockerfile
定義應用程式的環境。 -
使用
docker-cmpose.yaml
定義構成應用程式的服務,這樣它們可以在隔離環境中一起執行。 -
最後,執行
docker-cmpose up
命令來啟動並執行整個應用程式。
docker-cmpose.yaml
的配置案例如下(配置引數參考下文):
version: "3.0" # 對於docker版本號
services: #定義服務
web: #web引用,自己編寫的程式,下面是應用配置
build: . #獲取當前目錄下Dockerfile檔案編譯
depends_on: #代表啟動順序
- db
- redis
ports:
- "5000:5000" #埠暴露
volumes: #掛載路徑
- .:/code
- logvolume01:/var/log
links:
- redis
redis: #redis應用
image: redis
deploy:
replicas: 6 #副本數
db: #db應用
images:postgres
volumes:
logvolume01: {}
實踐
一、環境準備
在 Linux 系統上安裝 Docker
使用compose必然需要docker
1.1 yum安裝Docker
yum install docker #安裝docker,需要root
1.2 檢視版本
docker --version #檢視版本
樣例輸出:
1.3 啟動docker
sudo systemctl start docker.service #啟動 Docker sudo systemctl enable docker.service #關閉Docker
在 Linux 系統上安裝 Compose
由於compose是docker官方的開源專案,需要安裝!!!
1.1 下載compose
# 國外 sudo curl -L "https://github.com/docker/compose/releases/download/v1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 國內(推薦) sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
1.2 新增可執行許可權
sudo chmod +x /usr/local/bin/docker-compose #授權
1.3 檢視版本
docker-compose --version #檢視版本
樣例輸出:
二、專案實施
2.1 建立專案
此處以Springboot專案為例,其pom.xml依賴如下
<dependencies> <!--web依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--測試依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> </dependencies>
2.2 新增application.properties配置
注:在此示例中,redis
是應用程式網路上的 redis 容器的主機名
#配置啟動埠
server.port=8888
#配置redis地址,此處指定後續dockers映象名稱
spring.redis.host=redis
2.3 編寫程式計數器
package com.example.compose; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class IndexController { /** * . * 注入redis */ @Autowired private StringRedisTemplate redisTemplate; /** * . * 程式計數器,每訪問一次就+1 * * @return */ @GetMapping("/hello") public String hello() { Long views = redisTemplate.opsForValue().increment("views"); return "hello docker compose views:" + views; } }
2.4 建立 Dockerfile
在你的專案目錄中,建立一個Dockerfile。
有關編寫 Dockerfile 更多資訊,請參閱 Docker 使用者指南 和Dockerfile 參考
#指定jdk1.8
FROM java:8
#當前jar拷貝到容器中指定名稱
COPY *.jar /app.jar
#程式執行時指定程式埠
CMD ["--server-port=8888"]
#暴露埠
EXPOSE 8888
#執行
ENTRYPOINT ["java", "-jar","/app.jar"]
2.4 編排服務
在你的專案目錄中建立一個名docker-compose.yaml
的檔案。定義了兩個服務:composeapp和redis.
version: '3.0' #對應版本號
services:
composeapp:
build: . #表示獲取當前目錄下Dockerfile檔案進行編譯
#dockerfile: Dockerfile #指定當前目錄下的檔案
image: composeapp #映象名稱
depends_on: #優先啟動
- redis
ports: #埠對映
- "8888:8888"
redis: #拉取映象
image: "library/redis:alpine"
友情提示:上述版本號對比示例圖。官網對比連結
2.5 將專案打包
三、服務上傳啟動
3.1 Linux建立一個目錄
mkdir my_composeapp #建立目錄 cd my_composeapp #進入
3.2 上傳相關檔案
上傳專案打包後的jar
、Dockerfile
、docker-compose.yaml
相關配置檔案
3.3 啟動compose服務
注:docker-compose命令必須在一個包含docker-compose.yaml檔案目錄下才能使用
docker-compose up docker-compose up -d #-d【後臺啟動】 docker-compose down #關閉 【ctrl + c】
樣例輸出:
專案啟動,頁面輸出日誌
3.4 檢視執行的容器
此處可見已拉取redis映象並生成了容器、及已生成java專案執行容器
3.5 訪問樣例
curl localhost:8888/hello #訪問測試
樣例輸出:
至此,docker-compose使用簡直在方便了!!!大大簡化了我們的部署工作。學廢的小夥伴記得給自己加雞腿~
總結:
我是南國以南i記錄點滴每天成長一點點,學習是永無止境的!轉載請附原文連結!!!