前言:
請各大網友尊重本人原創知識分享,謹記本人博客:南國以南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記錄點滴每天成長一點點,學習是永無止境的!轉載請附原文鏈接!!!