我是Docker的新手,想问一下从Docker仓库拉取后是否可以扩展Docker镜像。我需要一个包含Ubuntu 14.04、Java和R的Docker镜像。我看到它们分别有单独的镜像。我的问题是新拉取的镜像的Dockerfile在哪里,这样我就可以扩展它们了。
docker pull
命令只是拉取预构建的镜像。您的本地计算机上没有 Dockerfile。但是,您可以从 Docker Hub 找到原始的 Dockerfile。如果您使用 itzg/ubuntu-openjdk-7
镜像,则可以访问其在线存储库。
https://registry.hub.docker.com/u/itzg/ubuntu-openjdk-7/
Dockerfile可以在Dockerfile选项卡上找到(只有“自动化构建”存储库在Docker Hub上才有Dockerfile选项卡)。
FROM ubuntu:trusty
MAINTAINER itzg
ENV APT_GET_UPDATE 2014-07-19
RUN apt-get update
RUN apt-get install -y openjdk-7-jre-headless
ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64
FROM ubuntu:trusty
MAINTAINER Edwin de Jonge
RUN apt-get update
RUN apt-get install -y r-base
目前没有自动合并两个或多个Dockerfiles的方法,但是您可以像下面这样将这两个Dockerfile合并。
FROM ubuntu:trusty
RUN apt-get update
# Install java
RUN apt-get install -y openjdk-7-jre-headless
ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64
# Install R
RUN apt-get install -y r-base
使用 docker build
命令构建它。
$ docker build nacyot/ubuntu-java-r .
$ docker run -it nacyot/ubuntu-java-r cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"
$ docker run -it nacyot/ubuntu-java-r java -version
java version "1.7.0_55"
OpenJDK Runtime Environment (IcedTea 2.4.7) (7u55-2.4.7-1ubuntu1)
OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode)
$ docker run -it nacyot/ubuntu-java-r R --version
R version 3.0.2 (2013-09-25) -- "Frisbee Sailing"
Copyright (C) 2013 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under the terms of the
GNU General Public License versions 2 or 3.
For more information about these matters see
http://www.gnu.org/licenses/.
它运行良好。
没有什么魔法,但是您可以通过引用Docker Hub上的Dockerfiles来扩展和构建(几乎)任何具有您需要的软件包的映像。
Dockerfiles是用来构建镜像的,但反向操作是不可能的。
如果您想扩展现有的镜像,有两种解决方案。
FROM myimage
)https://docs.docker.com/reference/builder/自动合并多个图像不可能,但通常情况下,Dockerfiles很容易遵循,以创建您自己的版本,其中包括R和Java(如果这是您想要的)。
一些上游容器还使用其dockerfiles中的ONBUILD
https://docs.docker.com/reference/builder/#onbuild条目,仅在通过FROM
条目将其图像包含在另一个图像中时才运行某些内容。
如果您找到了一个满意的Java容器,只需创建一个dockerfile,并在顶部添加FROM java-something
,然后添加R。即使通过FROM
包含容器,所有使用的docker run ...
参数(入口点和cmd)仍将起作用。
如果您需要对现有容器进行修改,也是可以的。请查看我创建的某些内容,以在gitlab容器上启用oauth(在官方支持之前)@ https://github.com/xeor/dockerfiles/tree/master/gitlab。在那里,我正在扩展原始图像并添加自己的一组配置调整..
仓库就是你的命名空间。所以你需要拉取镜像,这一步你已经完成了。如果你想一下,文件就在容器里。
$ sudo docker run "your filename"
为了简单起见,你只需要做1和可能的2。当我尝试时,我也做了#2,但那个列表是要添加到你自己的目录中的文件。
如果需要,请查看这个“教程”:Docker Repository Tutorial
还要看看文档!Docker 文档
当然可以。 您可以下载一个Docker镜像,更改它并生成(也称为提交)一个新的带有新名称(和标签)的镜像。 要更改容器,您可以手动执行或使用Dockerfile。 我不确定我能在单个答案中给出所有步骤,但如果您遵循这个小指南,我相信您可以在10分钟或更短的时间内了解这个想法:https://docs.docker.com/userguide/dockerimages/#creating-our-own-images