docker容器編排原來這么絲滑~


前言:

請各大網友尊重本人原創知識分享,謹記本人博客:南國以南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的文件。定義了兩個服務:composeappredis.

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 上傳相關文件

上傳項目打包后的jarDockerfiledocker-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記錄點滴每天成長一點點,學習是永無止境的!轉載請附原文鏈接!!!

參考鏈接參考鏈接


免責聲明!

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



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