先简单理解 docker 的使用过程,它分为镜像构建与容器启动。

镜像构建:即创建一个镜像,它包含安装运行所需的环境、程序代码等。这个创建过程就是使用 dockerfile 来完成的。

容器启动:容器最终运行起来是通过拉取构建好的镜像,通过一系列运行指令(如端口映射、外部数据挂载、环境变量等)来启动服务的。针对单个容器,这可以通过 docker run 来运行。

而如果涉及多个容器的运行(如服务编排)就可以通过 docker-compose 来实现,它可以轻松的将多个容器作为 service 来运行(当然也可仅运行其中的某个),并且提供了 scale (服务扩容) 的功能。

简单总结:

1.dockerfile: 构建镜像;

2.docker run: 启动容器;

3.docker-compose: 启动服务;

从头说起。
假如你不用 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.

docker-compose是编排容器的。例如,你有一个php镜像,一个mysql镜像,一个nginx镜像。如果没有docker-compose,那么每次启动的时候,你需要敲各个容器的启动参数,环境变量,容器命名,指定不同容器的链接参数等等一系列的操作,相当繁琐。而用了docker-composer之后,你就可以把这些命令一次性写在docker-composer.yml文件中,以后每次启动这一整个环境(含3个容器)的时候,你只要敲一个docker-composer up命令就ok了。

dockerfile的作用是从无到有的构建镜像。它包含安装运行所需的环境、程序代码等。这个创建过程就是使用 dockerfile 来完成的。Dockerfile - 为 docker build 命令准备的,用于建立一个独立的 image ,在 docker-compose 里也可以用来实时 build
docker-compose.yml - 为 docker-compose 准备的脚本,可以同时管理多个 container ,包括他们之间的关系、用官方 image 还是自己 build 、各种网络端口定义、储存空间定义等

转载地址:https://blog.csdn.net/DDFFR/article/details/77049118

dockerfile 与 docker-compose的区别相关推荐

  1. dockerfile、docker compose、k8s区别

    1.各自功能 dockerfile: 构建单个服务镜像,以脚本形式 docker-compose:多镜像编排容器 k8s:跨服务编排 2. 详解 2.1 dockerfile 从无到有的构建镜像,包括 ...

  2. Docker 安装 命令 数据卷 应用部署 网络优化 Dockerfile 服务编排Compose 私有仓库

    Docker 1. 初识docker 1.1 Docker是什么 了解Docker的前生LXC LXC与docker的关系 Docker 的特点 1.2 为什么使用Docker Docker的优势 缺 ...

  3. docker/Dockerfile/docker compose

    安装docker https://mirror.tuna.tsinghua.edu.cn/help/docker-ce/ 在x86环境下,由容器统一管理开发及运行环境. Docker https:// ...

  4. Docker 学习总结(71)—— Docker、Docker Compose、Docker Swarm 之间的区别

    什么是 Docker Docker 是市场上最流行的基于容器的应用程序之一.Docker 是一个用于构建.部署和管理容器化应用程序的开源平台.使用 Docker,我们可以很容易地将应用程序打包到容器中 ...

  5. Docker学习(六):Docker Compose和Docker Stack区别

    作者:water_lang 链接:https://www.jianshu.com/p/05be80475bff 在最近的发布版本中,Docker圈发生了一些事情. Swarm模式已经在1.12中集成到 ...

  6. Docker核心技术之Docker Compose

    一.Docker Compose 简介 Docker Compose是什么? Docker Compose是一个能一次性定义和管理多个Docker容器的工具. 详细地说: Compose中定义和启动的 ...

  7. Docker Compose配置springboot微服务项目

    [Docker那些事]系列文章 docker 安装 与 卸载 centos Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT ...

  8. Docker Compose学习之docker-compose.yml编写规则 及 实战案例

    [Docker那些事]系列文章 docker 安装 与 卸载 centos Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT ...

  9. Docker Compose 简介、安装、初步体验

    [Docker那些事]系列文章 docker 安装 与 卸载 centos Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT ...

  10. 什么,容器太多操作不过来?我选择Docker Compose梭哈

    接上一篇:面试官:你说你精通 Docker,那你来详细说说 Dockerfile 吧 一.容器之间通信 1.单向通信 1.1.什么意思 mysql和tomcat是两个独立的容器,但是tomcat需要和 ...

最新文章

  1. 【翻译】Play框架入门教程一:建立项目
  2. 关于MVC/P 的简单介绍
  3. 使DataGrid中的某些列隐藏起来
  4. iOS 获取当前设备型号iPhone7/iPhone7P
  5. 给写新疆开放互联网一周纪念
  6. 程序员的自我反省-十条原则
  7. Warning: mysql_real_escape_string(): Access denied for user 'nobody'@'localhost'
  8. pytorch学习笔记(4):tensorboard可视化
  9. ORA-01157、01110问题解决
  10. Python自学笔记-lambda函数(来自廖雪峰的官网Python3)
  11. threejs光源的使用
  12. HTML5会砸掉iOS和Android的饭碗么?
  13. 谷歌地图离线发布系列之偏移处理(三)纠偏算法
  14. win10总是很快自动休眠,设置休眠时间也无效?
  15. WuThreat身份安全云-TVD每日漏洞情报-2023-02-27
  16. OpenCalib:自动驾驶多传感器开源标定工具箱
  17. luogu P4848 崂山白花蛇草水
  18. 操作记录-2020-11-08:精简代码处理RNA_seq数据
  19. ORACLE中RECORD的使用
  20. python编程:从入门到实践习题第五章5-8~5-11

热门文章

  1. binhemedia.cn 联系我们_【图片】想在邵阳市打个水井找谁好,附近专业快速钻井唐师傅联系电话,【邵阳生活吧】...
  2. 睡前小故事之MySQL起源
  3. java面试题2021最新
  4. python画关系网图_使用python绘制人人网好友关系图示例
  5. php的错误日志级别 error_report
  6. 新手入门:史上最全Web端即时通讯技术原理详解
  7. android 开发赚钱
  8. LNMT/LAMT实现动静分离、负载均衡和会话保持
  9. C和指针---第八章:数组
  10. 自己写的.Net(C#)代码×××