Jak uruchomić wystąpienie platformy Docker z pliku DockerFile?

100

W końcu dowiedziałem się, jak uruchomić i uruchomić Dockera.

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

Połączyłem to z instancją redis, super.

To jest od zera i zakładam, że kiedy tworzyłem instancję redis

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

pobiera obraz ze zdalnego repozytorium?

NodeBB oferuje Dockerfile https://github.com/NodeBB/NodeBB/blob/master/Dockerfile Nie jestem pewien, jak go używać. Zakładam, że mogę jakoś stworzyć lokalne środowisko, wywołując ten plik Dockerfile na moim pilocie.

Czy to jest poprawne? Jeśli tak, jak mogę utworzyć lokalną instancję wskazującą na pilota?

Michael Joseph Aubry
źródło
możesz zbudować obraz dockera w swoim lokalnym środowisku i pobrać go lokalnie
BMW
$ cat Dockerfile | docker build -t <image_name> - # mind the hyphen
jbobbylopez

Odpowiedzi:

103

Pobierz plik i uruchom z tego samego katalogu docker build -t nodebb .

To da ci obraz na twojej lokalnej maszynie o nazwie nodebb, z którego możesz uruchomić kontener docker run -d nodebb(możesz zmienić nodebb na swoje własne imię).

Andreas Wederbrand
źródło
1
Jak to działa? Jeśli po prostu mam plik dockerfile, skąd on wie o moim projekcie? Czy w pliku dockerfile jest łącze? Następnie zakładam, że jeśli istnieją uchwyty docker, pakujące nowy obraz, który mogę następnie przenieść na mój serwer. W tym opakowaniu pochłania wszystkie atuty mojego projektu? Przepraszam, jeśli brzmię jak ignorant, doker to dla mnie nowa koncepcja, ale nauka sprawia mi przyjemność.
Michael Joseph Aubry
2
Dzięki przy okazji. Co oznacza <> w Twoim przykładzie, dlaczego wybrałeś <nodebb>?
Michael Joseph Aubry
Żaden kontener docker nie wie o „Twoim” projekcie, są one bardzo ogólne.
Andreas Wederbrand
3
Polecenie, które podałeś nie zadziałało, więc wypróbowałem polecenie „docker build.” I zadziałało, ale ponieważ nie ma nazwy, nie mogę go uruchomić. docker build -t <nodebb> .daje mi file exists: .. Mam istniejący projekt, który przyszedł z plikiem, Dockerfilewięc po prostu uruchomiłem go w tym katalogu.
Michael Joseph Aubry
2
To odpowiada na wiele moich pytań, chociaż docs.docker.com/engine/reference/builder
Michael Joseph Aubry
48

Nie można uruchomić kontenera z pliku Dockerfile.

Proces przebiega następująco:

Dockerfile = [ docker build] => Docker image = [ docker run] => kontener Docker

Aby uruchomić (lub uruchomić) kontener, potrzebujesz obrazu. Aby stworzyć obraz, musisz zbudować plik Dockerfile [1].

[1]: możesz także docker importobraz z archiwum tar lub jeszcze raz docker load.

Auzias
źródło
29

Chociaż powyższe odpowiedzi były użyteczne, to naprawdę mi pomogło, więc zamieszczam je również tutaj.

Z dokumentacji :

Zamiast określać kontekst, możesz przekazać pojedynczy plik Dockerfile w adresie URL lub przesłać plik potokiem przez STDIN. Aby potokować plik Dockerfile z STDIN:

$ docker build - < Dockerfile

Dzięki Powershell w systemie Windows możesz uruchomić:

Get-Content Dockerfile | docker build -

Po zakończeniu kompilacji uruchom polecenie:

docker image ls

Zobaczysz coś takiego:

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

Skopiuj swój rzeczywisty identyfikator obrazu, a następnie uruchom

docker run 123456789

Gdzie numer na końcu to rzeczywisty identyfikator obrazu z poprzedniego kroku

Jeśli nie chcesz pamiętać identyfikatora obrazu, możesz oznaczyć swój obraz tagiem

docker tag 123456789 pavel/pavel-build

Które oznaczy twój obraz jako pavel/pavel-build

Pavel Janicek
źródło
Niesamowite, że w 2020 roku znalezienie pierwszego fragmentu zajęło tak dużo czasu.
fullStackChris
To tylko akceptowana odpowiedź z większą ceremonią.
Michail
21

Prostym i łatwym rozwiązaniem jest:

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

3000 - może być dowolnym portem

a3e628814c68 - wynik skrótu podany przez polecenie budowy sukcesu

UWAGA : powinieneś znajdować się w katalogu zawierającym plik Dockerfile .

zhisme
źródło