1. 程式人生 > 其它 >嘗試使用Docker-compose部署lnmp

嘗試使用Docker-compose部署lnmp

Docker-compose概述

Docker-Compose專案是Docker官方的開源專案,負責實現對Docker容叢集的快速編排


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


Docker-Compose的工程配置檔案預設為docker-compose.yml,可通過環境變數COMPOSE_FILE或-f引數自定義配置檔案,其定義了多個有依賴關係的服務及每個服務執行的容器


使用一個Dockerfile模板檔案,可以讓使用者很方便的定義一個單獨的應用容器。在工作中,經常會碰到需要多個容器相互配合來完成某項任務的情況。例如要實現一個Web專案,除了Web服務容器本身,往往還需要再加上後端的資料庫服務容器,甚至還包括負載均衡容器等


Compose允許使用者通過一個單獨的docker-compose.yml模板檔案(YAML 格式)來定義一組相關聯的應用容器為一個專案(project)。
Docker-Compose專案由Python編寫,呼叫Docker服務提供的API來對容器進行管理。因此,只要所操作的平臺支援Docker API, 就可以在其上利用Compose來進行編排管理

YAML檔案格式及編寫注意事項

YAML 是一種標記語言,它可以很直觀的展示資料序列化格式,可讀性高。類似於 XML資料描述語言,語法比 XML 簡單的很多。YAML 資料結構通過縮排來表示,連續的專案通過減號來表示,鍵值對用冒號分隔,陣列用中括號 [] 括起來, hash 用花括號 {} 括起來

Docker Compose配置常用欄位

欄位說明
build 指定 Dockerfile 檔名,要指定Dockerfile檔案需要在build標籤的子級標籤中使用dockerfile標籤指定
dockerfile 構建映象上下文路徑
context 可以是 dockerfile 的路徑,或者是指向 git 倉庫的 url 地址
image 指定映象
command 執行命令,覆蓋預設命令
container name 指定容器名稱,由於容器名稱是唯一的,如果指定自定義名稱,則無法 scale
deploy 指定部署和執行服務相關配置,只能在 Swarm 模式使用
environment 新增環境變數
networks 加入網路
ports 暴露容器埠,與 -p 相同,但埠不能低於 60
volumes 掛載宿主機路徑或命令卷
hostname 容器主機名
restart 重啟策略,預設 no,always,no-failure,unless-stoped

重啟策略

1.no,預設策略,在容器退出時不重啟容器
2.on-failure,在容器非正常退出時(退出狀態非0),才會重啟容器
3.on-failure:3,在容器非正常退出時重啟容器,最多重啟3次
4.always,在容器退出時總是重啟容器
5.unless-stopped,在容器退出時總是重啟容器,但是不考慮在 Docker 守護程序啟動時就已經停止了的容器

Docker Compose常用命令

build 重新構建服務
ps 列出容器
up 建立和啟動容器
exec 在容器裡面執行命令
scale 指定一個伺服器啟動數量
top 顯示容器程序
logs 檢視容器輸出
down 刪除容器、網路、資料卷和映象
stop/start/restart 停止/啟動/重啟服務

compose部署lnmp

Docker Compose環境安裝

#下載 在Linux上我們可以從GitHub上下載它的二進位制包來使用,此命令是下載Docker Compose的當前穩定版本'
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#安裝 
chmod +x /usr/local/bin/docker-compose
#檢視版本
docker-compose --version

  

建立工作目錄並移動相應安裝包、配置檔案

----------------------nginx-----------------------------
1.mkdir -p /opt/compose-lnmp/nginx
2.cd  /opt/compose-lnmp/nginx
3.把nginx-1.12.0.tar.gz和wordpress-4.9.4-zh_CN.tar.gz和nginx的配置檔案nginx.conf移進來(配置檔案都已經修改好)
----------------------mysql-----------------------------
1.mkdir -p /opt/compose-lnmp/mysql
2.cd  /opt/compose-lnmp/mysql
3.把boost_1_59_0.tar.gz和mysql-5.7.17.tar.gz和mysql配置檔案my.cnf移動到本目錄(配置檔案都已經修改好)
----------------------php--------------------------------
1.mkdir -p /opt/compose-lnmp/php
2.cd  /opt/compose-lnmp/php
3.把php-7.1.10.tar.bz2、php-fpm.conf、php.ini、www.conf移動到本目錄(配置檔案都已經修改好)

編寫搭建nginx、mysql、php的dockerfile

Dockerfile搭建lnmp - 視覺裝置在笑 - 部落格園 (cnblogs.com)

編寫搭建lnmp的compose檔案

version: '2'
services:
  nginx:
    build:
      context: ./nginx
      dockerfile: Dockerfile
    container_name: nginx
    ports:
      - 1908:80
      - 1917:443
    networks:
      lnmp:
        ipv4_address: 172.20.0.10
    volumes:
      - ./nginx/wwwroot:/user/local/nginx/html

  mysql:
    build:
      context: ./mysql
      dockerfile: Dockerfile
    container_name: mysql
    ports:
      - 3306:3306
    networks:
      lnmp:
        ipv4_address: 172.20.0.20

  php:
    depends_on:
      - nginx
      - mysql
    build:
      context: ./php
      dockerfile: Dockerfile
    container_name: php
    ports:
      - 9000:9000
    networks:
      lnmp:
        ipv4_address: 172.20.0.30
    volumes_from:
      - nginx
      - mysql

networks:
  lnmp:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/16

  

cd /opt/compose-lnmp/
docker-compose -f docker-compose.yml up -d
----------------------------------------------------------
-f, --file FILE :使用特定的 compose 模板檔案,預設為 docker-compose.yml
-p, --project-name NAME :指定專案名稱,預設使用目錄名稱
-d :在後臺執行
----------------------------------------------------------
docker ps -a