扩展docker容器

时间:2014-08-18 13:21:34

标签: java docker

我是Docker的新手,我对从docker存储库中提取docker图像后扩展docker图像的可能性提出了疑问。我需要使用ubuntu 14.04,java和R专门设置docker镜像。我看到有三个图像分开。我的问题是新拉图像的Dockerfile在哪里,所以我可以扩展它们?

5 个答案:

答案 0 :(得分:4)

docker pull命令只需拉出预先构建的图像。本地计算机上没有Dockerfile。但是你可以从Docker Hub找到原始的Dockerfile。如果您使用itzg/ubuntu-openjdk-7图像,则可以访问其在线存储库。

https://registry.hub.docker.com/u/itzg/ubuntu-openjdk-7/

Dockerfile在Dockerfile选项卡上可用(只有“Automated Build”存储库在Docker Hub上有Dockefile选项卡)。

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

以下是来自edwindj/docker-r的另一个Dockerfile。

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 .

尝试在基于nacyot / ubuntu-java-r映像的容器上使用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来扩展并(几乎)扩展(几乎)任何具有你需要的软件包的图像。

答案 1 :(得分:3)

Dockerfiles用于构建图像,但您无法进行逆向操作。

如果您想扩展现有图像,则需要2个解决方案。

答案 2 :(得分:0)

存储库本质上是您的命名空间。所以你需要拉出你所做的图像。如果你考虑的话,该文件位于容器中。

  1. 列出所有图片 - sudo docker images - 会显示文件的位置。
  2. 列表项 - 在docker容器中运行shell。 $ sudo docker run "your filename"
  3. 现在我们在Docker容器中。我们可以使用ls命令列出所有文件。
  4. 如果需要,可以创建自己的目录,但要回答您的问题,您可以在#3停止。
  5. 从这里你可以将图像添加到你自己的注册表中,然后从那里拉出来,这样可以让你更容易。
  6.   

    为简单起见,老实说,你只需要做1号和2号   当然。当我尝试它时,#2也是我所做的但是列出了文件   在创建自己的目录时添加到自己的注册表中。

    查看这个"教程"如果需要:Docker Repository Tutorial

    另请查看文档! Docker Documentation

答案 3 :(得分:0)

当然可以。 您可以下载docker镜像,更改它并生成(AKA commit)带有新名称(和标签)的新图像。 要更改容器,您可以手动或使用Dockerfile。 我不确定我是否可以在一个答案中给你所有步骤,但如果你按照这个小指南我相信你可以在10分钟或更短的时间内得到这个想法:https://docs.docker.com/userguide/dockerimages/#creating-our-own-images

答案 4 :(得分:0)

自动无法合并多个图像,但通常情况下,使用R和Java创建自己的版本很容易遵循Dockerfiles(如果这就是您想要的)。

某些上游容器还使用其dockerfiles中的ONBUILD https://docs.docker.com/reference/builder/#onbuild条目,只有当其图像通过FROM条目包含在另一个中时才能运行。

如果你找到一个你满意的java容器,只需用dockerfile和FROM java-something创建你自己的图像。然后添加R.即使您通过docker run ...包含容器,您使用的所有FROM参数(入口点和cmd)仍然有效。

如果你需要破解现有的容器也是可能的。看看我创建的东西,以便在gitlab容器上启用oauth(在它们正式执行之前)@ https://github.com/xeor/dockerfiles/tree/master/gitlab。我正在扩展原始图像并添加我自己的配置tweek ..