嘗試使用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