Docker – ΡΡΠΎ Π²Π°ΠΆΠ½Π΅ΠΉΡΠΈΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π΄Π΅Π»Π°ΡΡΠΈΠΉ ΠΈΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΡΠΌΠΈ ΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ.
Dockerfile – ΠΊΠ»ΡΡΠ΅Π²ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΡ Docker, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΡΠΊΠ°Π·Π°ΡΡ, ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
Π§Π°ΡΡΠΎ Π² Dockerfile Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π² ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠ΅, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΠΎΠΌΡ, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π² ΡΡΠ΅Π½Π°ΡΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ΄Π½Π°ΠΊΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Dockerfile Π½Π°ΠΏΡΡΠΌΡΡ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠ»ΠΎΠ²ΠΈΡ if-else.
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ»ΠΎΠ²Π½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Π² Dockerfiles, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ.
1. ΠΡΠ½ΠΎΠ²Ρ: ARG ΠΈ ENV
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΠΎΠ³ΡΡΠ·ΠΈΡΡΡΡ Π² ΡΡΠ»ΠΎΠ²Π½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ½ΠΎΠ²Ρ.
- ARG: ΠΡΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠ±ΠΎΡΡΠΈΠΊΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ docker build. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ARG ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ Docker, Π½ΠΎ Π½Π΅ ΠΏΠΎΡΠ»Π΅ ΡΠ±ΠΎΡΠΊΠΈ ΠΎΠ±ΡΠ°Π·Π°.
- ENV: ΠΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°Π΄Π°Π΅Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π·Π°. ΠΠΎΡΡΡΠΏ ΠΊ Π½Π΅ΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈΠ· ΡΠΎΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·Π°.
2. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ Π΄Π»Ρ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ
ΠΡΠ½ΠΎΠ²Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ Π² Dockerfile ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ RUN Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΠΈΠΏΠΈΡΠ½ΡΠΌΠΈ shell-ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°.
Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ:
ΠΡ Ρ ΠΎΡΠΈΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π»ΠΈΠ±ΠΎ nginx, Π»ΠΈΠ±ΠΎ apache2 Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΠ±ΠΎΡΠΊΠΈ.
Dockerfile:
# ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·Π° Ubuntu
FROM ubuntu:20.04
# ΠΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΎΠΊ Ρ apt
ENV DEBIAN_FRONTEND=noninteractive
# ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π΄Π»Ρ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠ°
ARG WEBSERVER
# ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ° Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ
RUN if [ "$WEBSERVER" = "nginx" ]; then \
apt-get update && apt-get install -y nginx; \
elif [ "$WEBSERVER" = "apache" ]; then \
apt-get update && apt-get install -y apache2; \
else \
echo "No valid webserver specified"; \
fi
# ΠΡΡΠ°Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ Dockerfile...
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π·Π° Docker:
ΠΠ»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΎΠ±ΡΠ°Π·Π° ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠ°:
docker build --build-arg WEBSERVER=nginx -t myimage:latest .
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ ΠΎΠ±ΡΠ°Π· Docker Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ nginx.
ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ apache2 Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° WEBSERVER.
3. ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΈ ΡΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
- Π§ΠΈΡΠ°Π±Π΅Π»ΡΠ½ΠΎΡΡΡ: Π₯ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ Π² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ RUN ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π³ΠΈΠ±ΠΊΠΎΡΡΡ, ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΡ ΡΠ΄ΡΠΈΡΡ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ Docker-ΡΠ°ΠΉΠ»Π°, Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ°ΡΡΠΎ ΠΈΠ»ΠΈ Π΅ΡΠ»ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ.
- Π‘Π»ΠΎΠΈ: ΠΠ°ΠΆΠ΄Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° RUN ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΡΠ»ΠΎΠΉ Π² ΠΎΠ±ΡΠ°Π·Π΅ Docker. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΎΠ±ΡΠ°Π·Π°. ΠΠ»Ρ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΡΡΠ΅ΠΊΡΠ° ΡΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ ΠΏΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ &&.
- ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: ΠΡΠ»ΠΈ Π²Ρ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΠ΅ ARG, ΡΠΎ Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ: ARG WEBSERVER=nginx.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π₯ΠΎΡΡ ΡΠ°ΠΉΠ»Ρ Dockerfiles Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ if-else, Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π»ΠΎΠ²ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ shell-ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ RUN.
Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΏΡΠΈ ΡΠ°Π·ΡΠΌΠ½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π±ΠΎΠ»ΡΡΡΡ Π³ΠΈΠ±ΠΊΠΎΡΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ°Π·ΠΎΠ² Docker, Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΊ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡΠΌ ΠΈΠ»ΠΈ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ.
ΡΠΌ. ΡΠ°ΠΊΠΆΠ΅:
- π³Β ΠΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Dockerfile VOLUME
- π³Β ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ Docker run Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄ Π² Docker-Compose
- π³Β ΠΠ°ΠΊ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² Docker
- π³Β ΠΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Dockerfile VOLUME
- π³Β ΠΠ°ΠΊ Ρ ΡΠ°Π½ΠΈΡΡ ΠΎΠ±ΡΠ°Π·Ρ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ Docker Π½Π° Π²Π½Π΅ΡΠ½Π΅ΠΌ Π΄ΠΈΡΠΊΠ΅
- π³Β ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π·Π°ΠΏΡΡΠΊ Docker ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°