Як запустити екземпляр docker з DockerFile?


99

Нарешті я зрозумів, як запустити докер і запустити його.

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. Я не зовсім впевнений, як ним користуватися. Я припускаю, що я можу якось створити локальне середовище, викликавши цей файл Docker на своєму пульті дистанційного керування.

Це правильно? Якщо так, то як я можу створити локальний екземпляр, що вказує на пульт?


ви можете створити образ докера у вашому місцевому середовищі та витягнути його локально
BMW

$ cat Dockerfile | docker build -t <image_name> - # mind the
hyfhen

Відповіді:


102

Завантажте файл і запустіть той самий каталог docker build -t nodebb .

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


1
Як це працює? Якщо я просто маю файл docker, звідки він знає про мій проект? Чи є посилання у файлі docker? Тоді я припускаю, що якщо докер обробляє пакувальне нове зображення, яке я можу перенести на свій сервер. У цій упаковці він поглинає всі активи мого проекту? Вибачте, якщо я звучу неосвічено, Docker - це нова концепція для мене, але мені подобається вчитися.
Майкл Джозеф Обрі

2
До речі, дякую, а що <> відображає у вашому прикладі, чому ви вибрали <nodebb>?
Майкл Джозеф Обрі,

Жоден контейнер докера не знає про "ваш" проект, вони дуже загальні.
Андреас Ведербранд,

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

2
Це відповідає на багато моїх питань, хоча docs.docker.com/engine/reference/builder
Майкл Джозеф Обрі

48

Ви не можете запустити контейнер з файлу Docker.

Процес проходить так:

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

Щоб запустити (або запустити) контейнер, потрібно зображення. Для створення образу вам потрібно створити файл Docker [1].

[1]: Ви також можете docker importстворити зображення з tarball або знову docker load.


28

Хоча наведені вище відповіді були придатними для використання, це мені справді допомогло, тому я розміщую їх і тут.

З документації :

Замість того, щоб вказати контекст, ви можете передати один файл Docker в URL-адресу або передати файл через STDIN. Щоб конвеювати файл Docker з 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 - хеш-результат, отриманий командою успішної побудови

ПРИМІТКА : ви повинні знаходитись у каталозі, що містить файл Docker .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.