Как запустить экземпляр докера из DockerFile?


101

Я наконец-то понял, как запустить докер.

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 на своем пульте.

Это правильно? Если да, то как я могу создать локальный экземпляр, указывающий на удаленный?


вы можете создать образ докера в своей локальной среде и получить его локально
BMW

$ cat Dockerfile | docker build -t <image_name> - # не обращайте внимания на дефис
jbobbylopez

Ответы:


104

Загрузите файл и из того же каталога запустите docker build -t nodebb .

Это даст вам изображение на вашем локальном компьютере с именем nodebb, из которого вы можете запустить контейнер docker run -d nodebb(вы можете изменить nodebb на свое собственное имя).


1
Как это работает? Если у меня просто есть файл dockerfile, как он узнает о моем проекте? Есть ли ссылка в dockerfile? Затем я предполагаю, что если есть докеры, которые упаковывают новый образ, который я могу затем перенести на свой сервер. В этой упаковке он поглощает все активы моего проекта? Извините, если я звучу невежественно, докер для меня новая концепция, но мне нравится учиться.
Майкл Джозеф Обри,

2
Кстати, спасибо, а что означает <> в вашем примере, почему вы выбрали <nodebb>?
Майкл Джозеф Обри,

Ни один док-контейнер не знает «ваш» проект, они очень общие.
Андреас Ведербранд

3
Предоставленная вами команда не сработала, поэтому я попробовал `docker build .`, и она сработала, но, поскольку она не названа, я не могу ее запустить. docker build -t <nodebb> .дает мне file exists: .. У меня есть существующий проект с файлом, Dockerfileпоэтому я просто запустил его в этом каталоге.
Майкл Джозеф Обри,

2
Это ответ на многие мои вопросы, хотя docs.docker.com/engine/reference/builder
Майкл Джозеф Обри

48

Вы не можете запустить контейнер из Dockerfile.

Процесс выглядит так:

Dockerfile = [ docker build] => Docker image = [ docker run] => Docker-контейнер

Для запуска (или запуска) контейнера вам понадобится изображение. Чтобы создать образ, вам нужно собрать Dockerfile [1].

[1]: вы также можете docker importизображение из архива или еще раз docker load.


29

Хотя приведенные выше ответы можно было использовать, это действительно помогло мне, поэтому я также помещаю его здесь.

Из документации :

Вместо указания контекста вы можете передать один Dockerfile в URL-адресе или перенаправить файл через STDIN. Чтобы передать Dockerfile из STDIN:

$ docker build - < Dockerfile

С Powershell в Windows вы можете запускать:

Get-Content Dockerfile | docker build -

Когда сборка будет завершена, запустите команду:

docker image ls

Вы увидите что-то вроде этого:

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

Скопируйте свой настоящий ИДЕНТИФИКАТОР ИЗОБРАЖЕНИЯ и запустите

docker run 123456789

Где число в конце - это фактический идентификатор изображения с предыдущего шага

Если вы не хотите запоминать идентификатор изображения, вы можете пометить свое изображение с помощью

docker tag 123456789 pavel/pavel-build

Что пометит ваше изображение как pavel/pavel-build


Удивительно, что в 2020 году на поиск первого фрагмента потребовалось так много времени.
fullStackChris

Это просто принятый ответ, но с большей церемонией.
Михаил

21

Простое и простое решение:

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

3000 - может быть любой порт

a3e628814c68 - результат хеширования, полученный командой успешной сборки

ПРИМЕЧАНИЕ : вы должны находиться в каталоге, содержащем Dockerfile .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.