Docker-compose是docker官方的开源项目,通过使用模版yaml文件,实现对docker容器集群的管理。具体教程可以通过官方地址进行实践。Docker-compose主要有两个重要的概念:服务(service)和项目(project),service定义了多个容器,组成了完整的project。

一.Docker-compose与docker的版本
目前docker-compose文件格式有3个版本,分别为1, 2.x 和 3.x分别对应了不同的docker版本,使用yaml文件时需要正确引用。

二.多个-f参数用法
通过-f选项指定一个其它名称的配置文件,比如:

docker-compose -f docker-compose-dev.yml up

但如果添加多个-f选项,docker-compose会自动合并,当然也会根据先后顺序把一些重复的配置项覆盖掉。

三.别名使用
参数links用法是链接到其它服务中的容器, 该选项是docker历史遗留的选项, 目前已经可以被aliases网络别名标签功能代替。并且如果service在同一个network中,即使不用links也可以通过容器名称进行通信,亲测过即使使用了links也未曾在/etc/hosts中发现对应的配置,猜测应该是docker-compose对网络进行了优化吧。
补充:
在自定义networks中声明的网络名称,会自动生成folder_my-network容器网络,而并非自定义的my-network名称,也就是会和docker-compose的yaml文件目录有关。

四.使用已经存在的网络
Docker-compose中的网络配置都是默认新建属于自己的专属网络,如果要使用已经存在的网络,需要在yaml文件network配置项中单独说明

networks:
default:
external:
name: leo_zhou

使用leo_zhou这个已经存在的网络。

五.关于变量的使用
docker-compose中涉及到变量有两个参数,一个是environment和env_file,用法比较特殊,需要特别的注意!
1.env_file有两种用法,一种是默认的.env配置文件,使用docker-compose文件时会自动加载其中的配置项,实时更新并且是可以作为整个docker-compose的全局变量传入参数;还有一种用法是使用自定义的env配置文件,但作用域仅限与environment参数之中的变量,并且使用自定义的env配置文件时,命令docker-compose config会出现“WARNING: The XXX variable is not set. Defaulting to a blank string.”的错误,自定义的env配置文件是为了补充environment的配置项的可读性,但不建议测试时使用。
2.参数传入也有优先级:
①在docker-compose文件固定写好的参数优先级最高
②使用shell命令export引入参数
③使用.env默认的配置文件引入参数
④使用自定义的env文件引入参数
⑤默认为null的参数
3.environment仅作为docker run -e运行时传入的参数,与env_file用法不一样,并非为修改docker-compose文件设计。

最后补充关于WordPress和MySQL的典型yaml文件,仅作为参考:
.env配置文件

PORT=
MYSQL_ROOT_PASSWORD=

WordPress+MySQL搭建

version: '3'
services:
wordpress:
image: wordpress
ports:
- '${PORT}:80'
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_PASSWORD: 123456
networks:
- leo-bridge
container_name: wordpress
depends_on:
- mysql
mysql:
image: mysql:5.7.21
privileged: true
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
networks:
- leo-bridge
container_name: mysql
volumes:
- /data/mysql:/var/lib/mysql
networks:
leo-bridge:
driver: bridge

如果使用了aliases标签,yaml需要重新配置:

version: ''
services:
wordpress:
image: wordpress
ports:
- '${PORT}:80'
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_PASSWORD:
networks:
leo-bridge:
aliases:
- yw_wordpress
container_name: wordpress
depends_on:
- mysql
mysql:
image: mysql:5.7.
privileged: true
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
networks:
leo-bridge:
aliases:
- yw_mysql
container_name: mysql
volumes:
- /data/mysql:/var/lib/mysql
networks:
leo-bridge:
driver: bridge

