쿠버네티스 교육/강의 내용 정리

220617_1_도커_Dockerfile 명령 ENV / WORKDIR / USER / EXPOSE / ARG / SHELL

kimhope 2022. 6. 17. 14:41
728x90

환경 및 네트워크 설정


ENV: 환경 변수 설정

key value 형식: ENV [key] [value]

  • 단일 환경 변수에 하나의 값 설정
  • ENV 명령이 3줄에 걸쳐있으므로 3개의 Docker 이미지를 겹쳐서 만듦
ENV myName "jinkim"
ENV myOrder Gin Whisky Calvados
ENV myNickName jin

 

key=value 형식: ENV [key]=[value]

  • 한 번에 여러 개의 값 설정
  • 하나의 ENV 명령으로 여러 개의 값을 설정하므로 하나의 Docker 이미지 생성
ENV myName="jinkim" \
    myOrder=Gin \ Whisky \ Calvados \
    myNickName=jin

 


 

WORKDIR: 작업 디렉토리 지정

Dockerfile에서 정의한 명령을 실행하기 위한 작업용 디렉토리 지정을 위해 사용

  • RUN, CMD, ENTRYPOINT, COPY, ADD 명령을 실행하기 위해 작업용 디렉토리를 지정함
  • 지정한 디렉토리가 없다면 새로 생성
  • WORKDIR 명령은 Dockerfile 안에서 여러 번 사용 가능

 

  • 절대 경로/상대 경로 사용 
  • 실행 결과: /first/second/third 출력
WORKDIR /first
WORKDIR second
WORKDIR third
RUN ["pwd"]

 

  • WORKDIR 명령으로 환경 변수 사용
  • 실행 결과: /first/second 출력
ENV DIRPATH /first
ENV DIRNAME second
WORKDIR $DIRPATH/$DIRNAME
RUN ["pwd"]

 


 

USER: 사용자 지정

이미지 실행 또는 Dockerfile의 RUN, CMD, ENTRYPOINT 명령 실행을 위한 사용자 지정 시 사용

  • 첫 번째 whoami 명령은 root 사용자
  • 두 번째 whoami 명령은 jin 사용자
RUN ["adduser", "jin"]
RUN ["whoami"]
USER jin
RUN ["whoami"]

 

  • 실행 결과
[root@localhost Dockerfile]# docker build -t user .
Sending build context to Docker daemon  14.85kB
Step 1/5 : FROM centos:7
 ---> eeb6ee3f44bd
Step 2/5 : RUN ["adduser", "jin"]
 ---> Using cache
 ---> ab3430ec1ddd
Step 3/5 : RUN ["whoami"]
 ---> Running in 32bd59d818a1
root
Removing intermediate container 32bd59d818a1
 ---> b88098a6410e
Step 4/5 : USER jin
 ---> Running in 55417d12e8af
Removing intermediate container 55417d12e8af
 ---> 78cdbeeb3385
Step 5/5 : RUN ["whoami"]
 ---> Running in 9a5b3f43a654
jin
Removing intermediate container 9a5b3f43a654
 ---> 04802c29f8a7
Successfully built 04802c29f8a7
Successfully tagged user:latest

 


 

EXPOSE: 포트 설정

컨테이너의 포트 번호를 지정할 때 사용

  • Docker에게 실행 중인 컨테이너가 listen하고 있는 네트워크를 알려줌
  • docker container run 명령의 -p 옵션을 사용할 때 어떤 포트를 호스트에 공개할지 정의
  • 8080 포트 공개
EXPOSE 8080

 


 

ARG: Dockerfile 내 변수 설정

Dockerfile 안에서 사용할 변수를 정의할 때 사용

  • ARG 명령을 사용하면 변수의 값에 따라 생성되는 이미지의 내용을 변경할 수 있음
  • 환경 변수 ENV와 달리 ARG는 Dockerfile 안에서만 사용 가능
ARG YOURNAME="jin"
RUN echo $YOURNAME

 

  • ARG 명령 실행 결과
  • YOURNAME: JIN
[root@localhost Dockerfile]# docker build .
Sending build context to Docker daemon  14.85kB
Step 1/3 : FROM centos:7
 ---> eeb6ee3f44bd
Step 2/3 : ARG YOURNAME="JIN"
 ---> Running in 95fabeaddad3
Removing intermediate container 95fabeaddad3
 ---> bfa21b4abbd7
Step 3/3 : RUN echo $YOURNAME
 ---> Running in 90896b892b65
JIN
Removing intermediate container 90896b892b65
 ---> 09ac20e3d14d
Successfully built 09ac20e3d14d

 

  • --build-arg 옵션 사용
  • YOURNAME: KIM
[root@localhost Dockerfile]# docker build . --build-arg YOURNAME=KIM
Sending build context to Docker daemon  14.85kB
Step 1/3 : FROM centos:7
 ---> eeb6ee3f44bd
Step 2/3 : ARG YOURNAME="JIN"
 ---> Using cache
 ---> bfa21b4abbd7
Step 3/3 : RUN echo $YOURNAME
 ---> Running in 3fdd25c33b99
KIM
Removing intermediate container 3fdd25c33b99
 ---> 4fd9c9b92486
Successfully built 4fd9c9b92486

 


 

SHELL: 기본 쉘 설정

쉘 형식으로 명령을 실행할 때 기본 쉘 설정 시 사용

  • Linux 기본 쉘: ["/bin/sh", "-c"]
  • Windows 기본 쉘: ["cmd", "/S", "/C"]
# 기본 쉘 지정
SHELL ["/bin/bash", "-c"]

# RUN 명령 실행
RUN echo hello

 

  • 실행 결과
[root@localhost Dockerfile]# docker build .
Sending build context to Docker daemon  14.85kB
Step 1/3 : FROM centos:7
 ---> eeb6ee3f44bd
Step 2/3 : SHELL ["/bin/bash", "-c"]
 ---> Running in 99c03fb1a0fe
Removing intermediate container 99c03fb1a0fe
 ---> db4c37552f10
Step 3/3 : RUN echo hello
 ---> Running in 975a1c534dca
hello
Removing intermediate container 975a1c534dca
 ---> fc68001a93ec
Successfully built fc68001a93ec
728x90