docker compose安裝及使用
- 什麼是docker compose
- 安裝docker-compose
-
-
- 線上二進制線上安裝
- 離線二進制安裝
- 如何解除安裝
- 簡單的使用介紹
- 實戰多容器啟動和關聯
- 普通方式實作多容器啟動和關聯
- docker compose方式實作多容器啟動和關聯
-
什麼是docker compose
答:平時我們都是一次啟動一個容器,可是如果需要一次啟動多個容器作為一個整體控制啟動和停止,各個容器間也有依賴,這時候就到 docker compose表演了,通過docker-compose.yml建立一個服務包含多個需要啟動的容器包括容器間的依賴都在檔案中定義好後啟動就可以了
前提:需要先安裝docker參照之前文章安裝即可
安裝docker-compose
線上二進制線上安裝
-
二進制檔案下載下傳位址
找都自己想要的版本後複制相關指令即可下載下傳
curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
如下圖:

- 檢視是否成功安裝
docker-compose version
docker三劍客之docker compose什麼是docker compose安裝docker-compose
離線二進制安裝
-
如果用的内網這時我們需要到外網下載下傳好相關檔案再繼續安裝,這裡
已下載下傳好一個檔案,放在百度雲上需要的直接下載下傳即可
連結:https://pan.baidu.com/s/1dbDGyHh_YsLWg65qR6FLfA
提取碼:lb83
- 下載下傳好後将docker-compose-Linux-x86_64,檔案名重命名為docker-compose,并給于執行權限移動到 /usr/local/bin/目錄下即可完成安裝
mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose &&chmod +x /usr/local/bin/docker-compose
如何解除安裝
- 通過二進制安裝的隻需要删除對應目錄下的指令即可
rm -rf /usr/local/bin/docker-compose
簡單的使用介紹
- 樣例檔案docker-compose.yml,下面為一個service包含兩個服務,web和redis,web依賴redis,啟動時會先啟動redis再啟動web
version: '3'
services:
web:
image:"tomcat:latest"
depends_on:
- redis
ports:
-"8080:8080"
redis:
image:"redis:alpine"
- 相關指令
docker-compose up -d #在docker-compose.yml所在目錄執行,将在背景啟動容器
docker-compose down #在docker-compose.yml所在目錄執行,将停止相關容器
docker-compose restart #在docker-compose.yml所在目錄執行 重新開機服務
-
docker-compose.yml檔案内容同樣支援挂載,網絡設定等其他屬性,service中每個服務屬性就和運作單個容器設定是一樣的,不過我們呢通過docker-compose,可以指定啟動順序,作為整體來管理
再給一個樣例:
version: '2'
services:
nginx001:
image: bolingcavalrynginx:0.0.1
links:
- tomcat001:t01
- tomcat002:t02
ports:
- "80:80"
restart: always
tomcat001:
image: bolingcavalrytomcat:0.0.1
ports:
- "8081:8080"
restart: always
tomcat002:
image: bolingcavalrytomcat:0.0.1
ports:
- "8082:8080"
restart: always
說明:
links:
- tomcat001:t01
- tomcat002:t02
表示和tomcat001,tomcat002服務建立連接配接,t01 ,t02隻是一個别名
而nginx中的配置是這樣:
upstream tomcat_client {
server t01:8080 weight=1;
server t02:8080 weight=1;
}
這裡面的t01,t02和link參數中的t01,t02對應,這樣nginx在用t01,t02做為域名做請求轉發的時候,請求就能到tomcat001和tomcat002上了。
實戰多容器啟動和關聯
- 這裡将通過一個nginx轉發到兩個tomcat上實作負載均衡
普通方式實作多容器啟動和關聯
- 建立檔案夾,建立Dokerfile檔案 Dokerfile檔案内容如下:
docker三劍客之docker compose什麼是docker compose安裝docker-compose
#基礎鏡像
FROM nginx:latest
#定義工作目錄
ENV WORK_PATH /etc/nginx
#定義conf檔案名
ENV CONF_FILE_NAME nginx.conf
#删除原有配置檔案
RUN rm $WORK_PATH/$CONF_FILE_NAME
#複制新的配置檔案
COPY ./$CONF_FILE_NAME $WORK_PATH/
#給shell檔案賦讀權限
RUN chmod a+r $WORK_PATH/$CONF_FILE_NAME
解釋:/etc/nginx/nginx.conf檔案為nginx鏡像預設檔案存儲位置,上述代碼就是在更換為我們的配置檔案
- 建立nginx.conf檔案内容如下:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
#include /etc/nginx/conf.d/*.conf;
upstream tomcat_server {
server t01:8080 weight=1;
server t02:8080 weight=1;
}
upstream tomcat_server1 {
server t01:8080 weight=1;
server t02:8080 weight=1;
}
server {
server_name "tomcat_server";
listen 80;
listen [::]:80 ipv6only=on;
location / {
proxy_pass http://tomcat_server;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
server_name "tomcat_server1";
listen 8090;
listen [::]:8090 ipv6only=on;
location / {
proxy_pass http://tomcat_server1;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
解釋:上述代碼為我們的nginx.conf配置檔案内容,主要讓nginx監聽80,8090,端口,然後轉發t01,t02的8080端口也就是兩個tomcat對應的容器端口
建立完後檔案夾内容而下:
- 建構鏡像我們自己的nginx鏡像
docker build -t mynginx:2.3.1 .
- 啟動兩個tomcat容器,如下,
docker三劍客之docker compose什麼是docker compose安裝docker-compose docker三劍客之docker compose什麼是docker compose安裝docker-compose - 檢視剛才啟動的容器
docker三劍客之docker compose什麼是docker compose安裝docker-compose - 啟動nginx
-
docker run --name=ngx001 --link=tomcat001:t01 --link=tomcat002:t02 -p 80:80 -p 8090:8090 -idt mynginx:2.3.1
解釋:這裡啟動用我們建立的鏡像mynginx:2.3.1`,–link參數分别對應我們nginx.conf中的t01和t02,tomcat001和tomcat002就是之前啟動的容器名,然後映射了兩組端口,80和8090也是對應nginx.conf中監聽端口,這樣就可以通過這兩個端口通路了docker三劍客之docker compose什麼是docker compose安裝docker-compose docker三劍客之docker compose什麼是docker compose安裝docker-compose - 通路虛拟機位址:預設是80端口
- 再試下:8090端口
docker三劍客之docker compose什麼是docker compose安裝docker-compose 這樣就完成了我們測試下停tomcat001容器docker三劍客之docker compose什麼是docker compose安裝docker-compose 通路沒有問題:docker三劍客之docker compose什麼是docker compose安裝docker-compose 再次停tomcat002容器:通路出錯負載成功docker三劍客之docker compose什麼是docker compose安裝docker-compose docker三劍客之docker compose什麼是docker compose安裝docker-compose
docker compose方式實作多容器啟動和關聯
- 首先我們停掉剛才運作的三個容器
docker stop tomcat001 tomcat002 ngx001;docker rm tomcat001 tomcat002 ngx001
docker三劍客之docker compose什麼是docker compose安裝docker-compose - 編輯ocker-compose.yml檔案内容如下:
version: '3'
services:
nginx001:
image: mynginx:2.3.1
links:
- tomcat001:t01
- tomcat002:t02
ports:
- 8090:8090
- 80:80
restart: always
tomcat001:
image: tomcat
ports:
- "8081:8080"
restart: always
tomcat002:
image: tomcat
ports:
- "8082:8080"
restart: always
然後在docker-compose.yml檔案所在的目錄,執行如下指令:
docker-compose up -d
- 檢視是否生效通路頁面像之前那樣,成功了
docker三劍客之docker compose什麼是docker compose安裝docker-compose - 停止指令,在docker-compose.yml檔案所在的目錄執行
-
docker-compose down
docker三劍客之docker compose什麼是docker compose安裝docker-compose