docker-compose 的使用及參數(shù)

一、docker-compose 介紹

  1. docker-compose是一個容器編排工具,單機版

  2. 有時候有一組服務他們有一些依賴關系,或者需要通信,需要同時部署(eg:web服務器與數(shù)據(jù)庫),此時docker-compose可以簡單的實現(xiàn)

  3. 且docker-compose會創(chuàng)建一個網(wǎng)絡,從而在一個services中的容器,他們是在同一個子網(wǎng)的

  4. 指定一個yml文件作為docker-compose的配置文件來啟動

 docker-compose -f docker-compose-dev.yml up

二、docker-compose 使用

  1. 模板文件 docker-compose.yml
version: "3"
# 服務 里面包含了多個容器
services:
# 單個service(容器的配置)
  webapp:
# 鏡像名
    image: imageName
    # 共享內(nèi)存的大小
    shm_size: 1gb
    #卷掛載
    volumes:
      - /var/www/project:/cached
    # 最大文件限制數(shù),主要是程序崩潰后會生成可調(diào)試文件core.2131 會占用內(nèi)存,不啟用即可
    ulimits:
      core: 0
      nofile:
        soft: 1024
        hard: 1024
    # 環(huán)境變量文件
    env_file:
      - .env
    # 環(huán)境變量設置
    environment:
      RACK_ENV: development
      SHOW: 'true'
  1. 指定yml配置文件名
docker-compose -f docker-compose-dev.yml up

二、 docker-compose 參數(shù)詳解:

  1. 所使用的鏡像名
image: image_name
  1. 文件掛載文件、目錄映射 —— 注意:linux下vim修改文件wq后是一個新文件,也就是使用文件掛載,vim修改文件無法更新docker容器內(nèi)的文件,所以這種(平時測試代碼)可以選擇目錄掛載
volumes:
  - /var/www/project:/cached # 目錄掛載
  - /var/www/u2.txt:/home/u2.txt # 文件掛載

掛載點 :

  1. 如果:掛載了父目錄 /app 。里面有個子目錄 /app/caches,然后又對子目錄/app/caches掛載映射了其他目錄,那么原來父目錄的/app/caches會被覆蓋為新的掛載的目錄
  2. 比如先掛載了一個目錄/root/atom-node1(atom-node1下面有個caches子目錄)作為/app目錄
  3. 然后又掛載了/app/caches 目錄。這時候/tmp就覆蓋了原來的/root/atom-node1/caches目錄了
# 比如先掛載了一個目錄/root/atom-node1(atom-node1下面有個caches子目錄)作為/app目錄,
# 然后又掛載了/app/caches 目錄。這時候/tmp就覆蓋了原來的/root/atom-node1/caches目錄了
docker run -v /root/atom-node1:/app -it  -v /tmp:/app/caches  oc-runner bash

  1. 端口映射,把docker內(nèi)部的端口暴露出來
ports: 
  - 8088:8088
  1. 重啟操作
restart: "no"
restart: always
restart: on-failure
restart: unless-stopped
  1. 容器名稱
container_name: "test2"
  1. 環(huán)境變量文件
env_file:
  - .env
  • .env的內(nèi)容可以如下, 格式是name=value的形式,#表示注釋
# Set Rails/Rack environment
RACK_ENV=development
  1. 環(huán)境變量 —— 有時候需要自定義一些環(huán)境變量
environment:
  RACK_ENV: development
  SHOW: 'true'
  SESSION_SECRET:
  1. external_links,鏈接其他的容器服務 (CONTAINER:ALIAS).
external_links:
  - redis_1
  - project_db_1:mysql
  - project_db_1:postgresql
  1. ulimit 限制,限制生成可調(diào)試文件
 # 最大文件限制數(shù),主要是程序崩潰后會生成可調(diào)試文件core.2131 會占用內(nèi)存,不啟用即可
  ulimits:
      core: 0
      nofile:
        soft: 1024
        hard: 1024
  1. shm_size 共享內(nèi)存,這個會限制某些應用(eg. 谷歌瀏覽器)的使用內(nèi)存,從而可能導致崩潰
shm_size: 1gb
  1. command 啟動后的命令,這個會直接覆蓋掉默認的 dockerfile定義的command
command: bundle exec thin -p 3000
  1. depends_on 由于啟動順序是隨機的,所以如果有依賴關系的話,需要使用這個
version: "3.7"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres
  1. entrypoint 容器啟動的入口點:docker-compose這里定義的話。會覆蓋原本docker的image的默認的entrypoint
# 覆蓋Dockerfile文件里面的:ENTRYPOINT command param1 param2
entrypoint : /code/entrypoint.sh
  1. command 容器的啟動命令:docker-compose 這里定義的話,會覆蓋docker image里面的CMD 命令
# 覆蓋Dockerfile里面的:CMD ./entrypoint.py start
command: bundle exec thin -p 3000
  • 執(zhí)行多行命令的方式:使用 bash -c "command1 && command2"
command: bash -c  "ls && pwd && ./start.sh"

三、docker-compose 坑 之 不支持 shell command 擴展

  1. 本來想在docker-compose.yml中 使用shell動態(tài)來映射目錄【實際并不支持】:
volumes: 
  - /var/lib/docker/containers/$(docker inspect --format="{{.Id}}" atom-node1_oc-runner_1):/var/log/atom-node1
  1. issue:https://github.com/docker/compose/issues/4081

  1. docker-compose 參數(shù) 官方文檔
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容