Docker---compose的部署以及編排容器服務

目錄

一.docker-compose簡述

二.安裝docker-compose

三.Docker-compose的相關命令格式

四.compose編排nginx


一.docker-compose簡述

什麼是docker-compose

  • compose是定義和運行多容器的Docker應用程序的工具。使用compose可以使用YAML文件來配置應用程序。然後,使用單個命令,就可以創建並且啓動配置中的所有服務。
  • compose適用於所有環境:生產,開發,測試以及CI工作流程。使用compose基本上有三步流程:

1.使用Dockerfile定義應用程序的環境,以便於在任何地方進行復制。

2.在docker-compose.yml中定義組成應用程序的服務,以便於他們可以在隔離的環境中一起運行。

3.運行docker-compose並且撰寫開始並且運行你的整個應用程序

  • docker-compose是用來做docker的多容器控制,docker-compose是一個用來把docker自動化的工具,有了docker-compose你可以把所有繁複的docker操作使用一條命令自動化完成。

容器的編排與部署

  • docker有很多優勢,但是對於運維或者開發來說,docker最大的優點在於它提供了一種全新的發佈機制。這種發佈機制指的是我們使用docker鏡像作爲統一的軟件製品載體,使用docker容器提供獨立的軟件運行環境,使用docker hub提供鏡像統一的協作,最重要的是該機制使用dockerfile定義容器內部行爲和容器關鍵屬性來支持軟件的運行。
  • Dockerfile作爲整個機制的核心,這是一個非常了不起的創新。因爲在Dockerfile文件中,不但能夠定義使用者在容器中需要進行的操作,而且能夠定義容器中運行軟件需要的配置,於是軟件開發和運維終於能夠在一個配置文件上達成統一。運維人員使用同一個Dockerfile能在不同的場合下“重現”與開發者環境中一模一樣的運行單元(docker容器)出來。
  • 編排,即orchestration,它根據被部署的對象之間的耦合關係,以及被部署對象環境的依賴,制定部署流程中各個動作的執行順序,部署過程所需要的依賴文件的存儲位置和獲取方式,以及如何驗證部署成功,這些信息都會在編排工具中指定的格式(比如配置文件或者特定的代碼)來要求運維人員定義並且保存起來,從而保證這個流程能夠隨時在全新的環境中可靠有序地重現出來。
  • 部署,即deployment,它是按照編排所指定地內容和流程,在目標機器上執行編排指定環境初始化,存放指定的依賴和文件,運行指定的部署動作,最終按照編排中的規則來確定聯署成功。

compose的原理

  • docker-compose的調用過程如下:

首先,用戶執行的docker-compose up指令調用了命令行中的啓動方法。功能簡單明瞭,一個docker-compose.yml文件定義了一個docker-compose的project(項目),docker-compose操作提供的命令行參數規則作爲這個project的啓動參數交由peoject模塊去處理。

其次,如果當前宿主機已經存在與該應用對應的容器,docker-compose將進行爲邏輯判斷。如果用戶指定可以重新啓動已有服務,docker-compose就會執行service模塊的容器重啓方法,否則就直接啓動已有容器。這兩種操作的區別在於前者會停止舊的容器,創建新的容器,並且把舊的容器移除掉。在這個過程中創建容器的各項定義參數都是從docker-compose up指令和docker-compose.yml中傳入的。

接着,啓動容器的方法也很簡潔,這個方法中完成了一個docker容器啓動所需要的主要參數的封裝,並且在container模塊執行啓動。

最後,container模塊會調用docker-py客戶端執行docker daemon發起創建容器的POST請求,再往後就是Docker處理的範疇

二.安裝docker-compose

安裝docker-compose

  • 網絡優化
[root@192 ~]# vim /etc/sysctl.conf 
[root@192 ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@192 ~]# 
  • 下載docker-compose執行文件,且添加權限
//下載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

//查看版本
[root@192 ~]# docker-compose -v
docker-compose version 1.21.1, build 5a3f1a3
[root@192 ~]# 

 

注:在使用curl下載docker-compose時,可以選擇更高的版本

三.Docker-compose的相關命令格式

  • docker-compose的命令格式
//命令格式
docker-compose [ -f <arg>... ] [options] [COMMAND] [ARGS...]

//命令選項如下
-f,--file FILE指定compose模板文件,默認爲docker-compose.yml,可以多次指定。
-p,--project-name NAME指定項目名稱,默認將使用所在目錄名稱作爲項目名
-x-network-driver 使用Dockerfile的可拔插網絡後端特性(需要docker 1.9版本以上)
-x-network-driver DRIVER指定網絡後端的驅動,默認爲bridge
-verbose 輸出更多的調式信息
-v,打印版本並且退出
  • docker-compose up的使用

//docker-compose up的命令格式
docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]

//選項包括:
-d 在後臺運行服務容器
–no-color 不使用顏色來區分不同的服務的控制輸出
–no-deps 不啓動服務所鏈接的容器
–force-recreate 強制重新創建容器,不能與–no-recreate同時使用
–no-recreate 如果容器已經存在,則不重新創建,不能與–force-recreate同時使用
–no-build 不自動構建缺失的服務鏡像
–build 在啓動容器前構建服務鏡像
–abort-on-container-exit 停止所有容器,如果任何一個容器被停止,不能與-d同時使用
-t, –timeout TIMEOUT 停止容器時候的超時(默認爲10秒)
–remove-orphans 刪除服務中沒有在compose文件中定義的容器
–scale SERVICE=NUM 設置服務運行容器的個數,將覆蓋在compose中通過scale指定的參數
docker-compose up
啓動所有服務
docker-compose up -d
在後臺所有啓動服務
-f 指定使用的Compose模板文件,默認爲docker-compose.yml,可以多次指定。
docker-compose -f docker-compose.yml up -d
  • docker-compose的常用命令

