docker-compose 常用配置详解
docker-compose 的引入在没有 docker-compose 之前,我们创建一个容器要怎么做呢?首先我可以用 Dockerfile bulid 这个镜像,或者 直接从Docker hub上面拉取镜像docker run 一个容器,中间还要加一些复杂的参数。我们运行了容器还要用命令还管理这些容器。这些加入我们只有一个容器还好,能接受。但如果我们有一堆容器。这样...
docker-compose 的引入
在没有 docker-compose 之前,我们创建一个容器要怎么做呢?
- 首先我可以用 Dockerfile bulid 这个镜像,或者 直接从Docker hub上面拉取镜像
- docker run 一个容器,中间还要加一些复杂的参数。
- 我们运行了容器还要用命令还管理这些容器。
这些加入我们只有一个容器还好,能接受。但如果我们有一堆容器。这样管理是极其麻烦的。所以 Docker-compose 出现了。
docker-compose 是什么
它是一个批处理工具,我们可以通过配置一个 yml 文件去定义多个容器的应用,通过一条命令,就可以根据yml文件创建出制定的容器。
如何使用docker-compose
如果你看到本章,默认代表你有 docker 的基础知识
首先我们到官网拉取一段 compose 的示例代码。
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
version
是 compose 版本信息,不同版本的compose 有差异,具体看官网,我们这里是 V3
services
一个 service 代表一个容器,镜像可以从 Docker hub 上面拉取,也可以从 Dockerfile 中构建
service 下面的配置和 docker run 命令启动的参数很相似。我
例如: services 中的一个 service
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
web:
相当于 docker run --name web
是用户自定义的容器名称。
build
构建 Dockerfile 文件 ,我们上面的例子是构建当前目录下的 Dockerfile 文件 ,
image
如果我们不需要Dockerfile文件的话,我们可以使用image: image-name
的方式来获取镜像
注意:如果我们同时写了 build
和 images
的话,compose 会 build 一个容器,然后以 image 后面的名字的方式命名。
ports
端口号映射
volumes
物理卷映射
links
链接 我们这里是链接我们的 redis
容器。 如果我们设置了两个容器属于同一个 networks
我们可以不用写links,因为他们就在同一个网络
command
可以覆盖容器启动后默认执行的命令。 例如command: bundle exec thin -p 3000
※depends_on
因为我们容器启动室友依赖关系的,所以我们例如我们启动上面的 Web 他就依赖一个redis, 所以应该是 redis 先启动,然后 在启动我们的 web 容器
我们可以
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
depends_on:
- redis
这样的话,我们启动 web 时候会先启动,redis
entrypoint
Dockerfile 中也有一个文件叫做在 Dockerfile 中有一个指令叫做 ENTRYPOINT 指令,用于指定接入点。
在 docker-compose.yml 中可以定义接入点,覆盖 Dockerfile 中的定义:
environment
和 Dockerfile 中的 env 类似,把一些变量信息保存在镜像和容器中,类似 docker run -e
volumes
挂在目录,映射目录,或者挂载物理卷。 * 劲量写 绝对路径
更多推荐
所有评论(0)