docker-compose理論和部署
- docker-compose是什麼
- Docker Compose 的背景
- docker-compose 部署
-
- 安裝在docker-ce的基礎上
- 把docker-compose的包上傳
-
- 用dockerfile寫nginx
- 建立yaml檔案
-
- Docker Compose配置常用字段
- Docker Compose常用指令
- 基本的使用格式
- docker-compose選項
- 建立模闆腳本
docker-compose是什麼
Docker Compose 與 Docker Stack 非常類似。它能夠在 Docker 節點上,以單引擎模式(Single-Engine Mode)進行多容器應用的部署和管理。
多數的現代應用通過多個更小的服務互相協同來組成一個完整可用的應用。比如一個簡單的示例應用可能由如下 4 個服務組成。
Web前端。
訂單管理。
品類管理。
背景資料庫。
将以上服務組織在一起,就是一個可用的應用。
部署和管理繁多的服務是困難的。而這正是 Docker Compose 要解決的問題。
Docker Compose 并不是通過腳本和各種冗長的 docker 指令來将應用元件組織起來,而是通過一個聲明式的配置檔案描述整個應用,進而使用一條指令完成部署。
應用部署成功後,還可以通過一系列簡單的指令實作對其完整聲明周期的管理。甚至,配置檔案還可以置于版本控制系統中進行存儲和管理。
Docker Compose 的背景
Docker Compose 的前身是 Fig。Fig 是一個由 Orchard 公司開發的強有力的工具,在當時是進行多容器管理的最佳方案。
Fig 是一個基于 Docker 的 Python 工具,允許使用者基于一個 YAML 檔案定義多容器應用,進而可以使用 fig 指令行工具進行應用的部署。
Fig 還可以對應用的全生命周期進行管理。
内部實作上,Fig 會解析 YAML 檔案,并通過 Docker API 進行應用的部署和管理。
在 2014 年,Docker 公司收購了 Orchard 公司,并将 Fig 更名為 Docker Compose。
指令行工具也從 fig 更名為 docker-compose,并自此成為綁定在 Docker 引擎之上的外部工具。
雖然它從未完全內建到 Docker 引擎中,但是仍然受到廣泛關注并得到普遍使用。
直至今日,Docker Compose 仍然是一個需要在 Docker 主機上進行安裝的外部 Python 工具。
使用它時,首先編寫定義多容器(多服務)應用的 YAML 檔案,然後将其交由 docker-compose 指令處理,Docker Compose 就會基于 Docker 引擎 API 完成應用的部署。
docker-compose 部署
安裝在docker-ce的基礎上
yum -y inshall docker-ce
把docker-compose的包上傳
[[email protected] ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[[email protected] ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg original-ks.cfg 模闆 圖檔 下載下傳 桌面
docker-compose nginx 公共 視訊 文檔 音樂
[[email protected] ~]# cp -p docker-compose /usr/bin/
[[email protected] ~]# cd /usr/bin/
[[email protected] bin]# ls
[[email protected] bin]# chmod +x docker-compose #給docker-compose腳本執行權限
[[email protected] ~]# mkdir docker_nginx #建立docker_nginx目錄
[[email protected] ~]# yum -y install tree #下載下傳一個目錄樹
用dockerfile寫nginx
[[email protected] ~]# cd docker_nginx
[[email protected] docker_nginx]# mkdir nginx
[[email protected] docker_nginx]# cd nginx/
[[email protected] nginx]# ls
nginx-1.12.0.tar.gz
[[email protected] nginx]# vim dockerfile
FROM centos:7
MAINTAINER this is nginx
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.0.tar.gz /usr/local/src
WORKDIR /usr/local/src
WORKDIR nginx-1.12.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
[[email protected] nginx]# vim run.sh
[[email protected] nginx]# cat run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
[[email protected] nginx]# mkdir wr
[[email protected] nginx]# cd wr/
[[email protected] wr]# vim index.html
[[email protected] wr]# cat index.html
song
[[email protected] compose_nginx]# tree
.
├── nginx
│ ├── Dockerfile 建立容器腳本
│ ├── nginx-1.12.0.tar.gz 複制源碼包
│ └── run.sh 啟動服務腳本
└── wr
└── index.html 站點
建立yaml檔案
yaml十一種标記語言很直覺的資料序列化格式
檔案格式及編寫注意事項
不支援制表符tab鍵縮進,需要使用空格縮進
通常開頭縮進2個空格
字元後縮進一個空格,如冒号、逗号、橫杆
用#号注釋
如果包括特殊字元用單引号引起來
布爾值必須用引号括起來
Docker Compose配置常用字段
字段 描述
build dockerfile context 指定Dockerfile檔案名建構鏡像上下文路徑
image 指定鏡像
command 執行指令,覆寫預設指令
container name 指定容器名稱,由于容器名稱是唯一-的, 如果指定自定義名稱,則無法scale(建立副本)
deploy 指定部署和運作服務相關配置,隻能在Swarm模式使用
environment 添加環境變量
networks 加入網絡 (名稱空間)
ports 暴露容器端口,與-p相同,但端口不能低于60
volumes 挂載主控端路徑或指令卷(資料卷)
restart 重新開機政策,預設no(失敗,不會繼續操作),always(失敗,一直嘗試重新開機,直到運作成功), no-failure,unless-stoped
hostname 容器主機名
Docker Compose常用指令
字段 描述
build 重新建構服務
ps 列出容器
up 建立和啟動容器
exec 在容器裡面執行指令
scale 指定一個服務容器啟動數量
top 顯示容器程序
logs 檢視容器輸出
down 删除容器、網絡、資料卷和鏡像
stop/start/restart 停止/啟動/重新開機服務
基本的使用格式
docker-compose選項
--verbose 輸出更多調試資訊
--version列印版本并退出
-f,--file FILE 使用特定的compose模闆檔案,預設為docker-compose.yml
-p,--project-name NAME指定項目名稱,預設使用目錄名稱
建立模闆腳本
[[email protected] docker_nginx]# vim docker-compose.yaml
[[email protected] docker_nginx]# docker-compose -f docker-compose.yaml up -d
[[email protected] docker_nginx]# cat docker-compose.yaml
version: '3'
services:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: dockerfile
ports:
- 1234:80
- 1235:443
networks:
- cluster
volumes:
- ./wr:/usr/local/nginx/html
networks:
cluster:
