Docker-compose(創建容器)


Docker-compose(創建容器)

本文原始地址:https://sitoi.cn/posts/23955.html

樣例

version: "2"

services:
  spark-dashboard:
    build:
      context: .
    container_name: spark-dashboard
    image: docker.io/sitoi/spark-dashboard
    environment:
      - SPARK_TYPE=master
    ports:
      - 5000:5000
  redis:
    image: docker.io/redis:4
    ports:
      - '6379:6379'
    volumes:
      - ./db/redis:/data
    command: >
      --requirepass password
  neo4j:
    image: docker.io/neo4j:3.3
    ports:
     - "7474:7474"
     - "7687:7687"
    volumes:
    - ./db/neo4j:/data/

docker-compose 命令

大多數 Compose 命令都是運行於一個或多個服務的,如果服務沒有指定,該命令將會應用到所有服務,
如果要獲得所有可用信息,使用命令:docker-compose [COMMAND] --help,下面是命令(COMMAND)的說明:

build

創建或者再建服務

服務被創建后會標記為 project_service (比如 composetest_db),
如果改變了一個服務的 Dockerfile 或者構建目錄的內容,可以使用 docker-compose build 來重建它

help

顯示命令的幫助和使用信息

kill

通過發送 SIGKILL 的信號強制停止運行的容器,這個信號可以選擇性的通過,比如:

docker-compose kill -s SIGKINT

logs

顯示服務的日志輸出

port

為端口綁定輸出公共信息

ps

顯示容器

pull

拉取服務鏡像

rm

刪除停止的容器

run

在服務上運行一個一次性命令,比如:

docker-compose run web python manage.py shell

scale

設置為一個服務啟動的容器數量,數量是以這樣的參數形式指定的:service=num,比如:

docker-compose scale web=2 worker=3

start

啟動已經存在的容器作為一個服務

stop

停止運行的容器而不刪除它們,它們可以使用命令docker-compose start重新啟動起來

up

為一個服務構建、創建、啟動、附加到容器

連接的服務會被啟動,除非它們已經在運行了

默認情況下,docker-compose up 會集中每個容器的輸出,當存在時,所有的容器會停止,運行 docker-compose up -d 會在后台啟動容器並使它們運行

默認情況下,如果服務存在容器的話,docker-compose up 會停止並再創建它們(使用了 volumes-from 會保留已掛載的卷),
如果不想使容器停止並再創建的話,使用docker-compose up --no-recreate,如果有需要的話,這會啟動任何停止的容器

選項

–verbose

顯示更多輸出

–version

顯示版本號並退出

-f,–file FILE

