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

蝸牛 互聯網技術資訊 2022-02-20 128 0

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

    1 什么是Docker Compose

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

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

    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,并且執行Docker-compose命令時在該文件所在目錄下執行。

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

    例如:

    docker-compose.yml???#?一個文件代表一個project
    ?serveices:??????????#?服務
    ???container-name:???#?容器
    ?????build:?
    ??????-?xxx:xxx
    ?network:????????????#?引用標簽
    ???xxx:

    下面是一個標準的docker-compose.yml文件

    version:?"3"??#?指定版本
    services:?????#?services
    ??proxy:??????#?自定義容器名稱
    ????build:?./proxy??#?Dockerfile所在目錄,用于構建容器
    ????networks:?#?自定義容器網絡
    ??????-?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:查看服務日志輸出

    docker-compose?logs

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

    docker-compose?port?eureka?8761

    build:構建或者重新構建服務

    docker-compose?build

    start:啟動指定服務已存在的容器

    docker-compose?start?eureka

    stop:停止已運行的服務的容器

    docker-compose?stop?eureka

    rm:刪除指定服務的容器

    docker-compose?rm?eureka

    up:構建、啟動容器

    docker-compose?up

    kill:通過發送 SIGKILL 信號來停止指定服務的容器

    docker-compose?kill?eureka

    pull:下載服務鏡像

    docker-compose?pull?eureka

    scale:設置指定服務運氣容器的個數,以 service=num 形式指定

    docker-compose?scale?user=3?movie=3

    run:在一個服務上執行一個命令

    docker-compose?run?web?bash

    5 使用Docker Compose一鍵部署Spring Boot+Redis實戰

    5.1 構建應用

    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 打包應用并構建目錄

    5.2.1 打包Spring Boot項目

    如何使用Docker?Compose快速部署多容器服務  docker 第1張

    5.2.2 上傳redis.conf配置文件
    5.2.3 目錄結構
    -?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:???????#?指定服務名稱
    ????build:?./sp??#?指定?Dockerfile?所在路徑
    ????ports:???????#?指定端口映射
    ??????-?"9001:8080"
    ????links:
    ??????-?re-demo:ymx.redis?#?進行容器鏈接
    ??re-demo:
    ????build:?./rd

    5.5 運行并測試部署結果

    運行:

    [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快速部署多容器服務”有了一定的了解,如果想了解更多相關知識,歡迎關注蝸牛博客行業資訊頻道,感謝各位的閱讀!

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:niceseo99@gmail.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    評論

    日本韩欧美一级A片在线观看