Docker Compose學習記錄

Docker Compose

Docker Compose是官方開源的一個Docker容器編排軟件,定位于將多個容器編排在起義行程一組服務。

官方手冊地址:https://docs.docker.com/compose/overview/

關鍵概念

項目

通過compose生成的一組服務我們稱之為項目,項目一般由多個容器組成,共享生命周期。

安裝

// 直接通過下載compose的執行文件即可
sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

// 下載完成后,進行授權即可使用
sudo chmod +x /usr/local/bin/docker-compose

// 查看一下版本,輸出以下內容則說明安裝成功
docker-compose version 1.18.0, build 8dd22a9
docker-py version: 2.6.1
CPython version: 2.7.13
OpenSSL version: OpenSSL 1.0.1t  3 May 2016

使用

首先來一個簡單的例子

// 創建一個新目錄
cd /var/local

// 創建compose的目錄
mkdir tomcat_compose

// 創建compose的生成文件
touch docker-compose.yml

// 進入docker-compose.yml,寫入以下內容
version: '3'
services:
  web:
    image: "tomcat"
    ports:
      - "33338:8080"

// 保存文件后,執行docker-compose up運行案例
docker-compose up

// 然后docker-compose就會開始構建你的項目了
// 構建輸出...

// 構建完成后,訪問33338端口可以看到輸出信息

可以看的出來,其實docker-compose是另一種方式的docker容器構建方式。

別人給的一個例子

  1. 創建一個app.py文件
from flask import Flask
from redis import Redis

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

@app.route('/')
def hello():
    count = redis.incr('hits')
    return 'Hello World! 該頁面已被訪問 {} 次。\n'.format(count)

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)
  1. 創建一個Dockerfile文件
FROM python:3.6-alpine
ADD . /code
WORKDIR /code
RUN pip install redis flask
CMD ["python", "app.py"]

  1. 創建一個docker-compose.yml文件
version: '3' // 注意,這里的3是指docker-compose識別的yml格式,一般用3就可以了
services:

  web:
    build: .
    ports:
      - "5000:5000"
    depends_on:
      - redis

  redis:
    image: "redis:alpine"

注意,yml文件里面的縮進為2個空格

  1. 執行docker-compose up構建
// 構建輸出
  1. 構建完成后,訪問 ip:5000,返回 Hello World! 該頁面已被訪問 N 次。

從docker-compose.yml的結構上看出,這里用了兩個鏡像來實現這組服務,APP中調用了redis的自增命令來實現計數。

==另外有一個沒有說到的點是,compose會把這兩個容器放置到一個網絡中,所以web端是可以請求到redis的。==

// 查詢一下生成的兩個容器
docker ps | grep compose01

// 輸出
ID              ...    NAMES
82731293d9de    ...    compose01_web_1
8d9d8b80de9f    ...    compose01_redis_1

// 查詢一下先有docker網絡
docker network ls | grep compose01 // 這個compose01是我構建時的目錄

// 輸出
1f38316baee8    compose01_default    bridge    local

// 查詢web的網絡
docker inspect compose01_web_1

// 輸出
...
    "Networks": {
        "compose01_default": {
...

// 查詢redis的網絡
docker inspect compose01_redis_1

// 輸出
...
    "Networks": {
        "compose01_default": {
...

由此看出兩容器使用的網絡相同,驗證上面的結論。

wordpress案例

創建wordpress的目錄,然后創建docker-compose.yml文件,運行docker-compose up命令,然后訪問就可以看到wordpress的安裝頁面了。

version: "3"
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:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:

刪除項目

在compose的構建目錄下直接運行 docker-compose rm即可生成的項目

compose命令詳解

docker-compose的支持了docker的大部分命令,其使用方式也大同小異,具體可以看這里。https://yeasy.gitbooks.io/docker_practice/content/compose/commands.html#rm

compose模板命令詳解

這里指的是寫在yml里面的命令,詳見:https://yeasy.gitbooks.io/docker_practice/content/compose/compose_file.html

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容