docker-compose常用命令:
build  構建或重建服務
kill   殺掉容器
logs  顯示容器的輸出內容
port  打印綁定的開放端口
ps   顯示容器
pull  拉取服務鏡像
restart 重啓服務
rm  刪除停止的容器
run  運行一個一次性命令
scale 設置服務的容器數目
exec 在容器裏搪行命令
start 開啓服務
stop 停止服務
up  創建並啓動容器

四.compose編排nginx

YAML文件格式以及常用字段

  • YAML是一種標記語言,可讀性很強。類似於XML數據描述語言,語法比XML簡單的多。YAML數據結構通過縮進來表示,連續的項目通過減號來表示,鍵值對用冒號分融,數組用括號括起來,hash用花括號。
  • YAML文件格式注意事項:
  1. 在縮排中空白字符的數目並不是非常重要,只要相同階層的元素左側對齊就可以了(不過不能使用TAB字符);
  2. 通常開頭縮進2個空格;
  3. 字符的後面縮進1個空格,比如冒號、逗號、橫杆;
  4. 支持#註釋;
  5. 允許在文件中加入選擇性的空行,以增加可讀性;
  • docker-compose中YAML常用的字段:
字段 描述

build

  dockerfile

  context

指定dockerfile文件名構建鏡像上下文路徑
image 指定鏡像
command 執行命令,覆蓋默認命令
container_name 指定容器名稱,由於容器名稱唯一,如果指定自定義名稱,則無發scale
deploy 指定部署和運行服務相關配置,只能在swarm模式中使用
environment 添加環境變量
networks 加入網絡,引用頂級networks下條目
ports 映射端口,與-p功能相同,但是端口不能低於60
volumes 掛載宿主機路徑或命名卷。如果命名卷在頂級volumes定義卷名稱
restart 重啓策略,默認爲no,always | on-failure | unless-stopped
hostname 定義容器主機名

 

編排nginx容器的具體步驟

  • 使用tree命令查看具體的文件以及目錄
[root@192 ~]# tree /compose_nginx/
/compose_nginx/
├── docker-compose.yml
├── nginx
│?? ├── Dockerfile
│?? ├── nginx-1.12.2.tar.gz
│?? └── run.sh
└── wwwroot
    ├── 1.gif
    └── index.html

2 directories, 6 files
[root@192 ~]# 

//創建compose_nginx這個目錄用來存放相關的編排文件以及素材
//創建docker-compose.yml這個目錄用來編排服務
//創建nginx這個目錄用來存放Dockerfile文件以及源碼包
//船艦wwwroot用作數據卷,作爲nginx的站點目錄
  • nginx目錄下的Dockerfile配置以及run.sh文件的配置(鏡像製作參考上一篇博文)
[root@192 nginx]# cat Dockerfile 
FROM guyton/centos6
MAINTAINER this is nginx image <xu>
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.2.tar.gz /usr/local/src
WORKDIR /usr/local/src
WORKDIR nginx-1.12.2
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"]
[root@192 nginx]# cat run.sh 
#!/bin/bash
/usr/local/nginx/sbin/nginx
[root@192 nginx]# 

  • docker-compose.yml自動編排文件的配置(注意使用docker-compse.yml不能用Tab鍵,可以使用空格鍵)
[root@192 ~]# cd /compose_nginx/
[root@192 compose_nginx]# cat docker-compose.yml 
version: '3.3'   ##定義compose的版本號,可用docker-compose version 命令查看docker-py version
services:     ##定義具體的服務
 nginx:
   hostname: nginx    ##定義編排的容器名字
   build:    ##指定創建容器服務的路徑
     context: ./nginx
     dockerfile: Dockerfile
   ports:        ##映射容器服務的端口,相當於docker run中的 -p
     - 1216:80
     - 1217:443
   networks:        ##定義網絡名稱
     - cluster
   volumes:        ##設置數據卷
     - ./wwwroot/:/usr/local/nginx/html
networks:        ##定義全局網絡名稱
   cluster:
[root@192 compose_nginx]# 
  • 編排容器服務
//-f必須指定具體的文件路徑,所以在/compose_nginx目錄下直接使用文件
[root@192 compose_nginx]# docker-compose -f docker-compose.yml up -d
Successfully built 64a6a18722f0
Successfully tagged compose_nginx_nginx:latest
WARNING: Image for service nginx was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating compose_nginx_nginx_1 ... done
[root@192 compose_nginx]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
compose_nginx_nginx   latest              64a6a18722f0        45 seconds ago      672MB
guyton/centos6        latest              5f3e1df89d22        15 months ago       228MB
[root@192 compose_nginx]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND             CREATED              STATUS              PORTS                                         NAMES
30d2416ae0eb        compose_nginx_nginx   "/run.sh"           About a minute ago   Up About a minute   0.0.0.0:1216->80/tcp, 0.0.0.0:1217->443/tcp   compose_nginx_nginx_1

//使用docker-compose編排之後會生產鏡像文件,和容器
  • 檢測容器服務

 

 

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