ตัวแปรใน Dockerfile

Docker เบื้องต้น

Tim Sangster

Software Engineer @ DataCamp

ตัวแปรด้วยคำสั่ง ARG

สร้างตัวแปรใน Dockerfile

ARG <var_name>=<var_value>

ตัวอย่างเช่น ARG path=/home/repl

วิธีใช้งานใน Dockerfile

$path

ตัวอย่างเช่น COPY /local/path $path

Docker เบื้องต้น

กรณีใช้งานคำสั่ง ARG

กำหนดเวอร์ชัน Python

FROM ubuntu
ARG python_version=3.9.7-1+bionic1
RUN apt-get install python3=$python_version
RUN apt-get install python3-dev=$python_version

กำหนดค่าโฟลเดอร์

FROM ubuntu
ARG project_folder=/projects/pipeline_v3
COPY /local/project/files $project_folder
COPY /local/project/test_files $project_folder/tests
Docker เบื้องต้น

กำหนดตัวแปร ARG ในช่วง build

FROM ubuntu
ARG project_folder=/projects/pipeline_v3
COPY /local/project/files $project_folder
COPY /local/project/test_files $project_folder/tests

กำหนดตัวแปรในคำสั่ง build

docker build --build-arg project_folder=/repl/pipeline .

ARG ถูกเขียนทับ และไฟล์จะไปอยู่ที่:

COPY /local/project/files /repl/pipeline
COPY /local/project/test_files /repl/pipeline/tests
Docker เบื้องต้น

ตัวแปรด้วยคำสั่ง ENV

สร้างตัวแปรใน Dockerfile

ENV <var_name>=<var_value>

ตัวอย่างเช่น ENV DB_USER=pipeline_user

วิธีใช้งานใน Dockerfile หรือขณะรัน

$DB_USER

ตัวอย่างเช่น CMD psql -U $DB_USER

Docker เบื้องต้น

กรณีใช้งานคำสั่ง ENV

กำหนดไดเรกทอรีสำหรับใช้งานขณะรัน

ENV DATA_DIR=/usr/local/var/postgres
ENV MODE production

กำหนดหรือเปลี่ยนค่าตัวแปรขณะรัน

docker run --env <key>=<value> <image-name>

docker run --env POSTGRES_USER=test_db --env POSTGRES_PASSWORD=test_db postgres

1 https://hub.docker.com/_/postgres
Docker เบื้องต้น

ข้อมูลลับในตัวแปรไม่ปลอดภัย

docker history <image-name>

ARG DB_PASSWORD=example_password

จะแสดงใน docker history:

IMAGE          CREATED        CREATED BY                          SIZE      ...
cd338027297f   2 months ago   ARG DB_PASSWORD=example_password    0B        ...
Docker เบื้องต้น

สรุป

การใช้งาน คำสั่งใน Dockerfile
สร้างตัวแปรที่เข้าถึงได้เฉพาะระหว่าง build ARG <name>=<value>
สร้างตัวแปร ENV <name>=<value>

การใช้งาน คำสั่ง Shell
เขียนทับ ARG ใน docker build docker build --build-arg <name>=<value>
เขียนทับ ENV ใน docker run docker run --env <name>=<value> <image-name>
ดูคำสั่งที่ใช้สร้าง image docker history <image-name>
Docker เบื้องต้น

มาฝึกกันเถอะ!

Docker เบื้องต้น

Preparing Video For Download...