Docker – własny obraz za pomocą dockerfile

Pierwszy własny obraz – Dockerfile

Używając Docker‚a, dojdziesz w pewnym momencie do tego ze trzeba utworzyć własny obraz. Nie jest to mocno skomplikowane.

FROM ubuntu
MAINTAINER devblog.it

RUN apt-get update && \
    apt-get install -y apache2 && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
ENV APACHE_LOG_DIR /var/log/apache2

RUN mkdir -p /var/run /var/lock/apache2 /var/log

EXPOSE 80

CMD ["apache2","-D","FOREGROUND"]

To najczęściej przedstawiany spotykany sposób tworzenia obrazu. Nie jest to idealne podejście, ale najpierw postaram się omówić poszczególne komendy.

FROM

W tej dyrektywie wskazujemy na podstawie którego obrazu będziemy budować nasz własny obraz.

MAINTAINER

Czyli kto jest opiekunem tego obrazu. Nie jest to wymagane ale warto zamieszczać jeżeli chcemy się dzielić obrazami ze społecznością.

RUN

W tym miejscu wykonujemy wszystkie komendy które normalnie wykonalibyśmy z konsoli. W tym przypadku instalowany jest apache2 oraz czyszczone katalogi które zajmują niepotrzebne miejsce po aktualizacji i instalacji.

ENV

Ustawiamy zmienne środowiskowe. W przypadku apache2 jest to niezbędne do uruchomienia usługi.

EXPOSE

Określamy które porty z kontenera mają być wystawione poza kontener.

CMD

Komenda która zostanie uruchomiona zaraz po starcie kontenera.

Budowanie obrazu

Mamy plik Dockerfile, więc najwyższa poro zbudować obraz na jego podstawie.

$ ls
Dockerfile
$ docker build . -t devblog/apache2

Będąc w katalogu gdzie mamy nasz plik z konfiguracja uruchamiamy komendę docker build. Wyżej pokazana jest uproszczona składnia. Warto zwrócić uwagę na parametr -t który ustawia nazwę naszego obrazu.

Skoro wszystko przebiegło bez błędów i ostatnią linią jest „Successfully built …” to warto byłoby sprawdzić obrazy dostępne w naszym systemie.

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
devblog/apache2     latest              9dc4fb18c1f3        42 seconds ago      226.2 MB
ubuntu              latest              c73a085dc378        2 weeks ago         127.1 MB
mysql               5.7.15              18f13d72f7f0        2 weeks ago         383.4 MB
mysql               latest              18f13d72f7f0        2 weeks ago         383.4 MB

Widać tu obraz mysql który był wykorzystywany przy tworzeniu naszego pierwszego kontenera oraz przed chwilą stworzony devblog/apache2. Nie sposób też pominąć obraz ubuntu który został pobrany podczas wykonywania sekcji FROM w naszym pliku Dockerfile.

Kontener z własnego obrazu

Tyle wysiłku a efektu żadnego. Zaraz spróbujemy to zmienić.

$ docker run -d --name my-apache -p 80:80 devblog/apache2
9b855dabc4aa330bf7d152a8002a197095f66a9e090bfe0a5c14932d9a1f7e12
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
9b855dabc4aa        devblog/apache2     "apache2 -D FOREGROUN"   9 seconds ago       Up 8 seconds        0.0.0.0:80->80/tcp       my-apache

Jak widzimy kontener o nazwie my-apache został utworzony na podstawie obrazu devblog/apache2. Czyli pełen sukces. Bardziej dociekliwym sugeruję otworzenie przeglądarki i wpisanie w pasku adresu http://localhost

Dodaj komentarz

avatar
wpDiscuz