Docker-Compose介紹、安裝及使用

一、Docker-Compose簡介

參考Docker基礎知識和使用示例 Docker:Docker Compose 詳解

Docker快速入門——Docker-Compose

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

使用一個Dockerfile模板文件,可以讓用戶很方便的定義一個單獨的應用容器。然而在工作中,經常會碰到需要多個容器相互配合來完成某項任務的情況。例如要實現一個Web項目,除了Web服務容器本身,往往還需要再加上後端的數據庫服務容器,甚至還包括負載均衡容器等。而使用 Docker Compose 可以輕鬆、高效的管理容器,它是一個用於定義和運行多容器 Docker 的應用程序工具。

Docker-Compose將所管理的容器分爲三層,分別是工程(project),服務(service)以及容器(container)。Docker-Compose運行目錄下的所有文件(docker-compose.yml,extends文件或環境變量文件等)組成一個工程,若無特殊指定工程名即爲當前目錄名。一個工程當中可包含多個服務,每個服務中定義了容器運行的鏡像,參數,依賴。Docker-Compose並沒有解決負載均衡的問題,因此需要藉助其它工具實現服務發現及負載均衡。

Docker-Compose的工程配置文件默認爲docker-compose.yml,其定義了多個有依賴關係的服務及每個服務運行的容器。

比如說,一個項目有數據庫服務mysql-service、遠程字典服務redis-service和項目自身的Web服務seckill(秒殺系統),其docker-compose.yml如下所示,此yml文件將上訴幾個容器關聯爲一個項目,默認直接從上到下按順序啓動容器,所以seckill需要放最後。

version: "2"
services:
  mysql-service:
    image: mysql:5.7  #指定服務所使用的鏡像
    ports:
      - "3306:3306"
    restart: always
    environment: #環境變量配置
      MYSQL_ROOT_PASSWORD: "123456"
      MYSQL_DATABASE: "dev"
      MYSQL_USER: "developer"
      MYSQL_PASSWORD: "123456"
  redis-service:
    image: redis
    command: redis-server --requirepass 123456  #覆蓋容器啓動後默認執行的命令
    ports:
      - "6379:6379"
    restart: always
  seckill:
    restart: always
    build: ./ 	#Compose將會利用Dockerfile自動構建鏡像,然後使用鏡像啓動服務容器。
    ports:  # 暴露端口信息  - "宿主機端口:容器暴露端口"
      - "8000:8000"
    links:  #鏈接到其它服務中的容器
      - mysql-service:mysql
      - redis-service:redis

二、安裝 Docker Compose

通過下面命令自動下載適應版本的 Compose,併爲安裝腳本添加執行權限。github源不穩定,速度極慢。建議使用daocloud源。

#github源
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

#daocloud源
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

Docker相關換源參考:Docker快速安裝以及換鏡像源

查看安裝是否成功

docker-compose -v

輸出

docker-compose version 1.25.0, build 0a186604

三、Docker-Compose模板文件示例

1、docker-compose模板文件編寫

docker-compose.yaml文件如下:

version: '2'
services:
  web1:
    image: nginx
    ports: 
      - "6061:80"
    container_name: "web1"
    networks:
      - dev
  web2:
    image: nginx
    ports: 
      - "6062:80"
    container_name: "web2"
    networks:
      - dev
      - pro
  web3:
    image: nginx
    ports: 
      - "6063:80"
    container_name: "web3"
    networks:
      - pro

networks:
  dev:
    driver: bridge
  pro:
    driver: bridge

docker-compose.yaml文件指定了三個web服務。

2、啓動應用

創建一個webapp目錄,將docker-compose.yaml文件拷貝到webapp目錄下,使用docker-compose啓動應用。

docker-compose up -d

3、服務訪問

通過瀏覽器訪問web1,web2,web3服務:
http://127.0.0.1:6061
http://127.0.0.1:6062
http://127.0.0.1:6063

運行結果如下:

root@zhongzhanhui-VirtualBox:/home/zhongzhanhui/GoProject# mkdir docker_compose_try
root@zhongzhanhui-VirtualBox:/home/zhongzhanhui/GoProject# cd docker_compose_try/
root@zhongzhanhui-VirtualBox:/home/zhongzhanhui/GoProject/docker_compose_try# vi docker-compose.yaml
root@zhongzhanhui-VirtualBox:/home/zhongzhanhui/GoProject/docker_compose_try# docker-compose up -d
Creating network "docker_compose_try_dev" with driver "bridge"
Creating network "docker_compose_try_pro" with driver "bridge"
Pulling web1 (nginx:)...
latest: Pulling from library/nginx
000eee12ec04: Pull complete
eb22865337de: Pull complete
bee5d581ef8b: Pull complete
Digest: sha256:50cf965a6e08ec5784009d0fccb380fc479826b6e0e65684d9879170a9df8566
Status: Downloaded newer image for nginx:latest
Creating web2 ... done
Creating web3 ... done
Creating web1 ... done

瀏覽器輸入上述三個服務的地址後,都顯示"Welcome to nginx!",代表nginx服務啓動成功。

輸入命令docker ps查看現在正在運行的容器

root@zhongzhanhui-VirtualBox:/home/zhongzhanhui/GoProject/docker_compose_try# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
325541bca9c3        nginx               "nginx -g 'daemon of…"   6 minutes ago       Up 5 minutes        0.0.0.0:6063->80/tcp   web3
e2106b09e031        nginx               "nginx -g 'daemon of…"   6 minutes ago       Up 5 minutes        0.0.0.0:6061->80/tcp   web1
f972b5a3c391        nginx               "nginx -g 'daemon of…"   6 minutes ago       Up 5 minutes        0.0.0.0:6062->80/tcp   web2

可見有web1、web2、web3這三個容器正在運行中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章