原文:Docker-compose基礎知識梳理 - 9ong
docker-compose
Compose 是用于定義和運行多容器 Docker 應用程序的工具。通過 Compose,您可以使用 YML 文件來配置應用程序需要的所有服務。然后,使用一個命令,就可以從 YML 文件配置中創建并啟動所有服務。
基本步驟
Compose 使用的三個步驟:
- 使用 Dockerfile 定義應用程序的環境。
- 使用 docker-compose.yml 定義構成應用程序的服務,這樣它們可以在隔離環境中一起運行。
- 最后,執行 docker-compose up 命令來啟動并運行整個應用程序。
docker-compose.yml配置范例
version: "3.1"
services:
webserver:
image: nginx:alpine
container_name: jm-php7-2-webserver
working_dir: /application
volumes:
- /var/www/html:/application
- /var/log/nginx:/var/log/nginx
- /var/www/docker/nginx+php/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
ports:
- "8081:80"
php-fpm:
build: /var/www/docker/nginx+php/php7.2
container_name: jm-php7-2-php-fpm
working_dir: /application
volumes:
- /var/www/html:/application
- /var/www/docker/nginx+php/php7.2/php-ini-overrides.ini:/etc/php/7.2/fpm/conf.d/99-overrides.ini
php-fpm服務build采用的Dockerfile:
FROM phpdockerio/php72-fpm:latest
WORKDIR "/application"
# Fix debconf warnings upon build
ARG DEBIAN_FRONTEND=noninteractive
# Install selected extensions and other stuff
RUN apt-get update \
&& apt-get -y --no-install-recommends install php7.2-mysql php-redis php7.2-gd php-yaml \
&& apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
docker-compose安裝
常用yml配置指令
-
build
指定為構建鏡像上下文路徑:
例如php-fpm 服務,指定為從上下文路徑 /var/www/docker/nginx+php/php7.2/Dockerfile 所構建的鏡像。
-
container_name
指定自定義容器名稱,而不是生成的默認名稱。
-
depends_on
設置依賴關系。
docker-compose up :以依賴性順序啟動服務。在以下示例中,先啟動 db 和 redis ,才會啟動 web。
docker-compose up SERVICE :自動包含 SERVICE 的依賴項。在以下示例中,docker-compose up web 還將創建并啟動 db 和 redis。
docker-compose stop :按依賴關系順序停止服務。在以下示例中,web 在 db 和 redis 之前停止。version: "3.7" services: web: build: . depends_on: - db - redis redis: image: redis db: image: postgres
注意:web 服務不會等待 redis db 完全啟動 之后才啟動。
-
dns
自定義 DNS 服務器,可以是單個值或列表的多個值。
-
healthcheck
用于檢測 docker 服務是否健康運行。
healthcheck: test: ["CMD", "curl", "-f", "http://localhost"] # 設置檢測程序 interval: 1m30s # 設置檢測間隔 timeout: 10s # 設置檢測超時時間 retries: 3 # 設置重試次數 start_period: 40s # 啟動后,多少秒開始啟動檢測程序
-
image
指定容器運行的鏡像。以下格式都可以:
image: redis image: ubuntu:14.04 image: tutum/influxdb image: example-registry.com:4000/postgresql image: a4bc65fd # 鏡像id
-
restart
- no:是默認的重啟策略,在任何情況下都不會重啟容器。
- always:容器總是重新啟動。
- on-failure:在容器非正常退出時(退出狀態非0),才會重啟容器。
- unless-stopped:在容器退出時總是重啟容器,但是不考慮在Docker守護進程啟動時就已經停止了的容器
restart: "no" restart: always restart: on-failure restart: unless-stopped
注:swarm 集群模式,請改用 restart_policy。
-
ulimits
覆蓋容器默認的 ulimit。
ulimits: nproc: 65535 nofile: soft: 20000 hard: 40000
-
volumes
將主機的數據卷或著文件掛載到容器里。
webserver: image: nginx:alpine container_name: jm-php7-2-webserver working_dir: /application volumes: - /var/www/html:/application - /var/log/nginx:/var/log/nginx - /var/www/docker/nginx+php/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
-
logging
服務的日志記錄配置。
driver:指定服務容器的日志記錄驅動程序,默認值為json-file。有以下三個選項
driver: "json-file" driver: "syslog" driver: "none"
僅在 json-file 驅動程序下,可以使用以下參數,限制日志得數量和大小。
logging: driver: json-file options: max-size: "200k" # 單個文件大小為200k max-file: "10" # 最多10個文件
當達到文件限制上限,會自動刪除舊得文件。
syslog 驅動程序下,可以使用 syslog-address 指定日志接收地址。
logging: driver: syslog options: syslog-address: "tcp://192.168.0.42:123"
docker-compose操作指令
docker-compose操作命令需要在配置文件docker-compose.yml所在目錄或子目錄操作才會生效。
如果需要sudo時,要注意使用sudo執行。
docker-compose --help你會看到如下這么多命令
-
build
Build or rebuild services
-
bundle
Generate a Docker bundle from the Compose file
-
config
Validate and view the Compose file
-
create
Create services
-
down
Stop and remove containers, networks, images, and volumes
-
events
Receive real time events from containers
-
exec
Execute a command in a running container
-
help
Get help on a command
-
images
List images
-
kill
Kill containers
-
logs
View output from containers
-
pause
Pause services
-
port
Print the public port for a port binding
-
ps
List containers
-
pull
Pull service images
-
push
Push service images
-
restart
Restart services
-
rm
Remove stopped containers
-
run
Run a one-off command
-
scale
Set number of containers for a service
-
start
Start services
-
stop
Stop services
-
top
Display the running processes
-
unpause
Unpause services
-
up
Create and start containers
-
version
Show the Docker-Compose version information
docker-compose常用命令
docker-compose up -d nginx 構建建啟動nignx容器
docker-compose exec nginx bash 登錄到nginx容器中
docker-compose down 刪除所有nginx容器,鏡像
docker-compose ps 顯示所有容器
docker-compose restart nginx 重新啟動nginx容器
docker-compose run --no-deps --rm php-fpm php -v 在php-fpm中不啟動關聯容器,并容器執行php -v 執行完成后刪除容器
docker-compose build nginx 構建鏡像 。
docker-compose build --no-cache nginx 不帶緩存的構建。
docker-compose logs nginx 查看nginx的日志
docker-compose logs -f nginx 查看nginx的實時日志
docker-compose config -q 驗證(docker-compose.yml)文件配置,當配置正確時,不輸出任何內容,當文件配置錯誤,輸出錯誤信息。
docker-compose events --json nginx 以json的形式輸出nginx的docker日志
docker-compose pause nginx 暫停nignx容器
docker-compose unpause nginx 恢復ningx容器
docker-compose rm nginx 刪除容器(刪除前必須關閉容器)
docker-compose stop nginx 停止nignx容器
docker-compose start nginx 啟動nignx容器