如何使用Dockerfile运行Docker命令

3

我已经掌握了一些基本的docker命令,并在终端中运行。现在我想将所有基本的docker命令放入一个docker文件中,然后构建该docker文件。

例如。

考虑两个docker文件:文件 - Docker1,Docker2

Docker1包含要运行的命令列表

在Docker2内部,我想要构建Docker1并同时运行它

Docker2:(考虑使用演示代码的场景)

FROM ubuntu:16.04
MAINTAINER abc@gmail.com
WORKDIR /home/docker_test/
RUN docker build -t Docker1 .
RUN docker run -it Docker1

我想要做类似的事情。但是它报错了 - docker: error response from daemon oci runtime create failed container_linux.go。

我该怎么做?我哪里出错了?

P.S - 我是 Docker 的新手。


2
你是想在 Docker 容器内运行 Docker 吗?还是你需要自动化?因为如果是后者,Docker Compose 可能会有所帮助。 - Railslide
1
你想在 Docker 容器内运行 Docker 命令吗? - prisar
@Railslide 我只是想自动化这个过程。 - BTG123
1
你不能在Dockerfile中运行Docker命令(通常不应该尝试从Docker容器内部运行Docker命令),但是你可以在主机上编写一个普通的shell脚本来运行docker build && docker run。 Docker并不是你唯一拥有的工具。 - David Maze
1
如果我的回答解决了你的问题,那么通常应该接受它 :) - hjsimpson
1个回答

4
你的示例混合了两个步骤,即图像创建运行图像,这种方式不能混合使用(使用Dockerfile)。

图像创建

Dockerfile用于创建图像。让我们以alpine3.8 docker file为最小示例。
FROM scratch
ADD rootfs.tar.xz /
CMD ["/bin/sh"]

这是一个基础镜像,不依赖于其他镜像,它从头开始构建 FROM scratch。然后将一个tar文件复制并解压,详见ADD,并将shell设置为启动命令,详见CMD。你可以使用以下命令构建:

docker build -t test_image .

这个命令需要在与 Dockerfile 相同的文件夹中执行,该文件夹中还需要有 rootfs.tar.xz 文件,可以从上面提供的 Alpine 链接中复制它。

运行容器

使用 test_image,您现在可以生成一个容器。

docker run -it test_image

它将启动并在容器内提供shell。

Docker Compose

通常情况下,在生成新的容器之前,没有必要一遍又一遍地构建镜像。但如果确实需要,您可以使用docker-compose来完成。 Docker Compose 旨在定义和运行由多个容器组成的服务堆栈。该堆栈在docker-compose.yml文件中定义。

version: '3'
services:
  alpine_test:
    build: .

build: .会在启动前重新构建image,但通常只需要使用已经存在的镜像,因此只需使用image: <image_name>即可。


谢谢,你写道“现在你可以在容器内生成shell”,但是有没有办法在容器内部执行它,这样你就不必使用主机机器了?有人在我的问题中提到了你的答案,但我不确定它是否适用。https://stackoverflow.com/questions/66191377/docker-docker-exec-it-inside-the-dockerfile-or-yml?noredirect=1#comment117023660_66191377 - Robert Sinclair

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接