Szukaj…


Parametry

Parametr Detale
--Ciągnąć Zapewnia, że obraz podstawowy ( FROM ) jest aktualny przed zbudowaniem reszty pliku Docker.

Budowanie obrazu z pliku Docker

Po uzyskaniu pliku Docker można z niego zbudować obraz przy użyciu docker build . Podstawowa forma tego polecenia to:

docker build -t image-name path

Jeśli Twój plik Dockerfile nie jest nazwany Dockerfile , możesz użyć flagi -f aby podać nazwę pliku Dockerfile do zbudowania.

docker build -t image-name -f Dockerfile2 .

Na przykład, aby zbudować obraz o nazwie dockerbuild-example:1.0.0 z pliku Dockerfile w bieżącym katalogu roboczym:

$ ls
Dockerfile Dockerfile2

$ docker build -t dockerbuild-example:1.0.0 .

$ docker build -t dockerbuild-example-2:1.0.0 -f Dockerfile2 .

Aby uzyskać więcej opcji i ustawień, zobacz dokumentację użytkowania docker build .

Częstym błędem jest tworzenie Dockerfile w katalogu osobistym użytkownika ( ~ ). To zły pomysł, ponieważ podczas docker build -t mytag . ten komunikat pojawi się przez długi czas:

Przesyłanie kontekstu

Przyczyną jest to, że demon dokera próbuje skopiować wszystkie pliki użytkownika (zarówno katalog domowy, jak i jego podkatalogi). Unikaj tego, zawsze określając katalog dla pliku Docker.

Dodanie .dockerignore plik do katalogu build to dobra praktyka . Jego składnia jest podobna do plików .gitignore i .gitignore że tylko pożądane pliki i katalogi zostaną przesłane jako kontekst kompilacji.

Prosty plik Docker

FROM node:5

Dyrektywa FROM określa obraz, od którego należy zacząć. Można użyć dowolnego ważnego odwołania do obrazu .

WORKDIR /usr/src/app

Dyrektywa WORKDIR ustawia bieżący katalog roboczy w kontenerze, równoważny uruchamianiu cd w kontenerze. (Uwaga: RUN cd nie zmieni bieżącego katalogu roboczego.)

RUN npm install cowsay knock-knock-jokes

RUN wykonuje podane polecenie w kontenerze.

COPY cowsay-knockknock.js ./

COPY kopiuje plik lub katalog określony w pierwszym argumencie z kontekstu kompilacji ( path przekazana do docker build path ) do lokalizacji w kontenerze określonej przez drugi argument.

CMD node cowsay-knockknock.js

CMD określa polecenie do wykonania, gdy obraz jest uruchamiany i nie podano polecenia. Można go zastąpić, przekazując polecenie do docker run .

Istnieje wiele innych instrukcji i opcji; Zobacz pełną listę Dockerfile .

Różnica między ENTRYPOINT a CMD

Istnieją dwie dyrektywy Dockerfile które określają, jakie polecenie ma być domyślnie uruchamiane w wbudowanych obrazach. Jeśli podasz tylko CMD doker uruchomi tę komendę, używając domyślnego ENTRYPOINT , czyli /bin/sh -c . Możesz zastąpić punkt wejścia i / lub polecenie podczas uruchamiania wbudowanego obrazu. Jeśli określisz oba, ENTRYPOINT określa plik wykonywalny procesu kontenera, a CMD zostanie dostarczony jako parametry tego pliku wykonywalnego.

Na przykład jeśli Dockerfile zawiera

FROM ubuntu:16.04
CMD ["/bin/date"]

Następnie używasz domyślnej dyrektywy ENTRYPOINT /bin/sh -c i uruchamiasz /bin/date z tym domyślnym punktem wejścia. Poleceniem Twojego procesu kontenerowego będzie /bin/sh -c /bin/date . Po uruchomieniu tego obrazu domyślnie zostanie wydrukowana bieżąca data

$ docker build -t test .
$ docker run test
Tue Jul 19 10:37:43 UTC 2016

Możesz zastąpić CMD w wierszu poleceń, w którym to przypadku uruchomi podane polecenie.

$ docker run test /bin/hostname
bf0274ec8820

Jeśli określisz dyrektywę ENTRYPOINT , Docker użyje tego pliku wykonywalnego, a dyrektywa CMD określa domyślne parametry polecenia. Więc jeśli Twój Dockerfile zawiera:

FROM ubuntu:16.04
ENTRYPOINT ["/bin/echo"]
CMD ["Hello"]

Następnie uruchomi go

$ docker build -t test .
$ docker run test
Hello

Możesz podać inne parametry, jeśli chcesz, ale wszystkie będą działać /bin/echo

