Docker-compose基础知识梳理
目录
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容器