指定一個可選的 Compose yaml 文件(默認:docker-compose.yml

-p,–project-name NAME

指定可選的項目名稱(默認:當前目錄名稱)

docker-compose.yaml 文件說明

每一個定義在 docker-compose.yml 中的服務必須明確指定一個 image 或者 build 選項,
這與 docker run 命令行中輸入的是對應相同的,對於docker run
Dockerfile 文件中指定的選項(比如 CMDEXPOSEVOLUMEENV)是默認的,因此不必在 docker-compose.yml 中再指定一次

image

標明 image 的 ID,這個 image ID 可以是本地也可以是遠程的,如果本地不存在,Compose 會嘗試去 pull 下來

image: ubuntu
image: orchardup/postgresql
image: a4bc65fd

build

該參數指定 Dockerfile 文件的路徑,該目錄也是發送到守護進程的構建環境(這句有點),Compose 將會以一個已存在的名稱進行構建並標記,並隨后使用這個 image

build: /path/to/build/dir

command

覆蓋容器啟動后默認執行的命令

command: bundle exec thin -p 3000

連接到其他服務中的容器,可以指定服務名稱和這個鏈接的別名,或者只指定服務名稱

links:
 - db
 - db:database
 - redis

此時,在容器內部,會在 /etc/hosts 文件中用別名創建一個條目,就像這樣:

172.17.2.186  db
172.17.2.186  database
172.17.2.186  redis

環境變量也會被創建,關於環境變量的參數,會在后面講到

連接到在這個 docker-compose.yml 文件或者 Compose 外部啟動的容器,特別是對於提供共享和公共服務的容器。
在指定容器名稱和別名時,external_links 遵循着和 links 相同的語義用法

external_links:
 - redis_1
 - project_db_1:mysql
 - project_db_1:postgresql

ports

暴露端口信息。

使用宿主:容器 (HOST:CONTAINER)格式或者僅僅指定容器的端口(宿主將會隨機選擇端口)都可以。

ports:
 - "3000"
 - "8000:8000"
 - "49100:22"
 - "127.0.0.1:8001:8001"

注:當使用 HOST:CONTAINER 格式來映射端口時,如果你使用的容器端口小於 60 你可能會得到錯誤得結果,
因為 YAML 將會解析 xx:yy 這種數字格式為 60 進制。所以建議采用字符串格式。

expose

暴露端口而不必向主機發布它們,而只是會向鏈接的服務 linked service 提供,只有內部端口可以被指定

expose:
 - "3000"
 - "8000"

volumes

掛載路徑最為卷,可以選擇性的指定一個主機上的路徑(主機:容器),或是一種可使用的模式(主機:容器:ro

volumes:
 - /var/lib/mysql
 - cache/:/tmp/cache
 - ~/configs:/etc/configs/:ro

volumes_from

從另一個服務或容器掛載它的所有卷。

volumes_from:
 - service_name
 - container_name

environment

加入環境變量,可以使用數組或者字典,只有一個 key 的環境變量可以在運行 Compose 的機器上找到對應的值,這有助於加密的或者特殊主機的值

environment:
  RACK_ENV: development
  SESSION_SECRET:
environments:
  - RACK_ENV=development
  - SESSION_SECRET

env_file

從文件中獲取環境變量,可以為單獨的文件路徑或列表。

如果通過 docker-compose -f FILE 指定了模板文件,則 env_file 中路徑會基於模板文件路徑。

如果有變量名稱與 environment 指令沖突,則以后者為准。

env_file:
  - .env

RACK_ENV: development

net

網絡模式,可以在docker客戶端--net參數中指定這些值

net: "bridge"
net: "none"
net: "container:[name or id]"
net: "host"

dns

自定義DNS服務,可以是一個單獨的值或者一張列表

dns: 8.8.8.8
dns:
  - 8.8.8.8
  - 9.9.9.9

cap_add,cap_drop

加入或者去掉容器能力,查看man 7 capabilities 可以有一張完整的列表

cap_add:
  - ALL

cap_drop:
  - NET_ADMIN
  - SYS_ADMIN

自定義DNS搜索范圍,可以是單獨的值或者一張列表

dns_search: example.com
dns_search:
  - dc1.example.com
  - dc2.example.com

working_dir,entrypoint,user,hostname,domainname,mem_limit,privileged,restart,stdin_open,tty,cpu_shares

上述的每一個都只是一個單獨的值,和docker run中對應的參數是一樣的

cpu_shares: 73

working_dir: /code
entrypoint: /code/entrypoint.sh
user: postgresql

hostname: foo
domainname: foo.com

mem_limit: 1000000000
privileged: true

restart: always

stdin_open: true
tty: true

Compose 環境變量說明

環境變量已經不再是用來連接服務的推薦方法了,相反,應該使用鏈接名稱(默認情況下是鏈接服務的名稱)作為主機名稱來連接,這可以查看 docker-compose.yaml 的更多細節
Compose 使用 Docker links 來暴露服務的容器給其他的。每一個鏈接的容器都使用了一組環境變量,這每一組環境變量都是以容器名稱的大寫字母開頭的
要查看服務可用的環境變量,運行 docker-compose run SERVICE env

name_PORT

完整URL,如:

DB_PORT=tcp//172.17.0.5:5432

name_PORT_num_protocol

完整URL,如:

DB_PORT_5432_TCP=tcp://172.17.0.5:5432

name_PORT_num_protocol_ADDR

容器的IP地址,如:

DB_PORT_5432_TCP_ADDR=172.17.0.5

name_PORT_num_protocol_PORT

暴露的端口號,如:

DB_PORT_5432_TCP_PORT=5432

name_PORT_num_protocol_PROTO

協議(tcp或者udp),如:

DB_PORT_5432_TCP_PROTO=tcp

name_NAME

完全合格的容器名稱,如:

DB_1_NAME=/myapp_web_1/myapp_db_1


免責聲明!

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



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