$ docker run test Hi
Hi

Jeśli chcesz zastąpić punkt wejścia wymieniony w pliku Docker (tj. Jeśli chcesz uruchomić inne polecenie niż echo w tym kontenerze), musisz podać parametr --entrypoint w wierszu polecenia:

$ docker run --entrypoint=/bin/hostname test
b2c70e74df18

Zasadniczo używasz dyrektywy ENTRYPOINT aby wskazać główną aplikację, którą chcesz uruchomić, a CMD parametry domyślne.

Odsłanianie portu w pliku Docker

EXPOSE <port> [<port>...]

Z dokumentacji Dockera:

Instrukcja EXPOSE informuje Dockera, że kontener nasłuchuje na określonych portach sieciowych w czasie wykonywania. EXPOSE nie udostępnia portów kontenera hostowi. Aby to zrobić, musisz użyć flagi -p aby opublikować zakres portów lub flagi -P aby opublikować wszystkie odsłonięte porty. Możesz ujawnić jeden numer portu i opublikować go zewnętrznie pod innym numerem.

Przykład:

Wewnątrz pliku Docker:

EXPOSE 8765

Aby uzyskać dostęp do tego portu z komputera hosta, dołącz ten argument do komendy docker run :

-p 8765:8765

ENTRYPOINT i CMD postrzegane jako czasownik i parametr

Załóżmy, że masz plik Docker kończący się na

ENTRYPOINT [ "nethogs"] CMD ["wlan0"]

jeśli zbudujesz ten obraz za pomocą

docker built -t inspector .

uruchom obraz zbudowany za pomocą takiego pliku Docker za pomocą polecenia takiego jak

docker run -it --net=host --rm inspector

, Nethogs będzie monitorował interfejs o nazwie wlan0

Teraz, jeśli chcesz monitorować interfejs eth0 (lub wlan1 lub ra1 ...), zrobisz coś takiego

docker run -it --net=host --rm inspector eth0

lub

docker run -it --net=host --rm inspector wlan1

Pchanie i ciągnięcie obrazu do Docker Hub lub innego rejestru

Lokalnie utworzone obrazy można przekazać do Docker Hub lub dowolnego innego hosta repozytorium dokerów, znanego jako rejestr. Użyj danych docker login aby zalogować się do istniejącego konta centrum dokera.

docker login

Login with your Docker ID to push and pull images from Docker Hub.
If you don't have a Docker ID, head over to https://hub.docker.com to create one.

Username: cjsimon
Password:
Login Succeeded

Można użyć innego rejestru dokera, określając nazwę serwera. Działa to również w przypadku rejestrów prywatnych lub hostowanych na własny rachunek. Ponadto możliwe jest korzystanie z zewnętrznego magazynu danych logowania dla bezpieczeństwa.

docker login quay.io

Następnie możesz oznaczyć i wypchnąć obrazy do rejestru, do którego jesteś zalogowany. Twoje repozytorium musi być określone jako server/username/reponame:tag . Pominięcie serwera obecnie domyślnie to Docker Hub. (Domyślnego rejestru nie można zmienić na innego dostawcę i nie ma planów wdrożenia tej funkcji).

docker tag mynginx quay.io/cjsimon/mynginx:latest

Różne tagi mogą być używane do reprezentowania różnych wersji lub gałęzi tego samego obrazu. Obraz z wieloma różnymi tagami wyświetli każdy tag w tym samym repozytorium.

Użyj docker images aby wyświetlić listę zainstalowanych obrazów zainstalowanych na komputerze lokalnym, w tym nowo oznakowany obraz. Następnie użyj push, aby przesłać go do rejestru i pociągnij, aby pobrać obraz.

docker push quay.io/cjsimon/mynginx:latest

Wszystkie tagi obrazów można wyciągnąć, określając opcję -a

docker pull quay.io/cjsimon/mynginx:latest

Budowanie za pomocą proxy

Często podczas budowania obrazu Dockera plik Docker zawiera instrukcje uruchamiające programy w celu pobrania zasobów z Internetu (na przykład wget aby pobrać kompilację binarną programu na GitHub).

Możliwe jest poinstruowanie Dockera, aby przekazywał ustawione zmienne środowiskowe, aby takie programy wykonywały te pobrania za pośrednictwem serwera proxy:

$ docker build --build-arg http_proxy=http://myproxy.example.com:3128 \
               --build-arg https_proxy=http://myproxy.example.com:3128 \
               --build-arg no_proxy=internal.example.com \
               -t test .

build-arg to zmienne środowiskowe, które są dostępne tylko w czasie kompilacji.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow