Dockerfile – EXPOSE, RUN, USER

Informuje że kontener nasłuchuje na określonych portach sieciowych – docker zezwala na przychodzący ruch sieciowy do kontenera z innych kontenerów tego hosta. Nie udostępnia automatycznie hostowi portów kontenera.

EXPOSE 80
EXPOSE 443
docker run --expose 80 ...
docker run --expose 443 ...

Przykład

# Uzyskanie podstawowego obrazu.
FROM ubuntu:14.04

# Instalowanie serwera Nginx.
RUN \
   add-apt-repository -y ppa:nginx/stable && \
   apt-get update && apt-get install -y nginx && \
   rm -rf /var/lib/apt/lists/* && \
   echo "\ndaemon off;" >> /etc/nginx/nginx.conf && \
   chown -R www-data:www-data /var/lib/nginx

# Definiowanie katalogów do podłączenia.
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", 
        "/var/log/nginx", "/var/www/html"]

# Definiowanie katalogu roboczego.
WORKDIR /etc/nginx

# Definiowanie polecenia domyślnego.
CMD ["nginx"]

# Udostępnianie portów.
EXPOSE 80
EXPOSE 443
// Udostępnienie portu na zewnątrz
# docker run nginx -p 80 

// Automatycznie opublikuje (na zewnątrz) wszystkie udostępnione porty (EXPOSE)
# docker run nginx -P

RUN – tworzy nową warstwę – uruchomi wszystkie polecenia w nowej warstwie nad bazowym obrazem i zatwierdzi wyniki w celu utworzenia obrazu (kolejnej warstwy). CMD uruchamia polecenia w czasie wykonania RUN w czasie budowania.

RUN <polecenie>                                     - forma powłokowa

- polecenie i jego argumenty zostaną przekazane do /bin/sh -c (jako argumenty)
- długie instrukcje można rozbić na wiele wierszy za pomocą \
- domyślna powłoka (sh) może zostać zmieniona za pomocą SHELL
- każda instrukcja tworzy nową warstwę w obrazie

RUN ["plik wykonywalny", "parametr1", "parametr2"]  - forma wykonywalna
- get-update i get-install zawsze powinny być w jednej instrukcji RUN (jednej warstwie) aby aktualizacja była świeża / nie z bufora

RUN apt-get update \
   && apt-get install -y mongodb-server \
   && apt-get install -y nodejs 


- unieważnienie bufora w czasie budowania
# docker build --no-cache

USER – ustawia nazwę użytkownika lub id który zostanie użyty w czasie uruchamiania obrazu – wpływa na instrukcje RUN, CMD, ENTRYPOINT, które po niej następują

USER www-data

- utworzenie usera i grupy
RUN groupadd -r tomcat && useradd -r -g tomcat tomcat