1. 程式人生 > 其它 >Docker Compose使用詳解

Docker Compose使用詳解

Docker Compose

介紹

Docker Compose是為了更加輕鬆高效的管理多個容器。可以自動的進行容器編排

安裝

  1. 下載Docker-Compose
# 安裝docker-compose
sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

顯示安裝成功

  1. 授權
sudo chmod +x docker-compose

體驗

  1. 建立一個資料夾
mkdir composetest
cd composetest
  1. 編寫app.py指令碼
import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)

def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)

@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)
  1. 建立依賴
vim requirements.txt
# 儲存下面兩個依賴
flask
redis
  1. 建立Dockerfile
vim Dockerfile
# 儲存下面值
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
  1. 編寫docker-compose.yml 檔案
version: "3.9"
# 表示有兩個服務web服務,和Redis服務
# web服務用Dockerbuild 命令自定義 redis用官方提供的映象
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"
  1. 使用docker-compose up 命令執行
  2. 訪問成功

yaml規則

docker-compose核心!

docker-compose配置詳解:https://docs.docker.com/compose/compose-file/compose-file-v3/

#核心總共有三個 版本 服務 其他配置

#版本
version: '' 
#服務
services:   
  服務1: web
  image
  build
  network
  服務2: web
  image
  build
  network
  ..... 
# 其他配置
network:
volumes:
configs:
:

WordPress搭建

  1. 建立目錄
[root@pinyoyougou-docker /]# mkdir my_wordpress
[root@pinyoyougou-docker /]# cd my_wordpress
  1. 編寫yaml指令碼
version: "3.9"
    
services:
  db:
    #映象
    image: mysql:5.7
    #卷掛載
    volumes:
      - db_data:/var/lib/mysql
    #一直重啟
    restart: always
    #環境配置
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    
  wordpress:
    #依賴db 讓db服務先執行
    depends_on:
      - db
    #映象
    image: wordpress:latest
    #卷掛載
    volumes:
      - wordpress_data:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
volumes:
  db_data: {}
  wordpress_data: {}
  1. 執行docker-compose命令
docker-compose up -d #後臺執行

實戰

  1. 建立springboot專案

    2. 編寫程式碼
package com.fyx.dockercompose.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author yuanxin
 * @Date 2021/7/2 15:52
 **/
@RestController("/test")
public class RedisController {
    @Autowired
    private RedisTemplate redisTemplate;

    @GetMapping(value = "incr")
    public Long test() {
        Long add = redisTemplate.opsForValue().increment("add");
        return add;
    }
}
  1. 編寫dockerfile
FROM java:8

MAINTAINER [email protected]

COPY ./target/docker-compose.jar ./

EXPOSE 8080
ENTRYPOINT ["java","-jar","docker-compose.jar"]
  1. 編寫docker-compose
version: "3.9"
services:
  my-docker-compose:
    build: .
    image: my-docker-compose
    depends_on:
      - redis
    ports:
      - "8080:8080"
  redis:
    image: "library/redis:alpine"

  1. java 配置
# 注意這裡的ip 得是服務名 因為Docker內部網路可以通過域名訪問
spring.redis.host=redis
spring.redis.port=6379
  1. 打包java服務把Dockerfile,docker-compose 放到Linux伺服器上執行docker-compose up

  2. 訪問成功

注意

如需重新載入app資源需要使用docker-compose up --build -d
-d 後臺執行
--build 重新構建映象