如何从DockerFile运行Docker实例?


94

我终于想出了如何启动和运行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

Answers:


95

下载文件并从同一目录运行 docker build -t nodebb .

这将在本地计算机上为您提供一个名为nodebb的映像,您可以从中启动容器docker run -d nodebb(可以将nodebb更改为您自己的名称)。


1
这是如何运作的?如果我只是拥有dockerfile,它将如何得知我的项目?dockerfile中是否有链接?然后,我假设是否有码头工人打包了一个新映像,然后可以将其迁移到服务器上。在这种包装中,它吸收了我项目的所有资产吗?抱歉,如果我听不懂,泊坞窗对我来说是一个新概念,但我很喜欢学习。
Michael Joseph Aubry

2
顺便说一句,在示例中<>代表什么,为什么选择<nodebb>?
Michael Joseph Aubry

没有docker容器知道“您的”项目,它们非常通用。
Andreas Wederbrand '16

3
您提供的命令不起作用,所以我尝试了docker build。,它起作用了,但是由于它没有命名,所以我无法运行它。docker build -t <nodebb> .给我file exists: .。我有一个附带的现有项目,Dockerfile所以我只在该目录中运行了它。
Michael Joseph Aubry


45

您无法从Dockerfile启动容器。

过程如下:

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

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

[1]:您也可以docker import从tarball或再次获得图像docker load


26

尽管上述答案是有用的,但这确实对我有所帮助,所以我也将其放在此处。

文档中

除了指定上下文,您还可以在URL中传递单个Dockerfile或通过STDIN将文件通过管道传递。要从STDIN传递Dockerfile:

$ docker build - < Dockerfile

使用Windows上的Powershell,您可以运行:

Get-Content Dockerfile | docker build -

构建完成后,运行命令:

docker image ls

您将看到如下内容:

REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
<none>                     <none>              123456789        39 seconds ago      422MB

复制您的实际IMAGE ID,然后运行

docker run 123456789

末尾的数字是上一步的实际图像ID

如果您不想记住图像ID,可以通过以下方式标记图像

docker tag 123456789 pavel/pavel-build

哪个会将您的图片标记为 pavel/pavel-build


令人惊讶的是,到了2020年,第一个摘录花了这么长时间才被发现。
fullStackChris

这只是被接受的带有更多仪式的答案。
米歇尔

18

简单明了的解决方案是:

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

3000 -可以是任何端口

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

注意:您应该位于包含Dockerfile的目录中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.