Docker & K8s
IT 기술은 빠르게 발전하여 변화하고 있습니다. 웹 서비스 분야는 최근 ‘클라우드’와 ‘컨테이너’ 기술의 발전과 함께 더 편리하고 효율적인 서비스 제공이 대세가 되었습니다. 이런 흐름에 맞춰 컨테이너 단위로 서비스를 배포(Deploy)할 수 있어야 합니다. 도커는 가장 대표적인 컨테이너입니다. 또한 여러 컨테이너를 편리하고 효율적으로 관리할 수 있는 오케스트레이션 기술의 대표인 쿠버네티스에 대한 내용도 살펴봅니다.
학습 목표
- 컨테이너 기술을 이해할 수 있다.
- 도커의 기본 사용법을 익히고 사용할 수 있다.
- 오케스트레이션을 이해할 수 있다.
사전 준비 사항
- Docker 설치
- Window 유저용 Docker Desktop 설치 안내
- MacOS 유저용 Docker Desktop 설치 안내
- 매킨토시 소프트웨어 다운로드 시 주의사항
- Apple 칩셋 e.g : M1, M2
- Intel 칩셋 : 2019년 이전 구매자
- 매킨토시 소프트웨어 다운로드 시 주의사항
- Ubuntu 유저용 Docker Engine 설치 안내
- Docker Engine의 설치가 끝나면, Docker Compose의 설치도 진행합니다.
- Docker 설치 확인 (설치된 버전을 확인하는 명령어를 통해 올바르게 설치되었는지 확인)
- Windows, Mac : docker —version
- Ubuntu : sudo docker —version
[그림] 설치가 정상적으로 이뤄지면 나타나는 메시지
Chapter - Docker
컨테이너 기술과 도커의 탄생 배경
컨테이너
부산항, 인천항과 같은 무역항에 방문해 본 적이 있나요? 가장 흔히 볼 수 있는 풍경 중 하나는, 대형 트럭이 컨테이너를 싣고 부두를 왔다 갔다 하는 장면일 겁니다. 이러한 컨테이너는 대형 화물선에 실려서 다른 무역항으로 이동합니다.
[사진] 무역항에서 컨테이너를 실어 나르는 모습
컨테이너가 있기 전엔 어떻게 물자를 날랐을까요? 아래는 한국 전쟁 당시의 사진입니다. 컨테이너의 장점이 보다 뚜렷해집니다. 사진으로 짐작할 수 있듯, 컨테이너를 이용해 물건을 옮길 땐 장점이 많습니다.
[사진] 출처: https://commons.wikimedia.org/wiki/File:Korean-war-merchant-marine-load.jpg#file> 위키피디아
- 물자를 싣고 내릴 때 선박이 입항해 있는 시간을 획기적으로 단축시켜준다.
- 물자를 싣고 내릴 때 필요한 인력(분류하는 사람, 짐 옮기는 사람, 감독하는 사람)을 대폭 감소시킨다.
개발자들은 이와 같이 물자의 수송에 획기적인 단축을 가져다준 컨테이너 기술을 "소프트웨어 수송, 즉 배포에 사용할 수는 없을까?" 하는 생각을 하기 시작했습니다. 그 결과 리눅스 컨테이너(lxc)라는 것을 만들게 됩니다.
리눅스 컨테이너 기술은 그 자체로 훌륭하고 완성된 기술이었지만 애플리케이션을 쉽게 컨테이너화할 수 있는 생태계 혹은 커뮤니티가 없었습니다. 2013년에 등장한 도커(Docker)는 바로 Docker Hub라는 소프트웨어 저장소와 함께 빠르게 성장했고 그 결과 개발자들은 쉽게 애플리케이션을 포장하고, 컨테이너 방식으로 실행할 수 있게 되었습니다.
도커 컨테이너
학습하기 전
도커 공식 문서
도커 컨테이너
도커 컨테이너 공식 문서
도커(Docker)는 애플리케이션을 컨테이너 기술을 이용해 빠르게 배포하고 실행할 수 있도록 도와주는 오픈소스 플랫폼입니다. 도커는 이전의 가상화 기술과 달리, 호스트 OS 위에 오버헤드가 적은 가벼운 컨테이너를 만들어 실행하는 방식으로 동작합니다.
도커 컨테이너(Docker Container)는 도커 이미지를 바탕으로 생성된 가볍고 독립적인 실행 단위입니다. 도커 컨테이너는 호스트 OS와 다른 컨테이너와 격리되어 있으며, 필요에 따라 자원을 할당받아 실행됩니다. 이렇게 생성된 도커 컨테이너는 마치 가상머신처럼 동작하지만, 오버헤드가 적기 때문에 가볍고 빠르게 실행됩니다.
도커 이미지와 도커 컨테이너는 애플리케이션을 배포하고 실행하는 데 매우 유용한 기술입니다. 도커를 사용하면 애플리케이션을 더욱 쉽고 빠르게 배포할 수 있으며, 호스트 OS와 다른 컨테이너와 격리되어 있기 때문에 더욱 안전하게 실행됩니다.
도커 컨테이너 생성하기
도커 컨테이너는 이미지를 통해 만들 수 있습니다.
$ docker run -it --name mycontainer -p 8080:8080 openjdk:11
- docker run : 도커 컨테이너를 생성하고 실행하는 명령어
- it : 컨테이너와 상호작용을 위해 표준 입력(stdin)을 연결합니다. (컨테이너를 대화형 모드로 실행)
- name mycontainer : 컨테이너의 이름을 "mycontainer"로 지정합니다. 필요에 따라 다른 이름으로 변경할 수 있습니다. (—name 옵션 미 입력 시 도커에서 랜덤으로 지정)
- p 8080:8080 : 호스트의 8080 포트와 컨테이너의 8080 포트를 매핑합니다. 이렇게 하면 호스트의 8080 포트로 들어오는 요청이 컨테이너의 8080 포트로 전달됩니다.
- openjdk:11 : 이미지를 통해 컨테이너를 만들게 되는데 사용할 베이스 이미지를 지정합니다. (여기서는 OpenJDK 11 이미지를 사용)
옵션
- d : 컨테이너를 백그라운드에서 실행합니다.
- i : 컨테이너와 상호작용을 위해 표준 입력(stdin)을 연결합니다.
- t : TTY(터미널)을 연결합니다.
- p <호스트 포트>:<컨테이너 포트> : 호스트 포트와 컨테이너 포트를 연결합니다.
- P : 호스트와 컨테이너 포트를 랜덤으로 연결합니다.
- name <컨테이너 이름> : 컨테이너의 이름을 설정합니다.
- rm : 컨테이너가 종료될 때 자동으로 삭제합니다.
- v <호스트 경로>:<컨테이너 경로>: 호스트와 컨테이너의 디렉터리를 연결합니다.
- e <환경변수>: 컨테이너 내부의 환경변수를 설정합니다.
- link <다른컨테이너 이름>:<별명>: 다른 컨테이너와 연결합니다.
- network <네트워크 이름>: 컨테이너가 속한 네트워크를 설정합니다.
- expose <포트>: 컨테이너의 포트를 노출합니다.
- entrypoint <명령어>: 컨테이너가 시작될 때 실행될 명령어를 설정합니다.
- user <사용자>: 컨테이너 내부에서 실행될 사용자를 설정합니다.
- restart <정책>: 컨테이너 재시작 정책을 설정합니다.
Unable to find image ‘openjdk:11’ locally
이미지와 관련된 부분은 도커 이미지에서 자세히 배워보겠습니다.
- openjdk:11 이미지를 가지고 있지 않습니다.
- 도커 Hub를 통해 해당 이미지를 Pulling 하고 있습니다.
- 이미지를 설치하고 해당 이미지를 통해 컨테이너가 만들어지면 jshell을 입력할 수 있게 됩니다.
- 실행한 자바 컨테이너에서 자바 코드를 입력하고 실행할 수 있습니다.
- ex) System.out.println("Hello Docker!");
- for 문 등 자유롭게 연습해 보세요!
- 컨테이너를 종료해 보세요.
- Ctrl + D 입력
- Docker Desktop에서 컨테이너 출력 결과를 확인할 수 있습니다.
컨테이너 시작하기
컨테이너를 시작하려면, docker start 명령어를 사용합니다. 다음과 같은 형식으로 입력합니다.
$ docker start [컨테이너 이름 또는 ID]
예를 들어, mycontainer라는 이름의 컨테이너를 시작하려면 다음과 같은 명령어를 입력합니다.
$ docker start mycontainer
이렇게 하면, mycontainer 컨테이너가 시작됩니다.
docker start 명령어는 도커 컨테이너를 시작하는 데 사용됩니다. 다음과 같은 옵션을 사용할 수 있습니다.
- a, --attach : 컨테이너와 터미널을 연결합니다. 터미널에 연결되어 컨테이너의 출력을 볼 수 있습니다.
- i, --interactive : 컨테이너와 상호작용을 위해 표준 입력(stdin)을 연결합니다.
- p, --publish : 호스트와 컨테이너 포트를 연결합니다.
- d, --detach : 컨테이너를 백그라운드에서 실행합니다.
- e, --env : 컨테이너 내부의 환경변수를 설정합니다.
- u, --user : 컨테이너 내부에서 실행될 사용자를 설정합니다.
- a, --attach : 컨테이너 출력을 표시합니다.
위와 같은 옵션을 사용하여 컨테이너를 시작할 수 있습니다.
컨테이너 중지하기
컨테이너를 중지하려면, docker stop 명령어를 사용합니다. 다음과 같은 형식으로 입력합니다.
docker stop [컨테이너 이름 또는 ID]
예를 들어, mycontainer라는 이름의 컨테이너를 중지하려면 다음과 같은 명령어를 입력합니다.
docker stop mycontainer
이렇게 하면, mycontainer 컨테이너가 중지됩니다.
docker stop 명령어는 도커 컨테이너를 중지하는 데 사용됩니다. 다음과 같은 옵션을 사용할 수 있습니다.
- t, time: 컨테이너가 종료되기까지 대기하는 시간을 지정합니다. 기본값은 10초입니다.
- time-format: 대기 시간의 형식을 지정합니다. 기본값은 "s"입니다.
위와 같은 옵션을 사용하여 컨테이너를 중지할 수 있습니다.
- 종료된 컨테이너를 다시 실행하는 명령어
- docker start mycontainer : 이름 (mycontainer)를 통해 컨테이너를 다시 실행할 수 있습니다.
- 도커 데스크톱에서 컨테이너가 실행되는 결과를 확인할 수 있습니다.
- 하지만 이전처럼 터미널에서 jshell을 입력할 수 없습니다.
- docker stop mycontainer : 이름 (mycontainer)를 통해 컨테이너를 다시 실행할 수 있습니다.
- docker start mycontainer : 이름 (mycontainer)를 통해 컨테이너를 다시 실행할 수 있습니다.
docker start -ai mycontainer
- 종료된 컨테이너를 다시 시작하며 -a & -i 옵션을 사용하여 컨테이너에 접속합니다.
- 컨테이너가 시작되고 터미널에 접속되면 jshell을 실행합니다.
- 옵션 2개를 붙여서 ai로 사용할 수 있습니다. (표준 입력을 유지하여 컨테이너 내부에서 터미널 입력을 받을 수 있도록 설정)
도커 컨테이너 목록
도커 컨테이너 목록을 확인하려면, docker ps 명령어를 사용합니다.
$ docker ps
[그림] 현재 실행 중인 도커 컨테이너 목록을 확인할 수 있습니다.
현재 실행 중인 도커 컨테이너 목록을 확인할 수 있습니다.
- 가장 기초적인 도커 명령어
- 컨테이너 정보를 출력하고 싶을 때 사용합니다.
- 별도의 옵션을 사용하지 않는 ps 명령어는 가동 중인 컨테이너만 출력해 줍니다.
⭐️ docker stop mycontainer 실행 후 docker ps를 실행해 보세요.
출력되는 컨테이너 목록 정보
- CONTAINER ID: 컨테이너의 고유 ID 정보
- IMAGE: 컨테이너가 생성된 이미지 정보
- COMMAND: 컨테이너에서 실행된 명령어 정보
- CREATED: 컨테이너가 생성된 시간
- STATUS: 컨테이너의 상태 정보
- PORTS: 컨테이너에서 실행 중인 포트 정보
- NAMES: 컨테이너의 이름 정보
옵션
- a, -all : 모든 컨테이너 목록을 출력합니다.
[그림] 모든 컨테이너 정보를 확인할 수 있습니다.
- f, --filter : 원하는 리스트를 필터링을 통해 출력할 수 있는 명령어입니다.
- name, label 등을 붙인 컨테이너를 출력할 때 사용할 수 있습니다.
도커 저장소
도커 저장소(Docker Hub)란?
도커 저장소는 도커 이미지를 저장하고, 관리하며, 공유할 수 있는 곳입니다. 여러분이 만든 도커 이미지를 저장소에 등록하면, 다른 사람들도 해당 이미지를 다운로드하여 사용할 수 있습니다. 이는 서버 배포, 애플리케이션 배포 등 다양한 용도로 사용됩니다.
도커 저장소의 종류
도커 저장소는 크게 Docker Hub, Private Registry, Public Registry 세 가지로 나뉩니다.
- Docker Hub
- Docker Hub는 도커에서 제공하는 공식 저장소입니다. 무료로 사용할 수 있고, 개인적으로 사용하는 것뿐만 아니라 공개적으로 이미지를 공유할 수 있습니다. Docker Hub는 이미지를 검색하고 다운로드할 수 있는 검색 엔진도 제공합니다.
- Private Registry
- Private Registry는 비공개 저장소로서, 회사나 조직 내에서 도커 이미지를 공유할 목적으로 구축합니다. 회사나 조직 내부에서만 접근이 가능하며, 보안성이 높습니다.
- Public Registry
- Public Registry는 공개 저장소로서, 누구나 이미지를 등록하고 공유할 수 있습니다. Public Registry에서는 누구나 이미지를 검색하고 다운로드할 수 있습니다.
도커 이미지 등록하기
도커 이미지를 등록하려면 먼저 도커 저장소에 로그인해야 합니다. 그 후, 도커 이미지를 빌드하고, 태그를 지정하여 저장소에 push 할 수 있습니다.
도커 저장소 계정 생성하기
도커에서 제공하는 공식 저장소인 Docker Hub는 누구나 무료로 계정을 생성할 수 있습니다. 생성 방법은 다음과 같습니다.
- https://hub.docker.com/ 에 접속합니다.
- 우측 Get Started Today for Free의 각 칸에 적절한 값을 입력하고 체크박스를 클릭합니다.
- 모든 입력이 완료되면 활성화된 Sign Up 버튼을 클릭합니다.
[그림] Docker Hub 회원가입
도커 저장소 로그인하기
도커 저장소에 로그인하려면, 다음과 같이 명령어를 입력합니다.
$ docker login
이때, Docker Hub에 로그인하는 경우, Docker Hub 계정으로 로그인해야 합니다. https://hub.docker.com 에서 로그인을 진행합니다.
도커 이미지 저장소에 공개 저장소 만드는 방법
- Docker Hub에 로그인합니다.
- 메뉴의 Repositories로 이동한 후 우측 상단의 "Create Repository" 버튼을 클릭합니다.
- "Repository Name"에 저장소 이름을 입력합니다. 이때, 이미 다른 사용자가 사용하고 있는 이름이라면 사용이 불가능합니다.
- "Visibility"에서 "Public"을 선택합니다.
- "Create" 버튼을 클릭합니다.
이제 Docker Hub에서 공개 저장소를 만들었습니다. 이 저장소에 이미지를 등록하면, 누구나 해당 이미지를 검색하고 다운로드하여 사용할 수 있습니다.
도커 이미지 저장소에 push 하기
도커 이미지를 저장소에 등록하려면, 먼저 push 명령어를 사용하여 이미지를 저장소에 업로드합니다. 다음과 같이 명령어를 입력합니다.
$ docker push {도커 유저네임}/{이미지 명}:{태그}
이때, 저장소 URL은 저장소마다 다를 수 있으며, 이미지명과 태그는 빌드할 때 지정했던 것과 동일하게 입력해야 합니다.
도커 저장소에 대해 소개하고, 이미지를 등록하는 방법을 설명하였습니다. 도커 저장소를 이용하면 이미지를 쉽게 관리하고 공유할 수 있으므로, 도커를 사용하는 개발자라면 꼭 알아두어야 합니다. 도커를 이용하여 서버 배포, 애플리케이션 배포 등을 수행하는 경우, 도커 저장소를 이용하여 이미지를 관리하는 것이 매우 유용합니다.
[생각해 봅시다]
- push 할 수 있는 이미지가 없다면 어떻게 해야 할까요?
- 나만의 도커 이미지를 만들고 도커 이미지 저장소를 통해 관리할 수 있을까요?
[이것만은 꼭!]
- 도커 이미지 저장소(Docker hub) 계정을 생성했습니다.
- 도커 이미지 저장소에서 관리될 공개 저장소를 생성했습니다.
- 내 공개 저장소에 도커 이미지를 업로드(push)했습니다.
도커 이미지
도커 이미지(Docker Image)는 도커 컨테이너를 생성하기 위한 템플릿입니다. 도커 이미지는 애플리케이션을 실행하는 데 필요한 모든 환경과 라이브러리, 소스 코드 등을 포함하고 있으며, 이를 기반으로 도커 컨테이너가 생성됩니다. 도커 이미지는 불변하며, 한 번 생성되면 수정할 수 없습니다.
도커 이미지 목록 확인하기
도커 이미지 목록을 확인하려면, docker images 명령어를 사용합니다.
$ docker images
위 명령어를 입력하면, 현재 시스템에 다운로드된 도커 이미지 목록을 확인할 수 있습니다. 출력되는 이미지 목록은 다음과 같은 정보를 포함합니다.
[그림] openjdk:11 이미지를 다운로드한 뒤 조회 결과
출력되는 이미지 목록 정보
- REPOSITORY: 이미지가 저장된 레파지토리 이름
- TAG: 이미지의 버전 정보
- IMAGE ID: 이미지의 고유 ID 정보
- CREATED: 이미지가 생성된 시간
- SIZE: 이미지의 용량 정보
도커 이미지 pull 하기
도커 이미지를 pull 하는 방법은 아래와 같습니다. 이 예시에서는 공식 openjdk 이미지를 pull 하는 방법을 설명하겠습니다.
- 도커 허브(Docker Hub)에서 이미지 검색하기 도커 허브(Docker Hub)는 도커 이미지를 공유하고 저장하는 온라인 레지스트리입니다. 먼저, 도커 허브 웹사이트에 접속하여 공식 openjdk 이미지를 검색합니다.
- 브라우저에서 https://hub.docker.com/ 로 접속합니다.
- 검색창에 "openjdk"를 입력합니다.
- 검색 결과에서 "Pre-release / non-production builds of OpenJDK."라고 표시된 공식 openjdk 이미지를 선택합니다.
이렇게 하면, 해당 이미지의 정보와 태그 버전 목록을 확인할 수 있습니다.
- 도커 이미지 pull 명령어 사용하기 터미널 또는 명령 프롬프트에서 다음과 같은 명령어를 입력하여 공식 openjdk 이미지를 pull 합니다.
$ docker pull openjdk
이 명령어를 입력하면, 최신 버전의 공식 openjdk 이미지가 다운로드됩니다.
만약 특정 버전의 openjdk 이미지를 사용하려면, openjdk:버전 형태로 명령어를 입력합니다. openjdk:11 버전의 openjdk 이미지를 pull 하려면 다음과 같은 명령어를 입력합니다.
$ docker pull openjdk:11
이렇게 하면, 해당 버전의 openjdk 이미지가 다운로드됩니다.
도커 이미지를 다운로드하는 데 사용하는 docker pull 명령어에는 다양한 옵션들이 있습니다. 명령어 뒤에 옵션을 추가하여 원하는 조건에 맞는 이미지를 다운로드할 수 있습니다.
옵션
- a, --all: 모든 이미지 목록을 출력합니다. 기본적으로 dangling 이미지를 제외한 이미지만 출력되므로, dangling 이미지를 포함하여 출력하고 싶으면 a 옵션을 사용합니다.
- digests: 이미지의 digest 정보를 출력합니다.
- no-trunc: 모든 컬럼 정보를 출력합니다.
- q, --quiet: 이미지 ID 정보만 출력합니다.
- filter: 출력할 이미지를 필터링합니다. dangling=true, label=<key>, before=<image-name>, since=<image-name> 등이 사용 가능합니다.
- format: 출력할 정보의 형식을 지정합니다. Go 템플릿 형식을 사용합니다.
도커 이미지 삭제하기
이미지를 삭제하려면, docker rmi 명령어를 사용합니다. 다음과 같은 형식으로 입력합니다.
$ docker rmi [이미지 이름 또는 ID]
예를 들어, openjdk 이미지를 삭제하려면 다음과 같은 명령어를 입력합니다.
$ docker rmi openjdk
이렇게 하면, openjdk 이미지가 삭제됩니다.
docker rmi 명령어는 도커 이미지를 삭제하는 데 사용됩니다. 다음과 같은 옵션을 사용할 수 있습니다.
- f, force: 이미지를 강제로 삭제합니다.
- no-prune: 해당 이미지를 참조하는 다른 이미지나 컨테이너를 삭제하지 않습니다.
- q, quiet: 삭제한 이미지 ID만 출력합니다.
- help: 도움말을 출력합니다.
위와 같은 옵션을 사용하여 이미지를 삭제할 수 있습니다.
- 도커 이미지를 이해할 수 있습니다.
- 도커 이미지를 생성(pull)할 수 있습니다.
- 도커 이미지 명령어를 활용할 수 있습니다.
- 도커 이미지를 삭제할 수 있습니다.
도커 빌드
도커 이미지 저장소에서 openjdk와 같이 이미 만들어진 이미지 외에 나만의 도커 이미지를 만들고 도커 컨테이너로 서비스할 수 없을까요? 도커는 당연히 해당 기능을 제공합니다. 도커 이미지 저장소에서 내려받은(pull) 다양한 이미지 또한 누군가가 이미지로 생성하여 공개 저장소에 공유하는 이미지입니다. 이처럼 도커 이미지를 생성하는 과정을 도커 빌드라고 합니다. 즉 도커 빌드를 통해 도커 이미지를 생성하려면 다음과 같은 작업 결과물이 있어야 가능합니다.
- 도커 설치 (혹은 도커 데스크탑)
- 도커 이미지로 만들 내용 (Hello World를 출력하는 간단한 SpringBoot 프로젝트로 학습합니다.)
- 도커 이미지 저장소(Docker hub)에 나의 도커 이미지를 push 하기 위한 Docker hub 아이디와 내 저장소
위 준비물 중 Docker hub 아이디와 내 저장소는 도커 빌드 과정에 있어 필수적이지 않습니다. 생성된 도커 이미지를 push하지 않고 내 도커 내 이미지로만 보관할 수도 있기 때문입니다. 그러나 대부분의 도커 이미지는 사용되어야 한다는 분명한 목적이 있기 때문에 생성한 도커 이미지를 도커 저장소에 등록(push)하여 사용될 곳에서 내려받는(pull) 방식을 사용합니다. 따라서 도커 이미지 저장소에 등록(push)하는 것을 기본으로 설명합니다.
도커 이미지 생성법
도커 Hub에 이미지를 올리기 위해서는 Dockerfile을 만들어 이미지를 빌드할 수 있습니다.
준비
IntelliJ로 Hello World를 출력하는 간단한 SpringBoot 프로젝트를 만듭니다.
SpringBoot 빌드
도커 이미지를 만들기 위해 도커 빌드를 수행하려면 우선 프로젝트를 빌드해야 합니다. 프로젝트를 빌드하여 jar 파일을 추출하는 작업을 거쳐야 Dockerfile 스크립트 내용대로 빌드된 jar 파일을 도커 컨테이너에 복사할 수 있기 때문입니다.
[그림] IntelliJ에서 Gradle을 통해 jar파일로 빌드하는 과정
위 그림처럼 bootJar로 빌드하면 프로젝트 루트 폴더 내 build/libs 하단에 jar 파일이 생성된 것을 확인할 수 있습니다.
Dockerfile로 이미지 만들기
Dockerfile 작성
- 프로젝트의 최상위 경로(root)에 Dockerfile이라는 이름으로 파일을 생성하여 아래 스크립트를 작성합니다.
# base-image
FROM openjdk:11
# COPY에서 사용될 경로 변수
ARG JAR_FILE=build/libs/*.jar
# jar 빌드 파일을 도커 컨테이너로 복사
COPY ${JAR_FILE} app.jar
# jar 파일 실행
ENTRYPOINT ["java","-jar","/app.jar"]
Dockerfile에는 다양한 명령어가 있습니다. 그러나 SpringBoot 프로젝트를 위한 Dockerfile을 만들기 위해 필요한 명령어만 다루겠습니다.
- FROM은 베이스 이미지를 설정하는 부분입니다.
- ARG에서 JAR_FILE이라는 변수를 통해 build/libs/*.jar 값을 저장합니다.
- COPY에서 ${JAR_FILE}을 통해 사용하고 있습니다.
- ENTRYPOINT는 컨테이너가 시작될 때 실행될 명령을 설정하는 부분입니다.
Dockerfile 주요 문법
도커 빌드
Dockerfile을 작성한 후, 다음 명령어를 이용해 이미지를 빌드할 수 있습니다. IntelliJ 프로젝트에서 터미널을 실행시켜 아래 명령어를 통해 도커 이미지로 빌드합니다.
docker build -t {username}/{repository}:tag .
위의 코드에서 username/repository:tag은 내 도커 이미지 저장소(Docker hub)의 아이디와 생성한 저장소명으로 변경해 주어야 합니다. .은 현재 디렉터리에 있는 Dockerfile을 사용한다는 의미입니다. . 의 앞뒤는 모두 띄어쓰기가 있어야 합니다.
SpringBoot 프로젝트를 위한 Dockerfile을 만들고 도커 빌드 명령어를 이용해서 이미지를 만드는 방법에 대해 알아보았습니다. Docker를 이용하면 애플리케이션 배포 및 관리가 용이해지며, 이식성, 확장성 및 보안성이 높아집니다.
[생각해 봅시다]
- 만들어진 나만의 도커 이미지를 내 도커 이미지 저장소에 등록(push)해봅시다.