ComputerScience/Docker

[Docker] 14. Dockerfile 환경 및 네트워크 설정

kyungmin.yu 2019. 5. 22. 21:36

Dockerfile안에서 애용할 수 있는 환경변수나 컨테이너 안에서의 작업 디렉토리를 지정할 수 있음.

 

환경변수 설정(ENV 명령)

 Dockerfile안에서 환경변수를 지정하고 싶을 때는 ENV 명령을 사용함. 명령은 아래 두가지 서식 중 하나로 사용

 

 1. key value 형으로 지정하는 경우

ENV [key] [value]

 단일 환경변수에 하나의 값을 설정함. 첫번째 공백 앞을 key로 설정하면 그 이후는 모두 문자열로서 취급함.

 공백이나 따옴표와 같은 문자를 포함한 것도 문자로 취급함

ENV myName “yu”
ENV yourName kyung min

 이 경우 명령 별로 Docker 이미지를 만든다.

 

 2. key=value 형으로 지정하는 경우

ENV [key]=[value]

 한번에 여러 개의 값을 설정 할 때는 환경변수를 key=value로 지정함

ENV myName=“yu” \
    yourName=kyung\ min

 하나의 ENV 명령으로 여러 개의 값을 설정하므로 만들어 지는 Docker 이미지는 하나임

 변수 앞에 \를 추가하면 이스케이프 처리를 할 수 있음(이스케이프 처리가 뭔지이해가 안감)

 예를 들어 \$myName$myName이라는 리터럴로 치환 가능함

 ENV명령으로 지정한 환경 변수는 docker container run 명령의 --env 옵션으로 지정되는 환경변수에 의해 변경될 수 있음

 

작업 디렉토리 지정(WORKDIR)

 Dockerfile에서 지정한 명령을 실행하기 위한 작업용 디렉토리를 지정하려면 WORKDIR 명령을 설정함

WORKDIR [작업 디렉토리 경로]

 WORKDIR 명령은 Dockerfile에 쓰여있는 다음과 같은 명령을 실행하기 위한 작업용 디렉토리를 지정함

 (RUN/ CMD/ ENTRYPOINT/ COPY/ ADD)

 만일 지정한 디렉토리가 존재하지 않는다면 새로 작성함. WORKDIR 명령은 Dockerfile안에서 여러 번 사용 가능함. 상대 경로를 지정한 경우, 이정 WORKDIR을 기준으로 이동함

 

사용자 지정(USER)

 이미지 실행이나 Dockerfile의 다음과 같은 명령을 행하기 위해 사용자를 지정할 USER 명령을 사용함

USER [사용자명/UID]

 USER 명령에서 지정하는 사용자는 RUN 명령으로 미리 작성해 놓을 필요가 있음

 

라벨 지정(LABEL)

 이미지에서 버전 정보나 작성자 정보, 코멘트와 같은 정보를 제공할 때는 LABEL 명령을 사용함

LABEL <키 명>=<값>

 LABEL 명령으로 지정된 내용은 docker image inspect 명령을 통해 알 수 있음

 

포트 설정(EXPOSE)

 컨테이너의 공개 포트 번호를 지정할 때는 EXPOSE 명령을 사용함

EXPOSE <포트 번호>

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

 

Dockerfile 내 변수의 설정(ARG 명령)

 Dockerfile 안에서 사용할 변수를 정의할 때는 ARG 명령을 사용함. ARG 명령을 사용하면 변수의 값에 때라 생성되는 이미지의 내용을 바꿀 수 있음. ENV와 달리 Dockerfile안에서만 사용이 가능(이미지로 빌드할 때 까지만 사용되며 컨테이너에서는 사용하지 않음).

ARG <이름>[=기본값]

 Dockerfile을 빌드할 때 --build-arg 옵션으로 변경이 가능함

 

기본 쉘 설정(SHELL 명령)

 쉘 형식으로 명령을 실행할 때 기본 쉘을 설정하려면 SHELL 명령을 사용함. 이 명령이 없을 경우 기본 쉘은 Linux의 경우 [“/bin/bash”, “-c”], Windows[“cmd“, “/S”, “/C”]가 됨

SHELL [“쉘의 경로“, “파라미터“]

 SHELL 명령을 지정하면 그 쉘은 그 이후에 Dockerfile 안에서 Shell 형식으로 지정한 RUN명령이나 CMD 명령, ENTRYPOINT 명령에 유효함