【轉】docker-compose詳解


1 安裝:
官方:
curl -L https://github.com/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
或者使用包管理工具:
apt-get install docker-compose
2 使用場景
docker-compose用來單機上編排容器(定義和運行多個容器,使容器能互通)

Eg:前端和后端部署在一台機器上,現在直接通過編寫docker-compose文件對多個服務(可定義依賴,按順序啟動服務)同時進行啟動/停止/更新

注:

docker-compose將所管理的容器分為3層結構:project  service  container

docker-compose.yml組成一個project,project里包括多個service,每個service定義了容器運行的鏡像(或構建鏡像),網絡端口,文件掛載,參數,依賴等,每個service可包括同一個鏡像的多個容器實例。

即 project 包含 service ,service 包含 container 

3 編寫docker-compose.yml
官網地址:https://docs.docker.com/compose/compose-file/

version: '3'
services:
back:
image: backService:1.0
container_name: back
environment:
- name=tom
- DB_PATH=jdbc:sqlite:/data/ns.db
restart: always
privileged: true
ports:
- "9000:9000"
networks:
- "net"
volumes:
- "/root/k3s.kube.config:/k3s.kube.config"
- "/root/data:/data"
- "/etc/network/interfaces:/etc/network/interfaces"
front:
image: front:1.0
container_name: front
restart: always
ports:
- "10087:80"
networks:
- "net"
volumes:
- "/root/nginx.conf:/etc/nginx/nginx.conf"
networks:
net:
driver: bridge
version:指定 docker-compose.yml 文件的寫法格式

services:多個容器集合environment:環境變量配置,可以用數組或字典兩種方式

environment:
RACK_ENV: "development"
SHOW: "ture"
-------------------------
environment:
- RACK_ENV="development"
- SHOW="ture"
image:指定服務所使用的鏡像

version: '2'
services:
redis:
image: redis:alpine
expose:定義容器用到的端口(一般用來標識鏡像使用的端口,方便用ports映射)

expose:
- "3000"
- "8000"
ports:定義宿主機端口和容器端口的映射,可使用宿主機IP+宿主機端口進行訪問 宿主機端口:容器端口

ports: # 暴露端口信息 - "宿主機端口:容器暴露端口"
- "5000"
- "8081:8080"
注:僅指定容器端口時,宿主機將會隨機選擇端口 

volumes:卷掛載路徑,定義宿主機的目錄/文件和容器的目錄/文件的映射  宿主機路徑:容器路徑

volumes:
- "/var/lib/mysql"
- "hostPath:containerPath"
- "root/configs:/etc/configs"
depend_on: 規定service加載順序,例如數據庫服務需要在后台服務前運行

extra_hosts:類似於docker里的--add-host參數 配置DNS域名解析(域名和IP的映射)

extra_hosts:
- "googledns:8.8.8.8"
- "dockerhub:52.1.157.61"
相當於在容器種的/etc/hosts文件里增加

8.8.8.8 googledns
52.1.157.61 dockerhub
restart: always :配置重啟,docker每次啟動時會啟動該服務

restart: always
privileged: true :開啟特權模式

privileged: true
user: root :指定容器運行的用戶名

user: root
links:將指定容器連接到當前連接,可以設置別名,已廢棄,推薦使用networks

networks:

可參考:https://www.cnblogs.com/jsonhc/p/7823286.html

version: '3'
services:
  front:
    image: front
    container_name: front
    depends_on:
      - php
    ports:
      - "80:80"
    networks:
      - "net1"
    volumes:
      - "/www:/usr/local/nginx/html"
  back:
    image: back
    container_name:back
    expose: 
      - "9000"
    networks:
      - "net1"
    volumes:
      - "/www:/usr/local/nginx/html"

networks:
  net1:
    driver: bridge

front里可以直接用back替換IP訪問back

logging:日志服務

driver:默認json-file,可選syslog

logging:
driver: syslog
options:
syslog-address: "tcp://192.168.0.42:123"
network_mode:設置網絡模式

network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
bridge:默認,需要單獨配置ports映射主機port和服務的port,並且開啟了容器間通信

host:和宿主機共享網絡,比如service是8081端口,無需配置ports,直接可以用主機IP:8081訪問

 

cap_add cap_drop:賦予/刪除 容器某些能力

可運行 man 7 capabilities 查看所有能力

build:配置構建時,Compose 會利用它自動構建鏡像,該值可以是一個路徑,也可以是一個對象,用於指定 Dockerfile 路徑

注:如果指定build同時也指定image,那么會從build里構建,鏡像的名字和tag將取image指定的

build: .
image: webapp:tag
command:覆蓋容器啟動后默認執行的命令

command: bundle exec thin -p 3000
----------------------------------
command: [bundle,exec,thin,-p,3000]
 

4 docker-compose命令:
官網地址:https://docs.docker.com/compose/reference/overview/

注意:

以下都需要在docker-compose.yml所在目錄下執行,且名字就是默認的docker-compose.yml,否則需要加上 -f yml地址

Eg:  docker-compose -f /usr/docker/docker-compose1.yml ps

* 表示常用

* docker-compose pull:拉取服務里定義的鏡像

* docker-compose ps :列出project所有運行容器(容器名 = 目錄名_service_index  index表示容器序數,從1開始) 

Eg:

 

docker-compose build:構建/重新構建所有鏡像

當某個service的Dockerfile改變時,即鏡像發生改變需要重新生成時,如果僅僅是docker-compose.yml改變,只需要up重新啟動project即可

docker-compose start [serviceName]:啟動已存在但停止的所有service

(可選)serviceName:表示啟動某一個service

* docker-compose up -d(相當於 build + start ) :構建(容器)並啟動(容器)整個project的所有service

-d:后台進程

--scale:指定服務運行的容器個數(如果服務有對外的端口就不能指定多個容器,因為端口已經被占用)   Eg:docker-compose up -d --scale web=1 --scale redis=2

docker-compose stop [serviceName]:停止運行的service

(可選)serviceName:表示停止某一個service

docker-compose rm -f [serviceName]:刪除已停止的所有service

(可選)serviceName:表示刪除已停止某一個service(可以用docker-compose up重新構建service)

-f :刪除不在詢問

* docker-compose down -v(相當於 stop + rm ):停止並移除整個project的所有services

-v :刪除掛載卷和volunme的鏈接

* docker-compose logs [serviceName]:查看服務內所有容器日志輸出,

加上serviceName表示輸出某一個service的日志

-f:實時輸出日志

docker-compose run service command:在某個服務上運行命令

Eg:docker-compose run web ping www.baidu.com

 

* docker-compose exec [serviceName] sh:進入到某個容器

--index:2  :當服務內有多個容器時,需要指定第幾個,默認是第一個  Eg:docker-compose exec --index=2 web sh

 

docker-compose restart [serviceName]: 重啟服務

docker-compose config:驗證和查看compose文件

docker-compose images:列出所用的鏡像

docker-cpmpose scale:設置服務個數 Eg:docker-compose scale web=2 worker=3 

docker-compose pause [serviceName]:暫停服務

docker-compose unpause [serviceName]:恢復服務

常見流程:

啟動:創建docker-compose.yaml  ->  docker-compose pull  -> docker-compose up -d

更新:docker-compose down -v -> docker-compose pull -> docker-compose up -d 

 
from:https://blog.csdn.net/qq_35720307/article/details/87256684


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM