🐳 ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΏΠΎΠΊ Π² ΠΎΠ±Ρ€Π°Π· Docker с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Dockerfile ADD

Как ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π² ΠΎΠ±Ρ€Π°Π·

by itisgood

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Помимо Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ COPY, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ADD ΠΏΡ€ΠΈ создании Dockerfile для пСрСноса ΠΏΠ°ΠΏΠΎΠΊ с локальной ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π½Π° ΠΎΠ±Ρ€Π°Π· Docker.

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ автоматичСскоС ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… сТатых Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… источников Π² ΠΎΠ±Ρ€Π°Π· Docker.

Однако Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ сосрСдоточимся Π½Π° использовании Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ADD для копирования ΠΏΠ°ΠΏΠΎΠΊ Π² ΠΎΠ±Ρ€Π°Π· Docker.

 Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ADD Π² Dockerfile?

По сути, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΏΠΊΠΈ с хоста Π² ΠΎΠ±Ρ€Π°Π· Docker, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΏΠ°ΠΏΠΊΠ΅ Π² качСствС источника ΠΈ ΠΏΡƒΡ‚ΡŒ назначСния Π² Dockerfile.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим основной синтаксис Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ADD:

ADD <src> <dest>
  • <src>: ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡƒΡ‚ΡŒ ΠΊ исходному Ρ„Π°ΠΉΠ»Ρƒ ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ, Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΈΠ»ΠΈ URL.
  • <dest>: ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡƒΡ‚ΡŒ назначСния Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС ΠΎΠ±Ρ€Π°Π·Π° Docker, ΠΊΡƒΠ΄Π° пСрСмСщаСтся Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³.

ПониманиС этого синтаксиса ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, Π½ΠΎ ΠΈ Π»Π΅Π³ΠΊΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ Π² нашСм ΠΎΠ±Ρ€Π°Π·Π΅ Docker.

ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΏΠΊΠΈ Π² ΠΎΠ±Ρ€Π°Π· Docker с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Dockerfile ADD

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ эффСктивно ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ Π² ΠΎΠ±Ρ€Π°Π· Docker, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΏΠΊΠ° находится Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΈ Dockerfile.

Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° docker build выполняСтся Ρ‚Π°ΠΌ, Π³Π΄Π΅ находится Dockerfile, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Docker ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² качСствС контСкста сборки.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ простоС Π΄Π΅Ρ€Π΅Π²ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²:

package/
β”œβ”€β”€ Nginx-App/
β”‚   β”œβ”€β”€ Dedicated-to-Amara.txt
β”‚   β”œβ”€β”€ index.html
β”œβ”€β”€ Dockerfile

Из этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ package – это Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Π° ΠΏΠ°ΠΏΠΊΠ° Nginx-App ΠΈ Dockerfile – ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Π½Π΅ΠΌ.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΏΠΊΠΈ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Ρ‡Ρ‚ΠΎ ΠΈ Dockerfile, обСспСчиваСт Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° всю ΠΏΠ°ΠΏΠΊΡƒ Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΏΡ€ΠΈ использовании Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Dockerfile ADD.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ наш Dockerfile:

$ nano Dockerfile

Π”Π°Π»Π΅Π΅ скопируСм Π½Π°ΡˆΡƒ ΠΏΠ°ΠΏΠΊΡƒ Π² ΠΎΠ±Ρ€Π°Π· Docker с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Dockerfile:

# Base Image
FROM nginx:alpine

# Adds the Nginx-App directory to the NGINX document root
ADD Nginx-App/ /usr/share/nginx/html/Nginx-App

# Exposes port 80
EXPOSE 80

# Starts Nginx
CMD ["nginx", "-g", "daemon off;"]

По сути, Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ADD, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π² строкС 2, ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ°ΠΏΠΊΡƒ Nginx-App ΠΈΠ· Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π² /usr/share/nginx/html/ Π² ΠΎΠ±Ρ€Π°Π·Π΅ Docker.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ запустим ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ docker build с Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ:

$ docker build -t nginx-image .

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Docker Π½Π° сборку ΠΎΠ±Ρ€Π°Π·Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструкций, содСрТащихся Π² Ρ„Π°ΠΉΠ»Π΅.

ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ процСсса ΠΌΡ‹ выполняСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ:

$ docker images                
REPOSITORY                 TAG       IMAGE ID       CREATED              SIZE
nginx-image                latest    40b1d9d4a8a5   About a minute ago   43.2MB

Будя ΠΏΠΎ Π²Ρ‹Π²ΠΎΠ΄Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΌΡ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ создали ΠΎΠ±Ρ€Π°Π·.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΏΠΊΠ° находится Π² ΠΎΠ±Ρ€Π°Π·Π΅:

$ docker run -it --rm nginx-image /bin/ash

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° запускаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈΠ· ΠΎΠ±Ρ€Π°Π·Π° nginx-image ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ ash.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° ash здСсь умСстна, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±Ρ€Π°Π· основан Π½Π° дистрибутивС Alpine Linux.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ провСряСм Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΏΠ°ΠΏΠΊΠΈ:

$ docker run -it --rm nginx-image /bin/ash
/ # cd /usr/share/nginx/html/Nginx-App
/usr/share/nginx/html/Nginx-App # ls
Dedicated-to-Amara.txt  index.html 

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, ΠΏΠ°ΠΏΠΊΠ° ΠΈ всС Π΅Π΅ содСрТимоС Π±Ρ‹Π»ΠΈ скопированы Π² ΠΎΠ±Ρ€Π°Π· Docker.

4. ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сТатой ΠΏΠ°ΠΏΠΊΠΈ

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠΆΠ°Ρ‚ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ Π² ΠΎΠ±Ρ€Π°Π· Docker, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Ρƒ ΠΆΠ΅ Π»ΠΎΠ³ΠΈΠΊΡƒ.

Для Ρ‚Π°ΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ² ADD автоматичСски ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΈΡ… содСрТимоС Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ мСсто назначСния Π² ΠΎΠ±Ρ€Π°Π·Π΅.

Π­Ρ‚ΠΎ автоматичСскоС ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ускоряСт ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ процСсс.

НапримСр, Π΄Π°Π²Π°ΠΉΡ‚Π΅ скопируСм ΠΏΠ°ΠΏΠΊΡƒ tar Π² ΠΎΠ±Ρ€Π°Π· Docker:

# Base Image
FROM nginx:alpine

# Adds the compressed Nginx-App folder to the NGINX document root
ADD Nginx-App.tar.gz /usr/share/nginx/html/Nginx-App/

# Exposes port 80
EXPOSE 80

# Starts Nginx
CMD ["nginx", "-g", "daemon off;"]

Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ build image:

$ docker build -t nginx-image .           
Sending build context to Docker daemon  5.632kB
Step 1/4 : FROM nginx:alpine
 ---> 1ae23480369f
Step 2/4 : ADD Nginx-App.tar.gz /usr/share/nginx/html/Nginx-App/
...
Successfully built c6f60de9c196

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΏΠ°ΠΏΠΊΡƒ tar Π² ΠΎΠ±Ρ€Π°Π· Docker.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² этом, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ‹ΡˆΠ΅.

5. Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрСли всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ использования Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ADD для копирования ΠΏΠ°ΠΏΠΎΠΊ Π² наш ΠΎΠ±Ρ€Π°Π·.

Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ эффСктивны ΠΈ просты Π² использовании.

Однако ΠΈΡ… слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ, особСнно ΠΏΡ€ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ сТатых ΠΏΠ°ΠΏΠΎΠΊ Π² ΠΎΠ±Ρ€Π°Π·.

Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° ADD автоматичСски Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ сТатыС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ внСсти Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² срСду Docker.

см. Ρ‚Π°ΠΊΠΆΠ΅:

Loading

You may also like

Leave a Comment