2 minute read

Dockerfile

  • 도커 이미지를 생성할 수 있는 설정 파일
  • 사용자가 이미지를 조합하기 위해 명령줄에서 호출할 수 있는 모든 명령을 포함하는 텍스트 문서
  • 완성된 이미지를 생성하기 위해 필요한 컨테이너, 패키지, 소스코드, 명령어 등을 하나의 파일에 기록
  • 도커에서 이 파일을 읽어 자동으로 작업을 수행한 뒤 완성된 이미지로 만들어 줌
  • 깃과 같은 개발도구를 통해 애플리케이션의 빌드 및 배포를 자동화 가능

Docker iamge 생성

  • 기존 이미지로 컨테이너 생성 후 작업 완료된 컨테이너를 다시 이미지로 생성

Alt text

-

  • Dockerfile로 필요한 패키지, 소스코드, 명령어 등을 작성 후 빌드

Alt text


Dockerfile 작성

  • 컨테이너에서 수행해야 할 작업을 명시
  • 정해진 형식과 명령어로 작성해야 함
  • 문서 파일로 작성
  • 한 줄에 하나의 명령어로 구성
  • 명령어를 명시하고 뒤에 옵션을 추가
  • 명령어는 대/소문자 상관없음(일반적으로 대문자로 표기)
  • 위에서 아래로 한 줄씩 차례대로 실행됨
  • 주석은 # 기호를 사용

Dockerfile 명령어

명령어 설명
FROM <이미지명> 생성할 이미지의 베이스가 될 이미지. Dockerfile 작성 시 반드시 한번 이상 입력해야 함. 이미지 이름은 기본 도커 명령어에서 사용되는 형식과 동일.(저장소이름/이미지이름:태그)
LABEL <"키:값"> 이미지에 메타 데이터 추가.”키:값” 형태로 입력.여러 개의 메타데이터 입력 가능.docker inspect 명령어로 확인 가능
ADD <원본경로> <대상경로>, ADD ["추가할 파일명", … , "추가될 위치"] 로컬 디렉터리나 외부 URL 및 tar 파일에서 이미지로 파일 복사. 기본 Dockerfile이 위치한 디렉터리에서 파일을 가져옴. JSON배열의 형태로 사용 가능. 추가할 파일명을 콤마(,)로 구분해서 나열한 뒤 가장 마지막에 추가될 디렉터리 경로를 작성
COPY <원본경로> <대상경로> 로컬 디렉터리에서 이미지로 파일을 복사
RUN <명령어>, RUN ["실행가능한 파일" , "명령줄 인자 1", "명령줄 인자2" , … ] 이미지를 만들기 위해 컨테이너 내부에서 실행할 명령어 입력. 명령어 실행 시 대화형 입력이 뜨지 않도록 옵션을 지정해야 함. JSON배열 형태로 사용 가능
WORKDIR <디렉터리> 명령어를 실행할 디렉터리로 이동. cd 명령어를 입력하는 것과 같은 기능
EXPOSE <포트번호> Dockerfile의 빌드로 생성된 이미지에서 사용될 포트 설정
CMD <명령어>, CMD ["실행가능한 파일", "명령줄 인자1", "명령줄 인자2", ...] 컨테이너가 시작될 때 마다 실행할 명령어 설정. Dockerfile 에서 한번만 사용 가능. JSON배열 형태로 사용 가능

Dockerfile 작성 예제

  • 수업 때는 vsCode에 Docker extension을 설치해서 사용했다.
# 베이스 이미지를 tomcat:8.5.72-jdk8로 지정
FROM tomcat:8.5.72-jdk8

# 작성자 라벨 작성
LABEL maintainer "kh<kh@iei.com>"

# 버전 라벨 생성
LABEL versiion="1.0"

# /user/local/tomcat/webapps 디렉토리에 ROOT.war 파일 추가(Dockerfile 기준 경로)
ADD ROOT.war /user/local/tomcat/webapps

# TImezone 환경 변수를 Asia/Seoul로 설정
ENV TZ=Asia/Seoul

# 이미지에서 8080 포트 사용
EXPOSE 8080

# 컨테이너 실행 시 catalina.sh 파일 자동 실행
CMD ["catalina.sh", "run"]

ROOT.war 파일은 Dockerfile이랑 같은 위치에 복사해서 넣었다.
Build Context : Dockerfile이 존재하는 폴더. 빌드할 때 이 폴더에 있는 파일을 다 읽어감.

Alt text

그 다음에 powershell로 와서 dockerfile이 있는 경로로 변경해주었다.

-

Alt text

ls 명령어를 통해 검색해서 잘 생성이 되었는지 확인했다.


Dockerfile 빌드

  • 작성한 Dockerfile을 이용해 이미지를 생성하는 과정
docker build [옵션] <Dockerfile이 존재하는 디렉터리 경로>
명령어 설명
-f <파일명> Dockerfile 의 파일명 별도 지정. 기본값은 지정된 디렉터리 경로 내 “Dockerfile” 이름으로 사용됨
-t <이미지명:태그> [이미지명:태그 …] 생성될 이미지 이름 지정. 지정하지 않으면 16진수 형태 이름으로 자동 생성됨
// 실습 때 사용했던 거

docker buile -t tomcat-web:1.0 .
// . : 현재 경로

생성된 이미지 상세 정보 보기

  • inspect
docker inspect tomcat-web:1.0

생성된 이미지로 컨테이너 실행

docker run -d --name myweb -p 80:8080 --link mydb:db tomcat-web:1.0

localhost:80/main으로 접속하면 잘 연결되었고,
회원가입/로그인/로그아웃도 모두 된다.


Categories:

Updated: