天天看點

docker-compose理論和部署詳解docker-compose是什麼Docker Compose 的背景docker-compose 部署把docker-compose的包上傳

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:

           
docker-compose理論和部署詳解docker-compose是什麼Docker Compose 的背景docker-compose 部署把docker-compose的包上傳