Docker-compose容易忽略的使用细节的更多相关文章

  1. Docker存储容易忽略的使用细节

    一.Docker容器使用前其实有个非常重要的步骤就是规划好部署的磁盘区域,因为docker容器默认存储的路径是在/var/lib/docker的根目录内,随着使用时间越长部署的内容越多,基本的根目录的 ...

  2. Tensorflow Serving Docker compose 部署服务细节(Ubuntu)

    [摘要] Tensorflow Serving 是tf模型持久化的重要工具,本篇介绍如何通过Docker compose搭建并调试TensorFlow Serving TensorFlow Servi ...

  3. Sentry 监控 - 私有 Docker Compose 部署与故障排除详解

    内容整理自官方开发文档 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Map ...

  4. Docker学习笔记 - Docker Compose 脚本命令

    Docker Compose 配置文件包含 version.services.networks 三大部分,最关键的是 services 和 networks 两个部分, version: '2' se ...

  5. Docker Compose 原理

    Docker 的优势非常明显,尤其是对于开发者来说,它提供了一种全新的软件发布机制.也就是说使用 docker 镜像作为软件产品的载体,使用 docker 容器提供独立的软件运行上下文环境,使用 do ...

  6. [phvia/dkc] Docker Compose 快速构建(LNMP+Node)运行环境

    快速构建(LNMP+Node)运行环境. dkc 在此作为 docker-compose 的缩写,你可以理解为 alias dkc=docker-compose 准备 安装 docker 选择1) 从 ...

  7. Docker Compose(八)

    Docker Compose 是Docker官方编排(Orchstration)项目之一,负责快速在集群中部署分布式应用.   Dockerfile可以让用户管理一个单独的应用容器:而Compose则 ...

  8. 附003.Docker Compose命令详解

    一 Docker Compose命令格式 Usage: docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...] docker- ...

  9. Docker学习笔记之使用 Docker Compose 管理容器

    0x00 概述 通过之前的介绍,我们已经基本掌握了构建.运行容器的方法,但这还远远不够,由于 Docker 采用轻量级容器的设计,每个容器一般只运行一个软件,而目前绝大多数应用系统都绝不是一个软件所能 ...

  10. Docker三剑客之Docker Compose

    一.什么是Docker Compose Compose 项目是Docker官方的开源项目,负责实现Docker容器集群的快速编排,开源代码在https://github.com/docker/comp ...

随机推荐

  1. 五、vue基础--生命周期函数

    1.创建阶段: a.beforeCreate:Vue已经创建了,但是data,methods都还没有被创建好 b.created:datamethods都被创建好了 c.beforeMount:模板经 ...

  2. 「Django」Xadmin应用

    第一:命令安装xadmin2 pip install xadmin2 第二:setting.py中设置 INSTALLED_APPS INSTALLED_APPS = ( ... 'xadmin', ...

  3. JavaEE企业面试问题之Java基础部分

    1. Java基础部分 1.1 Java中的方法覆盖(Override)和方法重载(Overload)是什么意思? 重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不 ...

  4. 自己实现sizeof+大小端测试

    #define my_sizeof(type) ((char *)(&type+1)-(char*)(&type)) 同时大小端测试 如下 #include <stdio.h&g ...

  5. SIGAI深度学习第八集 卷积神经网络2

    讲授Lenet.Alexnet.VGGNet.GoogLeNet等经典的卷积神经网络.Inception模块.小尺度卷积核.1x1卷积核.使用反卷积实现卷积层可视化等. 大纲: LeNet网络 Ale ...

  6. AtCoder Beginner Contest 116 D - Various Sushi 【贪心+栈】

    Problem Statement There are NN pieces of sushi. Each piece has two parameters: "kind of topping ...

  7. ora-28002

    1.查看指定概要文件(如default)的密码有效期设置: SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_na ...

  8. Share Point安裝

    Win7上裝不了WSS(Sharepoint3.3),而安裝SharePoint Foundation 2010時候又由於不能跑PrerequisiteInstaller.exe,很多該裝的組件裝不上 ...

  9. 鬼子进村 fhq-treap

    鬼子进村 fhq-treap 题面 观察题目发现可用平衡树做:每次鬼子拆家即从平衡树中加入被拆的节点:每次村民修房子都向平衡树中删除该节点:每次查询时,只需要求出其后驱与前驱,易知nxt-pre-1为 ...

  10. CF55D Beautiful numbers (数位dp)

    题目链接 题解 一个数能被一些数整除,那么一定被这些数的\(lcm\)整除 那么我们容易想到根据\(lcm\)设状态 我们可以发现有用的\(lcm\)只有\(48\)个 那么按照一般的数位\(dp\) ...