初學 Docker 時,很常發生在不知道 docker-compose.yml
該如何撰寫,且官方網站又沒有提供範例參考,僅僅丟下一行 docker run
指令,ex:Redis Container
接下來將會示範該如何拆解 docker run
指令,並撰寫 docker-compose.yml
$ docker run -v ./redis.conf:/usr/local/etc/redis/redis.conf --name myredis redis redis-server /usr/local/etc/redis/redis.conf
首先每一個 docker-compose.yml
最重要的內容就是選擇使用 docker-compose 的版本號
version: "3" # docker-compose 版本號
services: # 開始撰寫 container 服務
redis: # 可以隨意命名,通常以有意義的字串命名
image: redis:5.0.5-alpine # 服務容器,若無指定版號表示使用 latest 版本, alpine 容器佔用空間較小,通常建議使用
接著開始拆解 docker 指令,並轉換至 docker-compose.yml
。
-v
表示掛載,並且使用「:」分隔容器內外的路徑。## 該範例表示機器當前路徑內的「redis.conf」
## 掛載至容器內的「/usr/local/etc/redis/redis.conf」
-v ./redis.conf:/usr/local/etc/redis/redis.conf
看看 docker-compose.yml
該如何繼續延伸:
version: "3" # docker-compose 版本號
services: # 開始撰寫 container 服務
redis: # 可以隨意命名,通常以有意義的字串命名
image: redis:5.0.5-alpine # 服務容器,若無指定版號表示使用 latest 版本, alpine 容器佔用空間較小,通常建議使用
volumes: # 掛載的撰寫方式,如果有多組不同路徑掛載,只需要在新增幾行條件即可。
- ./redis.conf:/usr/local/etc/redis/redis.conf
--name myredis
看看 docker-compose.yml
該如何繼續延伸:
version: "3" # docker-compose 版本號
services: # 開始撰寫 container 服務
redis: # 可以隨意命名,通常以有意義的字串命名
image: redis:5.0.5-alpine # 服務容器,若無指定版號表示使用 latest 版本, alpine 容器佔用空間較小,通常建議使用
volumes: # 掛載的撰寫方式,如果有多組不同路徑掛載,只需要在新增幾行條件即可。
- ./redis.conf:/usr/local/etc/redis/redis.conf
container_name: myredis # 指容器名稱,這裡比較不同的是指令使用「--name」,但在yml應該使用「container_name」
最後剩下一個指令要進行拆解
## 這一行是指當容器啟動後,該執行的動作
## 表示容器啟動後還需要跑起redis,才算完成。
## 這邊的 redis.conf 即剛剛掛載進入的redis.conf
## 可以先行編輯完內容在掛載。
redis-server /usr/local/etc/redis/redis.conf
看看 docker-compose.yml
該如何繼續延伸:
version: "3" # docker-compose 版本號
services: # 開始撰寫 container 服務
redis: # 可以隨意命名,通常以有意義的字串命名
image: redis:5.0.5-alpine # 服務容器,若無指定版號表示使用 latest 版本, alpine 容器佔用空間較小,通常建議使用
volumes: # 掛載的撰寫方式,如果有多組不同路徑掛載,只需要在新增幾行條件即可。
- ./redis.conf:/usr/local/etc/redis/redis.conf
container_name: myredis # 指容器名稱,這裡比較不同的是指令使用「--name」,但在yml應該使用「container_name」
command: redis-server /usr/local/etc/redis/redis.conf # command 表示啟動容器後預備執行的動作
另外有時會看見以下範例
$ docker run -e "ENV=develop" redis
docker-compose.yml
範例。version: "3" # docker-compose 版本號
services: # 開始撰寫 container 服務
redis: # 可以隨意命名,通常以有意義的字串命名
image: redis:5.0.5-alpine # 服務容器,若無指定版號表示使用 latest 版本, alpine 容器佔用空間較小,通常建議使用
volumes: # 掛載的撰寫方式,如果有多組不同路徑掛載,只需要在新增幾行條件即可。
- ./redis.conf:/usr/local/etc/redis/redis.conf
container_name: myredis # 指容器名稱,這裡比較不同的是指令使用「--name」,但在yml應該使用「container_name」
command: redis-server /usr/local/etc/redis/redis.conf # command 表示啟動容器後預備執行的動作
environment: # 提供參數至容器內部,docker 指令是使用「-e 或者 --env」,但在yml應該使用「environment」
- ENV=develop
以上就完成了 docker run
指令的拆解了,明天會在示範該如何建制自己的 image 。