1. 程式人生 > 其它 >十一、Docker入門系列--Docker-Compose模板命令

十一、Docker入門系列--Docker-Compose模板命令

十一、Docker入門系列--Docker-Compose模板命令

一、Docker入門系列--Docker 簡介
二、Docker入門系列--Docker安裝
三、Docker入門系列--Docker常用命令
四、Docker入門系列--Docker映象
五、Docker入門系列--Docker容器資料卷
六、Docker入門系列--DockerFlie解析
七、Docker入門系列--使用DockerFlie自定義Tomcat映象
八、Docker入門系列--Docker常用安裝
九、Docker入門系列--本地映象釋出到阿里雲
十、Docker入門系列--Docker-Compose簡介和安裝
十一、Docker入門系列--Docker-Compose模板命令


十二、Docker入門系列--Docker-Compose常用命令
十三、Docker入門系列--Portainer視覺化Docker
十四、Docker入門系列--Docker搭建部署SpringCloud微服務專案Demo


docker-compose.yml檔案模版介紹

模板檔案是使用 Compose 的核心,涉及到的指令關鍵字也比較多。預設的模板檔名稱為 docker-compose.yml,格式為 YAML 格式。

version: "3"

services:
  webapp:
    image: mysql
    ports:
      - "80:80"
    volumes:
      - "/data"

YAML檔案中的image代表使用Docker倉庫中已經存在的映象,我們之前使用都需要先構建一個映象,然後在檔案裡面指定這個映象才可以執行。

這樣比較麻煩,有一個命令比較方便

Build

表示:通過Docker-compose在啟動容器之前根據dockerfile構建映象,然後根據映象啟動容器

version: '3'
services:

  webapp:
    build: ./dir

使用 context 指令指定 Dockerfile 所在資料夾的路徑

使用 dockerfile 指令指定 Dockerfile 檔名,如果不指定檔名預設就是尋找Dockerfile

command

覆蓋容器啟動後預設執行的命令

command: echo "hello world"

container_name

指定容器名稱。預設將會使用 專案名稱_服務名稱_序號 這樣的格式

container_name: mysqltest

不推薦使用

depends_on

解決容器的依賴、啟動先後的問題。以下例子中會先啟動 mysql再啟動 tomcat

version: '3'

services:
  web:
    build: ./
    depends_on:
      - mysql
      - tomcat

  tomcat:
    image: tomcat01

  mysql:
    image: mysql01

web服務會等待mysql、tomcat服務啟動的差不多了再啟動,不會等到被依賴服務完全啟動再啟動

environment

設定環境變數。可以使用陣列或字典兩種格式

env_file

跟environment作用類似,也是設定環境變數,不過這個是指定檔案的形式

env_file: .env

env_file:
  - ./common.env  #檔案的路徑
  - ./apps/web.env
  - /opt/secrets.env

相比environment把環境比阿里直接寫在yaml中安全一點

expose

暴露埠

本來在Dockerfile中暴露埠,這個命令意思可以不用在Dockerfile中填寫埠,一般不用

image

指定為映象名稱或映象 ID。如果映象在本地不存在,Compose 將會嘗試拉取這個映象,相當於docker run images(映象名)

networks

用來指定啟動的容器使用的網橋(網路),相當於docker run --network

每個容器指定同一個網橋,那麼只要進入一個容器的內部,使用另外一個容器的ip就可以訪問到

docker network ls #檢視Docker中的網橋

檢視網橋的詳細資訊

ports

暴露宿主埠:容器埠的資訊,相當於docker run -p

volumes

暴露宿主路徑:容器路徑的資訊,相當於docker run -v

restart

指定容器退出後的重啟策略為始終重啟。該命令對保持服務始終執行十分有效,在生產環境中推薦配置為 always 或者 unless-stopped

相當於docker run --restart=always

總結

掌握以上命令之後,如果需要在檔案中跑一個es服務,自己寫命令可能一點頭緒都沒有,可以按照這種執行命令改編

docker run -p 6379:6379 -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf  -d redis redis-server /usr/local/etc/redis/redis.conf --appendonly yes

改編之後YAML檔案

redis:
   image: redis:5.6
   ports: 
    -3306:3306
   volumes: 
    - /mydata/redis/data:/data
    - /mydata/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf
   environment:
    - /usr/local/etc/redis/redis.conf --appendonly yes