docker-compose通过一个配置文件来管理多个Docker容器。默认的模板文件是 docker-compose.yml。
定义的每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)来自动构建。(image或build只能二选一)
所有的容器通过services来定义。
允许用户通过docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
它大部分指令都跟 docker run 中的类似。
如果使用 build 指令,在 Dockerfile 中设置的选项(例如:CMD, EXPOSE, VOLUME, ENV 等) 将会自动被获取,无需在 docker-compose.yml 中再次设置。
使用Compose 基本上分为三步:
1.Dockerfile 定义应用的运行环境
2.docker-compose.yml 定义组成应用的各服务
3.docker-compose up 启动整个应用
DNMP
推荐一个docker-compose环境搭建工具
https://github.com/yeszao/dnmp
Nginx的虚拟主机文件:vhost.demo.conf
docker-compose.yml配置文件:docker-compose.yml
安装
1.下载对应操作系统版本的docker-composer
https://docs.docker.com/compose/install/
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
或
sudo curl -L https://github.com/docker/compose/releases/download/1.23.0-rc3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
2.赋予可执行权限
sudo chmod +x /usr/local/bin/docker-compose
3.如果docker-compose命令仍不可使用,做个软连接到/usr/bin目录中。
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
4.验证。查看命令版本。
[vagrant@localhost ~]$ docker-compose version
docker-compose version 1.24.0, build 0aa59064
docker-py version: 3.7.2
CPython version: 3.6.8
OpenSSL version: OpenSSL 1.1.0j 20 Nov 2018
重载配置
docker-compose up -d --force-recreate
使用
编辑docker-compose.yml文件:
vim /root/docker_compose_project/docker-compose.yml
下面是docker-compose.yml的全部内容
version: '3'
services:
cm_mysql57:
image: mysql:5.7
networks:
cm_net:
aliases:
- mysql57net
environment:
- MYSQL_ROOT_PASSWORD=root
ports:
- "3306:3306"
volumes:
- "/mnt/www:/mnt/www"
cm_phpfpm72:
image: "php:7.2-fpm"
# build:
# context: ./php/
networks:
cm_net:
aliases:
- phpfpm72net
#在nginx中可使用别名phpfpm72net访问此容器
ports:
- "9000:9000"
volumes:
- "/mnt/www:/mnt/www"
# links:
# - cm_mysql57:mysql
depends_on:
- cm_mysql57
cm_nginx:
image: "nginx"
networks:
cm_net:
aliases:
- local.catmes.test
- symfony.test
#这边自定义两个域名作为别名,方便本地测试时,PHP能正确访问Nginx
ports:
- "80:80"
volumes:
- "/mnt/www:/mnt/www"
- "/mnt/vhost:/etc/nginx/conf.d"
# links:
# - cm_phpfpm72:phpfpm
depends_on:
- cm_phpfpm72
#上面的mysql php nginx 三个服务,必须都加入自定义网络networks。
networks:
cm_net:
# driver: bridge
根据当前目录的docker-compose.yml文件,后台启动并运行容器
docker-compose up -d
开机启动:
1.docker开机启动
systemctl enable docker.service
2.将docker-compose启动命令,添加到开机启动文件中。
vim /etc/rc.d/rc.local
...
/usr/local/bin/docker-compose -f /www/docker/trace_fecshop/docker-compose.yml up -d
或
vim /etc/rc.d/init.d/start-docker-compose.sh
#!/bin/bash
# chkconfig: 2345 85 15
# description: docker-compose
/usr/local/bin/docker-compose -f /www/docker/trace_fecshop/docker-compose.yml up -d
其中/www/docker/trace_fecshop/docker-compose.yml指定了docker-compose.yum文件的目录
docker-compose up 启动超时问题:
有时候因为莫名其妙的问题,导致容器创建超时。可手动设置timeout时间
localhost:/mnt/docker# docker-compose up -d
Creating network "docker_cm_net" with the default driver
Creating docker_cm_mysql57_1 ...
ERROR: for docker_cm_mysql57_1 UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=60)
ERROR: for cm_mysql57 UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=60)
ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.
If you encounter this issue regularly because of slow network conditions, consider setting COMPOSE_HTTP_TIMEOUT to a higher value (current value: 60).
默认超时为60秒,设置超时时间为500秒
export COMPOSE_HTTP_TIMEOUT=500
export DOCKER_CLIENT_TIMEOUT=500
把上面两行代码加入 /etc/profile 文件末尾
vi /etc/profile
......
source /etc/profile
docker-compose up 启动容器服务超时错误 http://www.manongjc.com/detail/10-ireosvvqfhdiwjr.html
docker-composer详解 https://www.jianshu.com/p/658911a8cff3
Fecshop Docker https://github.com/fecshop/yii2_fecshop_docker
docker-compose.yml 配置文件编写详解 https://blog.csdn.net/qq_36148847/article/details/79427878
docker和docker-compose开机启动设置:http://www.fecshop.com/topic/1294