沙滩星空的博客沙滩星空的博客

使用Docker-Compose管理容器

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
未经允许不得转载:沙滩星空的博客 » 使用Docker-Compose管理容器

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址