docker基础镜像是什么意思
初次安装部署好docker后,大多数镜像可以从DockerHub 提取,但是大多数人都希望自己可以完全自定义一个镜像,那么这里需要一个第三方工具 febootstrap epel6的源提供febootstrap的RPM包 yum install docker-io febootstrap -y service docker start...
当想让一个容器做两件事情,或者使一个Docker镜像包含来自两个不同镜像的依赖库时,就需要知道每个镜像的Dockerfile。本文介绍了如何通过docker history命令来对Docker镜像进行反向工程,得到它们的Dockerfile,并组织到一个Dockerfile里然后build,从而实现想做的事情。
常言道,“不要重复发明轮子!”
在使用Docker时,构建自己的镜像之前,最好在Docker Hub寻找一些可以直接使用的镜像做练习。把软件架构分布到一系列容器中,每一个容器只做一件事情,这样的效果非常好。构建分布式应用的最好的基石是使用来自Docker Hub的官方镜像,因为可以信任它们的质量。
在某些情况下,可能想让一个容器做两件不同的事情。而在另外一些情况下,可能想让一个Docker镜像包含来自两个不同镜像的依赖库。如果有每个镜像的Dockerfile,这是非常简单的。将它们组织到一个Dockerfile里然后build就行。
然而,大多数时间都在使用Docker Hub上准备好的镜像,不会有它们的源Dockerfile。我花时间找一个可以合并(或flatten)两个不同Docker镜像的工具,当然没有它们的Dockerfile。也就是说在找一个能做下面这件事的东西:
image 1 --
\
---> merged_image_12
/
image 2 --
此前在GitHub上有两个相关的讨论(1、2),尽管它们都被关闭了。
这可能吗?
那么,是否存在工具能够像这样做吗:docker merge image2 image2 merged_image?
没有!
你甚至不可以用下面的方式来构建Dockerfile:
FROM image1
FROM image2
简而言之,在一个Dockerfile里不能有多个基础镜像。
但是我需要这个功能!
唯一的解决办法是取得这些镜像的Dockerfile,然后把它们组织到一个文件中,再进行构建。那么,我能在Docker Hub上获得一个镜像的Dockerfile吗? 幸运的是可以。它不能离线获取(译注:原文是online,但显然online时对于来自GitHub的自动构建镜像是可以直接获取的),但是你可以使用docker history命令,通过反向工程获取。
怎么来使用?
在你的机器上使用docker pull从Docker Hub下载镜像。
docker pull image1
docker pull image2
然后使用docker history来取得构建这两个容器时运行的命令。
docker history --no-trunc=true image > image1-dockerfile
docker history --no-trunc=true image2 > image2-dockerfile
接下来打开这两个文件,你可以看到每个镜像的命令堆栈。这是因为Docker镜像通过层(阅读更多)的方式来构建。即你在Dockerfile中键入的每一个命令所构建的新镜像,都是在之前的命令产生的镜像之上。所以你可以对镜像进行逆向工程。
限制
不能对镜像进行反向工程的唯一场景,是镜像的维护者在他的Dockerfile中使用了ADD或COPY命令。你会看到这样一行:
ADD file:1ac56373f7983caf22
或 ADD dir:cf6fe659e9d21535844
这是因为不知道维护者在他自己的机器上,包括镜像里使用了什么本地文件。
对于docker镜像,官方的定义如下: An image is a read-only template with instructions for creating a Docker container. Often, an image is based on another image, with some additional customization. For example, you may build an image which is based on the ubuntu image, but installs the Apache web server and your application, as well as the configuration details needed to make your application run.‘ 映像是一个只读模板,带有创建Docker容器的指令。通常,一个映像是基于另一个映像的,还需要进行一些额外的定制。例如,您可以构建一个基于ubuntu映像的映像,但是安装Apache web服务器和您的应用程序,以及使您的应用程序运行所需的配置细节。
当想让一个容器做两件事情,或者使一个Docker镜像包含来自两个不同镜像的依赖库时,就需要知道每个镜像的Dockerfile。本文介绍了如何通过docker history命令来对Docker镜像进行反向工程,得到它们的Dockerfile,并组织到一个Dockerfile里然后build,从而实现想做的事情。
常言道,“不要重复发明轮子!”
在使用Docker时,构建自己的镜像之前,最好在Docker Hub寻找一些可以直接使用的镜像做练习。把软件架构分布到一系列容器中,每一个容器只做一件事情,这样的效果非常好。构建分布式应用的最好的基石是使用来自Docker Hub的官方镜像,因为可以信任它们的质量。
在某些情况下,可能想让一个容器做两件不同的事情。而在另外一些情况下,可能想让一个Docker镜像包含来自两个不同镜像的依赖库。如果有每个镜像的Dockerfile,这是非常简单的。将它们组织到一个Dockerfile里然后build就行。
然而,大多数时间都在使用Docker Hub上准备好的镜像,不会有它们的源Dockerfile。我花时间找一个可以合并(或flatten)两个不同Docker镜像的工具,当然没有它们的Dockerfile。也就是说在找一个能做下面这件事的东西:
image 1 --
\
---> merged_image_12
/
image 2 --
此前在GitHub上有两个相关的讨论(1、2),尽管它们都被关闭了。
这可能吗?
那么,是否存在工具能够像这样做吗:docker merge image2 image2 merged_image?
没有!
你甚至不可以用下面的方式来构建Dockerfile:
FROM image1
FROM image2
简而言之,在一个Dockerfile里不能有多个基础镜像。
但是我需要这个功能!
唯一的解决办法是取得这些镜像的Dockerfile,然后把它们组织到一个文件中,再进行构建。那么,我能在Docker Hub上获得一个镜像的Dockerfile吗? 幸运的是可以。它不能离线获取(译注:原文是online,但显然online时对于来自GitHub的自动构建镜像是可以直接获取的),但是你可以使用docker history命令,通过反向工程获取。
怎么来使用?
在你的机器上使用docker pull从Docker Hub下载镜像。
docker pull image1
docker pull image2
然后使用docker history来取得构建这两个容器时运行的命令。
docker history --no-trunc=true image > image1-dockerfile
docker history --no-trunc=true image2 > image2-dockerfile
接下来打开这两个文件,你可以看到每个镜像的命令堆栈。这是因为Docker镜像通过层(阅读更多)的方式来构建。即你在Dockerfile中键入的每一个命令所构建的新镜像,都是在之前的命令产生的镜像之上。所以你可以对镜像进行逆向工程。
限制
不能对镜像进行反向工程的唯一场景,是镜像的维护者在他的Dockerfile中使用了ADD或COPY命令。你会看到这样一行:
ADD file:1ac56373f7983caf22
或 ADD dir:cf6fe659e9d21535844
这是因为不知道维护者在他自己的机器上,包括镜像里使用了什么本地文件。
在docker编译之后还能看到原有文件吗
还能。ocker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,在编译之后还能看到原有文件,在image里,image包含了docker源码编译所需的所有文件。
dockerrun运行后没有unabletofindimag
ockerrun运行后没有unabletofindimag的原因是以下原因导致的:1、镜像名称或标签错误:在运行Docker容器时,需要指定正确的镜像名称和标签。如果指定的镜像名称或标签错误,Docker就无法找到对应的镜像,从而导致“无法找到图像”的错误。此时需要检查镜像名称和标签是否正确。2、镜像不存在或未下载:如果指定的...
繁巧替加: 初次安装部署好docker后,大多数镜像可以从DockerHub 提取,但是大多数人都希望自己可以完全自定义一个镜像,那么这里需要一个第三方工具 febootstrap epel6的源提供febootstrap的RPM包 yum install docker-io febootstrap -y service docker start...
马关县15818048842: docker怎么安装自己的镜像文件 - ?
繁巧替加: 方法/步骤 在使用Docker的过程中,我们除了从Docker Hub上下载已经做好的镜像,很多时候需要我们自己制作镜像.下面想在这个文章中说明一下镜像的制作方法.制作镜像的方式主要有两种:通过docker commit 制作镜像 通过docker build 制作镜像 这两种方式都是通过改进已有的镜像来达到自己的目的.制作基础镜像,会在另外一篇文章“从零开始制作基础镜像”中介绍.docker commit docker commit 是往版本控制系统里提交一次变更.使用这种方式制作镜像,本质上是运行一个基础镜像,然后在基础镜像上进行软件安装和修改.最后再将改动提交到版本系统中.
马关县15818048842: Docker的镜像和容器有什么区别 - ?
繁巧替加: 容器是由镜像产生,镜像是用来生成容器,镜像可以移植到任何docker环境下生成容器.更多的Docker教程,可以百度搜索 知识林
马关县15818048842: Docker的主要作用是什么? - ?
繁巧替加: 目前来看,Docker至少有以下应用场景:1)测试:Docker 很适合用于测试发布,将 Docker 封装后可以直接提供给测试人员进行运行,不再需要测试人员与运维、开发进行配合,进行环境搭建与部署.2)测试数据分离:在测试中,经常由...
马关县15818048842: docker的好处,为什么使用docker来部署服务器 - ?
繁巧替加: Docker的使用 Docker是一个轻量级的虚拟化解决方案,你可以实现秒级的虚拟机启动、非常轻量级的虚拟化.个人使用理解看来,它可以实现一个类似于版本管理Git一样的轻量化的状态保存. Docker有两个非常重要的概念: 镜像和容器. 镜...
马关县15818048842: 如何使用docker 官方mongodb镜像 - ?
繁巧替加: 在使用Docker的过程中,我们除了从Docker Hub上下载已经做好的镜像,很多时候需要我们自己制作镜像.下面想在这个文章中说明一下镜像的制作方法. 制作镜像的方式主要有两种:通过docker commit 制作镜像 通过docker build 制作镜像 ...
马关县15818048842: 如何进入docker的node镜像 - ?
繁巧替加: 1.什么是docker? Docker allows you to package an application with all of its dependencies into a standardized unit for software development. Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,...
马关县15818048842: 如何创建一个安全的Docker基镜像 - ?
繁巧替加: ** 构建一个Java环境基镜像 **正如我刚解释的,Alpine Linux是一个构建自有镜像时不错的选择,因此,我们在此将使用它来构建简洁高效的Docker镜像,我们开始吧!组合:Alpine + bash每个Dockerfile第一个指令都是指定它的父级容器,...
马关县15818048842: 怎么利用docker搭建一个预发布环境 - ?
繁巧替加: 1、首先你要确定使用什么基础镜像:因为你的项目是JAVA项目,在网页链接hub仓库寻找自己需要的基础镜像,推荐使用JAVA 8基础镜像2、搞定服务运行的相关文件,将服务需要运行的文件整理并写入dockerfile3、编写dockerfile文件,选择基础镜像和挂载服务运行文件,运行方式等4、运行dockerfile打包的镜像容器就可以了
马关县15818048842: 群晖docker 可以做什么 - ?
繁巧替加: 1、docker就是VMware,docker里面的镜像就相当于VMware在装系统时使用的镜像文件. 2、docker里面创建的容器就是在VMware里面创建的虚拟机并已使用镜像文件装好系统. 3、虚拟机能做什么就能做什么,就是一台服务器虚拟化很多服...