溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何使用Docker?Compose快速部署多容器服務(wù)

發(fā)布時間:2022-02-20 11:51:44 來源:億速云 閱讀:472 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下如何使用Docker Compose快速部署多容器服務(wù),希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

    1 什么是Docker Compose

    前面我們使用 Docker 的時候,定義 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服務(wù)架構(gòu)的應(yīng)用系統(tǒng)一般包含若干個微服務(wù),每個微服務(wù)一般都會部署多個實例,如果每個微服務(wù)都要手動啟停,那么效率之低,維護量之大可想而知。

    使用 Docker Compose 可以輕松、高效的管理容器,它是一個用于定義和運行多容器 Docker 的應(yīng)用程序工具

    2 安裝Docker Compose

    安裝命令:

    [root@iZ2ze4m2ri7irkf6h7n8zoZ ~]# curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
    [root@iZ2ze4m2ri7irkf6h7n8zoZ ~]# chmod +x /usr/local/bin/docker-compose

    檢查是否安裝成功:

    [root@iZ2ze4m2ri7irkf6h7n8zoZ ~]# docker-compose -v

    3 Docker Compose文件格式的簡單介紹

    Docker Compose文件一般命名為docker-compose.yml,并且執(zhí)行Docker-compose命令時在該文件所在目錄下執(zhí)行。

    Docker Compose 分為三層,分別是工程(project)、服務(wù)(service)/引用標(biāo)簽、容器(container)

    例如:

    docker-compose.yml   # 一個文件代表一個project
     serveices:          # 服務(wù)
       container-name:   # 容器
         build: 
          - xxx:xxx
     network:            # 引用標(biāo)簽
       xxx:

    下面是一個標(biāo)準(zhǔn)的docker-compose.yml文件

    version: "3"  # 指定版本
    services:     # services
      proxy:      # 自定義容器名稱
        build: ./proxy  # Dockerfile所在目錄,用于構(gòu)建容器
        networks: # 自定義容器網(wǎng)絡(luò)
          - frontend
      app:       
        build: ./app
        networks:
          - frontend
          - backend
      db:
        image: postgres
        networks:
          - backend
    networks:
      frontend:
        driver: custom-driver-1
      backend:
        driver: custom-driver-2
        driver_opts:
          foo: "1"
          bar: "2"

    4 Docker Compose常用命令

    ps:列出所有運行容器

    docker-compose ps

    logs:查看服務(wù)日志輸出

    docker-compose logs

    port:打印綁定的公共端口,下面命令可以輸出 eureka 服務(wù) 8761 端口所綁定的公共端口

    docker-compose port eureka 8761

    build:構(gòu)建或者重新構(gòu)建服務(wù)

    docker-compose build

    start:啟動指定服務(wù)已存在的容器

    docker-compose start eureka

    stop:停止已運行的服務(wù)的容器

    docker-compose stop eureka

    rm:刪除指定服務(wù)的容器

    docker-compose rm eureka

    up:構(gòu)建、啟動容器

    docker-compose up

    kill:通過發(fā)送 SIGKILL 信號來停止指定服務(wù)的容器

    docker-compose kill eureka

    pull:下載服務(wù)鏡像

    docker-compose pull eureka

    scale:設(shè)置指定服務(wù)運氣容器的個數(shù),以 service=num 形式指定

    docker-compose scale user=3 movie=3

    run:在一個服務(wù)上執(zhí)行一個命令

    docker-compose run web bash

    5 使用Docker Compose一鍵部署Spring Boot+Redis實戰(zhàn)

    5.1 構(gòu)建應(yīng)用

    5.1.1 Spring Boot項目

    依賴:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--redis-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

    配置文件:

    spring:
      redis:
        #host: 127.0.0.1
        host: ymx.redis
        port: 6379
        password:
        jedis:
          pool:
            max-active: 8
            max-wait: -1
            max-idle: 500
            min-idle: 0
        lettuce:
          shutdown-timeout: 0

    controller代碼:

    @RestController
    public class HelloController {
    
        @Autowired
        private RedisTemplate<String, String> redisTemplate;
        @RequestMapping("/hello/{id}")
        public String hello(@PathVariable("id") Integer id) {
            return redisTemplate.opsForValue().get(String.valueOf(id));
        }
        @RequestMapping("/save/{id}/{name}")
        public String save(@PathVariable("id") Integer id, @PathVariable("name") String name) {
            try {
                redisTemplate.opsForValue().set(String.valueOf(id), "Hello " + name + "!");
            } catch (Exception e) {
                return "false";
            }
            return "success";
    }
    5.1.2 Redis配置文件

    只是將redis自帶的redis.conf做了一點修改

    #注釋掉bind 127.0.0.1
    # bind 127.0.0.1 -::1
    #修改protected-mode yes->no
    protected-mode no

    5.2 打包應(yīng)用并構(gòu)建目錄

    5.2.1 打包Spring Boot項目

    如何使用Docker?Compose快速部署多容器服務(wù)

    5.2.2 上傳redis.conf配置文件
    5.2.3 目錄結(jié)構(gòu)
    - mycompose
      - docker-compose.yml 
      - rd  
        - Dockerfile  
        - redis.conf
      - sp
        - Dockerfile  
        - sp_redis-0.0.1-SNAPSHOT.jar

    5.3 編寫Dockerfile

    5.3.1 Spring Boot容器的Dockerfile
    FROM java:8
    
    MAINTAINER YMX "1712229564@qq.com"
    COPY sp_redis-0.0.1-SNAPSHOT.jar /root/sp_redis-0.0.1-SNAPSHOT.jar
    EXPOSE 8080
    ENTRYPOINT ["java", "-jar","/root/sp_redis-0.0.1-SNAPSHOT.jar"]
    5.3.2 redis容器的Dockerfile
    FROM redis
      
    MAINTAINER ymx 1712229564@qq.com
    COPY redis.conf /usr/local/etc/redis/redis.conf
    EXPOSE 6379
    CMD ["redis-server","/usr/local/etc/redis/redis.conf" ]

    5.4 編寫docker-compose.yml

    version: "2.8" # 表示該 Docker-Compose 文件使用的是 Version 2 file
    services:
      sp-demo:       # 指定服務(wù)名稱
        build: ./sp  # 指定 Dockerfile 所在路徑
        ports:       # 指定端口映射
          - "9001:8080"
        links:
          - re-demo:ymx.redis # 進行容器鏈接
      re-demo:
        build: ./rd

    5.5 運行并測試部署結(jié)果

    運行:

    [root@iZ2ze4m2ri7i mycompose]# docker-compose up
    Creating network "mycompose_default" with the default driver
    Building re-demo
    Sending build context to Docker daemon  96.77kB
    Step 1/5 : FROM redis
    latest: Pulling from library/redis
    ......

    測試:

    [root@iZ2ze4m2ri7i mycompose]# curl http://localhost:9001/save/2/Ymx
    success
    [root@iZ2ze4m2ri7i mycompose]# curl http://localhost:9001/hello/2
    Hello Ymx!

    看完了這篇文章,相信你對“如何使用Docker Compose快速部署多容器服務(wù)”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

    向AI問一下細節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI