1 用docker compose部署服務
- 需求:假如現在我們手裡有很多容器,每個容器對應每個服務,有nginx容器,redis容器,mysql容器等。現在我們需要批量化的去管理,批量啟動,停止,重新開機等操作!當然你會說用shell,可是如何不用shell來完成需求呢,那就需要用到接下來介紹的docker compose了。
- docker compose可以友善我們快捷高效地管理容器的啟動、停止、重新開機等操作,它類似于linux下的shell腳本,基于yaml文法,在該檔案裡我們可以描述應用的架構,比如用什麼鏡像、資料卷、網絡模式、監聽端口等資訊。我們可以在一個compose檔案中定義一個多容器的應用(比如jumpserver),然後通過該compose來啟動這個應用。
- 安裝compose
<code>[root@chy ~]</code><code># curl -L https://github.com/docker/compose/releases/download/1.17.0-rc1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose //從官方下載下傳一個最新的compose</code>
<code>[root@chy ~]</code><code># chmod 755 /usr/local/bin/docker-compose //将權限設定為755</code>
<code>[root@chy ~]</code><code># docker-compose version</code>
<code>docker-compose version 1.17.0-rc1, build a0f95af</code>
<code>docker-py version: 2.5.1</code>
<code>CPython version: 2.7.13</code>
<code>OpenSSL version: OpenSSL 1.0.1t 3 May 2016</code>
<code>Compose區分Version 1和Version 2(Compose 1.6.0+,Docker Engine 1.10.0+)。</code>
<code>Version 2支援更多的指令。Version 1沒有聲明版本預設是</code><code>"version 1"</code><code>。Version 1将來會被棄用。</code>
定義一個docker compose 管理器
<code>[root@chy ~]</code><code># docker ps //檢視容器的名稱,後面會用到</code>
<code>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES</code>
<code>f98ab40c32a6 centos </code><code>"bash"</code> <code>10 seconds ago Up 4 seconds heuristic_torvalds</code>
<code>c06361830af1 centos7_1 </code><code>"/bin/sh -c '/usr/..."</code> <code>About a minute ago Up About a minute 0.0.0.0:8080->80</code><code>/tcp</code> <code>root_app1_1</code>
<code>726da06d12c8 centos7_1 </code><code>"tail -f /etc/passwd"</code> <code>21 minutes ago Up 20 minutes 80</code><code>/tcp</code> <code>root_app2_1</code>
<code>1101ab2618a4 centos7_1 </code><code>"/bin/sh -c '/usr/..."</code> <code>18 hours ago Up 18 hours 0.0.0.0:81->80</code><code>/tcp</code> <code>hopeful_pasteur</code>
<code>[root@chy ~]</code><code># vim docker-compose.yml</code>
<code>version: </code><code>"2"</code>
<code>services:</code>
<code> </code><code>app1:</code>
<code> </code><code>image: centos_nginx</code>
<code> </code><code>ports:</code>
<code> </code><code>- </code><code>"8080:80"</code>
<code> </code><code>networks:</code>
<code> </code><code>- </code><code>"net1"</code>
<code> </code><code>volumes:</code>
<code> </code><code>- </code><code>/data/</code><code>:</code><code>/data</code>
<code> </code><code>app2:</code>
<code> </code><code>image: centos_with_nettool</code>
<code> </code><code>- </code><code>"net2"</code>
<code> </code><code>- </code><code>/data/</code><code>:</code><code>/data1</code>
<code> </code><code>entrypoint: </code><code>tail</code> <code>-f </code><code>/etc/passwd</code>
<code>networks:</code>
<code> </code><code>net1:</code>
<code> </code><code>driver: bridge</code>
<code> </code><code>net2:</code>
<code>參數詳解:</code>
<code>version: </code><code>"2"</code> <code>//</code><code>版本為2版本</code>
<code>services: </code><code>//</code><code>相關容器或者鏡像操作</code>
<code> </code><code>app1: </code><code>//app1</code><code>對應的是容器1的資訊,這裡需要注意是要運作的容器的名稱</code>
<code> </code><code>image: centos7_1 </code><code>///images</code><code>的名字</code>
<code> </code><code>ports: </code><code>//</code><code>映射端口</code>
<code> </code><code>- </code><code>"8080:80"</code> <code>//</code><code>映射主控端8080對應容器的80端口</code>
<code> </code><code>networks: </code><code>//</code><code>網絡(預設是bridge模式)</code>
<code> </code><code>- </code><code>"net1"</code> <code>//</code><code>下面定義的net1(要是需要pipwork怎麼辦?官方不支援,就隻能在寫shell然後在 driver後面 定義none)</code>
<code> </code><code>volumes: </code><code>//-v</code><code>的參數指定</code>
<code> </code><code>- </code><code>/data/</code><code>:</code><code>/data</code> <code>//</code><code>目錄映射</code>
<code> </code><code>image: centos</code>
<code> </code><code>entrypoint: </code><code>tail</code> <code>-f </code><code>/etc/passwd</code> <code>///</code><code>還是老問題BUG 為了不讓執行後關閉,我們使用這條指令</code>
<code>networks: </code><code>//</code><code>這裡就是如上net1定義的網絡模式</code>
<code>[root@chy ~]</code><code># docker-compose up -d </code>
<code>Recreating root_app2_1 ... </code>
<code>Recreating root_app2_1</code>
<code>Recreating root_app2_1 ... </code><code>done</code>
<code>[root@chy ~]</code><code># docker ps</code>
<code>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES</code>
<code>9646c0a40ae1 centos </code><code>"tail -f /etc/passwd"</code> <code>7 minutes ago Up 7 minutes root_app2_1</code>
<code>f98ab40c32a6 centos </code><code>"bash"</code> <code>8 minutes ago Up 7 minutes heuristic_torvalds</code>
<code>c06361830af1 centos7_1 </code><code>"/bin/sh -c '/usr/..."</code> <code>9 minutes ago Up 9 minutes 0.0.0.0:8080->80</code><code>/tcp</code> <code>root_app1_1</code>
<code>1101ab2618a4 centos7_1 </code><code>"/bin/sh -c '/usr/..."</code> <code>18 hours ago Up 18 hours 0.0.0.0:81->80</code><code>/tcp</code> <code>hopeful_pasteur</code>
<code>[root@chy ~]</code><code># docker-compose --help //有不會的指令及時檢視指令幫助</code>

本文轉自我不是瘦子51CTO部落格,原文連結:http://blog.51cto.com/chy940405/1982876,如需轉載請自行聯系原作者