티스토리 뷰
우리가 개발한 애플리케이션을 Docker image로 build하려면 "Dockerfile" 이라는 이름의 파일을 작성해주어야 하는데
이 Dockerfile에는 Docker 이미지로 build하기위해서 어떠한 명령어들을 수행해야하는지 명령어가 적힌 파일이다. 해당 명령어를 모두 처리하면 Docker 이미지로 build할 수 있다. 이제 주로 쓰이는 명령어들을 알아보자.
FROM
FROM 이미지명:태그명
어떤이미지를 사용할 것인지 이미지명과 태그명을 적는다. 보통 Dockerfile의 최상단에 위치하는 명령어이다.
이미지명과 태그명은 도커 헙 공식문서 에서 확인할 수 있다.
예를들어 openjdk 이미지의 최신버전을 사용하기 위해서는 FROM openjdk:latest 라고 적어주면 되고 터미널에서 실행할 땐 docker pull openjdk:latest 라고 실행하면된다.
LABEL
LABEL 레이블이름=값
LABEL 레이블이름=값의 형식으로 이미지에 부가적인 설명을 위한 레이블을 추가할 때 사용한다.
LABEL description="openjdk"
이 이미지는 openjdk라는걸 설명한다.
EXPOSE
EXPOSE 숫자
생성된 이미지로 컨테이너를 구동할 때 어떤 포트를 사용하는지 알려준다. EXPOSE를 사용한다고 해서 컨테이너를 구동할 때 자동으로 해당포트를 호스트 포트와 연결하지 않는다. 외부와 연결하기위해 지정한 포트를 호스트 포트와 연결해야 한다는 정보를 제공할 뿐
실제로 외부에서 접속하려면 docker run으로 이미지를 컨테이너로 빌드할 때 반드시 -p 옵션을 넣어 포트를 연결해야 한다.
COPY
COPY 호스트경로 컨테이너경로
호스트경로에 있는 파일들을 컨테이너경로로 복사합니다.
COPY ./target/app.jar /usr/local/app.jar
Maven을 통해 생성된 jar파일을 컨테이너의 /usr/local경로로 복사한다. COPY 명령어말고 ADD 명령어도 있는데 ADD는 일반 파일뿐만아니라 압축파일 같은것도 옮길 수 있다.
WORKDIR
WORKDIR 이동할경로
리눅스 명령어에서 cd와 동일한 명령어이다.
주의할 점은 해당 명령어가 실행되면 그 이후에 실행되는 명령어들은 이동된 경로에서 실행된다.
ENTRYPOINT
ENTRYPOINT ["명령어", "옵션1", "옵션2", "옵션N"]
컨테이너를 구동할 때 첫번째로 실행되는 명령어이다. 인덱스0번에는 실행할 명령어가 오고 그 이후는 명렁어 실행 시 추가되는 옵션들을 적어준다.
근데 가만보면 자바스크립트에서 배열을 선언한 것과 비슷한데 저 옵션명령어를 넣는 기준은 어떻게 되는 걸까?. 예를들어 실행할 명령어가 java -jar app.jar -Dkey=value 라고 가정해보자. 그리고 ENTRYPOINT에 작성하게되면
해당 명령어를 공백으로 split을 한 값들을 넣어주면된다. ["java", "-jar", "app-jar", "-Dkey=value"]
ENV
ENV KEY VALUE
환경 변수를 설정하기 위해서 사용하며 설정된 환경 변수는 이미지 빌드 시에도 사용되고 해당 컨테이너에서 돌아가는 애플리케이션도 접근할 수 있습니다.
ENV spring.profiles.active production
스프링 애플리케이션을 production 환경으로 띄운다.
ARG
ARG 이름
ARG 이름=기본값
docker build 커맨드로 이미지를 빌드 시 --build-arg 옵션을 통해 아래처럼 넘길 수 있다.
ARG port
docker build --build-arg port=8080
만약에 기본값을 지정해주면 --build-arg 옵션으로 해당인자가 넘어오지 않을 때 사용됩니다.
ARG port=8080
EXPORT ${port}
RUN
RUN 명령어
이미지 생성 시 실행되는 명렁어들이다.
RUN apt-get update \
&& apt-get install -y git
패키지를 업데이트 하고 git을 인스톨 한다.
'Docker' 카테고리의 다른 글
[Docker] - Container 와 VM (0) | 2021.10.18 |
---|---|
[Docker] - Spring Boot 애플리케이션을 Docker 이미지로 빌드후 실행해보기 (2) | 2021.10.14 |
[Docker] - Docker란? (0) | 2021.10.13 |