日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Docker?Compose快速部署多容器服務實戰的實例詳解_docker

作者:紅帽海綿寶寶 ? 更新時間: 2022-04-23 編程語言

1 什么是Docker Compose

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

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

2 安裝Docker Compose

安裝命令:

[root@iZ2ze4m2ri7irkf6h6n8zoZ ~]# 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@iZ2ze4m2ri7irkf6h6n8zoZ ~]# chmod +x /usr/local/bin/docker-compose

檢查是否安裝成功:

[root@iZ2ze4m2ri7irkf6h6n8zoZ ~]# 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項目

在這里插入圖片描述

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!

6 小總結

在Spring Boot配置文件中,redis的host沒有使用localhost或者127.0.0.1,而是使用了域名ymx.redis,這一域名在docker-compose.yml文件中進行了映射,進而Spring Boot的容器能夠鏈接到redis容器,但是這一情況依賴于一個默認條件,就是docker的網絡默認是橋接模式,兩個容器都在同一子網中,因此才能夠互相訪問。

因此,links并不是唯一的容器網絡解決方案,在容器較多時,需要使用networks進行網絡的管理。

參考文章:

https://www.jianshu.com/p/658911a8cff3

https://www.jianshu.com/p/3004fbce4d37

https://blog.csdn.net/luo15242208310/article/details/88642187

https://blog.csdn.net/qq_36781505/article/details/86612988

原文鏈接:https://blog.csdn.net/Mr_YanMingXin/article/details/122914701

欄目分類
最近更新