如何从DockerFile运行Docker实例?

274

我终于弄清楚了如何启动和运行 Docker。

docker run --name my-forum-nodebb --link my-forum-redis:redis -p 80:80 -p 443:443 -p 4567:4567 -P -t -i nodebb/docker:ubuntu

我将它连接到了一个redis实例,很酷。

这是从头开始的,我假设当我创建redis实例时。

docker run --name my-forum-redis -d -p 6379:6379 nodebb/docker:ubuntu-redis

它从远程仓库中拉取图像?
NodeBB提供了一个Dockerfile,您可以在https://github.com/NodeBB/NodeBB/blob/master/Dockerfile找到它。我不太确定如何使用它。我猜想我可以通过在远程上调用这个Dockerfile来创建本地环境。
如果是这样的话,我应该如何创建指向远程的本地实例?

你可以在本地环境中构建Docker镜像并在本地拉取它。 - BMW
$ cat Dockerfile | docker build -t <image_name> - # 注意连字符 - jbobbylopez
@jbobbylopez 请在注释中转义你的 代码 - - FreeSoftwareServers
8个回答

333

下载Dockerfile和构建Docker镜像

Dockerfile下载到您机器上的某个目录中,然后从该目录中运行以下docker build命令。请确保用您想要命名的名称替换image_name可以在此处找到Docker镜像命名限制。

docker build --tag 'image_name' .

这将在本地机器上为您提供一个可以创建容器的镜像。要这样做,您需要运行以下 docker run 命令。确保用前面命令中为镜像命名的名称替换 image_name

docker run --detach 'image_name'

1
这是如何工作的?如果我只有Dockerfile,它怎么知道我的项目呢?Dockerfile中是否有链接?然后我假设如果有Docker处理打包一个新的镜像,然后我可以迁移到我的服务器。在这个打包过程中,它会吸收我的项目的所有资产吗?如果我听起来很无知,对不起,Docker对我来说是一个新概念,但我很喜欢学习。 - Michael Joseph Aubry
3
谢谢,顺便问一下,你示例中的<>表示什么?为什么选择<nodebb>? - Michael Joseph Aubry
没有任何 Docker 容器知道“你”的项目,它们都是非常通用的。 - Andreas Wederbrand
4
您提供的命令没有起作用,所以我尝试了 docker build . ,它可以工作,但由于它没有被命名,我无法运行它。docker build -t <nodebb> . 给出了 file exists: . 的错误信息。我有一个已经存在的项目,并带有一个 Dockerfile,所以我只是在该目录下运行它。 - Michael Joseph Aubry
2
这个文档回答了我很多问题。https://docs.docker.com/engine/reference/builder/ - Michael Joseph Aubry
2
@MichaelJosephAubry 不要直接输入参数<nodebb>。它是一个占位符,用于指定您自己的标签名称,例如“docker build -t mytag.” - Ganesh Krishnan

126
虽然其他答案也可以用,但这个真的帮了我很多,所以我也把它放在这里。
文档中得到的信息:

不需要指定上下文,你可以通过URL传递一个单独的Dockerfile文件,或者通过STDIN管道传递文件。要通过STDIN传递Dockerfile文件:

$ docker build - < Dockerfile

使用PowerShell可以运行:
Get-Content Dockerfile | docker build -

完成构建后,运行命令:
docker image ls

你会看到类似这样的东西:
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
<none>                     <none>              123456789        39 seconds ago      422MB

复制您的实际图像ID,然后运行。
docker run 123456789

在这里,末尾的数字是前一步骤中实际的图像ID。

如果您不想记住图像ID,您可以通过标记您的图像来进行操作。

docker tag 123456789 pavel/pavel-build

这将把您的图像标记为 pavel/pavel-build

12
令人惊讶的是,在2020年,第一个片段竟然花了这么长时间才被发现。 - fullStackChris
6
这只是更为正式的采纳答案。 - Michail
文档是唯一的真相,工具只能提供它。 - Momo Setti
这是唯一的答案,必须被接受。 - Neurotransmitter
这样的答案让你觉得想点赞。 - dev
如果你从标准输入流中导入数据,你的 COPY 命令可能无法正常工作。请考虑使用 docker build -f ./path/to/Dockerfile 命令。 - hughes

88

无法通过Dockerfile启动容器。

流程如下:

Dockerfile =[docker build]=> Docker镜像 =[docker run]=> Docker容器

要启动(或运行)容器,您需要一个镜像。要创建镜像,您需要构建Dockerfile[1]。

[1]: 您还可以使用docker import从tarball导入镜像,或者再次使用docker load


78

简单直接的解决方案是:

docker build .
=> ....
=> Successfully built a3e628814c67
docker run -p 3000:3000 a3e628814c67

3000 - 可以是任何端口

a3e628814c68 - 成功构建命令给出的哈希结果

注意: 你应该在包含Dockerfile的目录中。


22

标题是我来到这里的原因,它直接从Dockerfile运行一个容器。

docker build --no-cache . |  grep "Successfully built" | sed 's/Successfully built //g' | xargs -I{} docker run {}

9
docker run $(docker build -q .)

8

4

enter image description here

我们可以看到 Docker 文件在项目文件夹 E:\Code Sample\flutqr 中。 构建命令
docker build -t fluweb .
  • fluweb 是图片的名称,您可以指定任何名称
  • . 表示当前目录

查看您的 Docker 桌面,您可以看到已发布的图像,而不是 rickandmorty(我编辑了 fluweb)。 enter image description here

如果您想重新运行该图像,则可以使用“运行”按钮。否则,

enter image description here 您可以使用此命令。

docker run rickandmorty

现在它已经上线。

enter image description here


嗨!<3 Flutter web。当您运行此代码时,我们正在创建镜像,对吗?我现在不确定如何挂载和运行此镜像。 - Gene

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