1
154625424 OP 不要沉
|
2
derek80 2016-09-12 16:01:03 +08:00 1
官方文档过一遍先。
|
3
jerray 2016-09-12 16:06:04 +08:00
按照我的把玩经验, dockerfile 用来定义容器, docker-compose 用于把多个容器连接到一起同时运行。
|
4
gzlock 2016-09-12 16:07:40 +08:00 via Android
一句话理解明白:文件和文件夹的关系
|
5
SpicyCat 2016-09-12 16:44:20 +08:00 34
其实楼主你把官网的例子都跑一遍应该就清楚了。
从头说起。 假如你不用 docker ,搭建 wordpress 怎么弄?先找台 server ,假设其 OS 为 Ubuntu ,然后按照文档一步步敲命令,写配置,对吧? 用 docker 呢? 随便找台 server ,不管什么操作系统,只要支持 docker 就行, docker run ubuntu, docker 会从官方源里拉取最新的 Ubuntu 镜像,可以认为你开了个 Ubuntu 虚拟机,然后一步步安装,跟上面一样。 但是这样安装有个显著的缺点,一旦 container 被删,你做的工作就都没了。当然可以用 docker commit 来保存成镜像,这样就可以复用了。 但是镜像一般比较大,而且只分享镜像的话,别人也不知道你这镜像到底包含什么,这些问题都不利于分享和复用。 一个直观的解决方案就是,写个脚本把安装过程全部记录下来,这样再次安装的时候,执行脚本就行了。 Dockerfile 就是这样的脚本,它记录了一个镜像的制作过程。 有了 Dockerfile, 只要执行 docker build . 就能制作镜像,而且 Dockerfile 就是文本文件,修改也很方便。 现在有了 wordpress 的镜像,只需要 docker run 就把 wordpress 启动起来了。 如果仅仅是 wordpress, 这也就够了。但是很多时候,需要多个镜像合作才能启动一个服务,比如前端要有 nginx , 数据库 mysql, 邮件服务等等,当然你可以把所有这些都弄到一个镜像里去,但这样做就无法复用了。 更常见的是, nginx, mysql, smtp 都分别是个镜像,然后这些镜像合作,共同服务一个项目。 docker-compose 就是解决这个问题的。你的项目需要哪些镜像,每个镜像怎么配置,要挂载哪些 volume, 等等信息都包含在 docker-compose.yml 里。 要启动服务,只需要 docker-compose up 就行,停止也只需要 docker-compse stop/down 简而言之, Dockerfile 记录单个镜像的构建过程, docker-compse.yml 记录一个项目(project, 一般是多个镜像)的构建过程。 你说有些教程用了 dockerfile+docker-compose, 是因为 docker-compose.yml 本身没有镜像构建的信息,如果镜像是从 docker registry 拉取下来的,那么 Dockerfile 就不需要;如果镜像是需要 build 的,那就需要提供 Dockerfile. 说了好多废话,也比较低级浅显,贻笑大方了。 |
6
cxbig 2016-09-12 16:45:08 +08:00
Dockerfile - 为 docker build 命令准备的,用于建立一个独立的 image ,在 docker-compose 里也可以用来实时 build
docker-compose.yml - 为 docker-compose 准备的脚本,可以同时管理多个 container ,包括他们之间的关系、用官方 image 还是自己 build 、各种网络端口定义、储存空间定义等 |
8
leopardwei 2016-09-12 17:51:44 +08:00
@SpicyCat 非常清晰,顶!
|
9
kongkongyzt 2016-09-12 17:59:53 +08:00
@SpicyCat 赞
|
10
154625424 OP @SpicyCat @jerray @cxbig 感谢你们的回答,貌似我有点明白 dockerfile 和 docker-compose 的区别了。
1.如果 dockerhub 存在的镜像满足我的需求,就可以直接使用 docker-compose 2.如果 dockerhub 的镜像不能满足我的需求就 dockerfile 自己 build 镜像 3.单一功能 dockerfile (自己 build )和 docker-compose (如果可以 docker pull )都可以实现。 4.多个功能必须 compose 管理(可以 docker pull 的话),否则 compose+dockerfile 。 |
11
154625424 OP |
12
cxbig 2016-09-12 23:48:20 +08:00
@154625424
1. 不对, docker-compose 是同时管理一套 container ,至于你的 image 是本地 build 还是在 docker hub 上都没有关系 2. 对 3. 对。但是 docker build 只是做 image ; docker-compose 是以启动 container 为目的的、先 build image 再以此启动 container 。 4. docker-compose 都定义好了管理起来轻松,你如果喜欢用 docker run 带一大串 parameters 也是可以的 docker-compose v2 以后可以灵活运用 image 和 build 1. 只定义 image :先找本地、本地没有找 docker hub 、再没有就报错 2. 只定义 build :跑 Dockerfile 做 image ,有 image 直接用, image 没有 name 和 tag 3. 同时定义 image 和 build :没有 image 就先跑 build , name 和 tag 用 image 定义的那个,有了 image 就直接跑 container |
14
nonoroazoro 2016-09-13 11:35:34 +08:00
Machine
解决因操作系统异构导致的安装 Docker 困难的问题。有了 Machine ,所有系统部署 Docker 都变得非常方便。 Swarm 提供原生 Docker 集群,它将几个 Docker 引擎聚集在一起,然后对外暴露为一个单一的虚拟 Docker 引擎,并提供资源管理、调度策略等。 Compose 编排工具,定义并运行基于 Docker 的分布式应用,简化部署复杂应用的流程,管理容器化应用的完整开发周期。 |