본문 바로가기

Docker

[Docker] 내가 만든 애플리케이션 도커로 실행하기, 이미지 공유하기

 

1. 도커(docker) 이미지(image) 만들기

 

1) Dockerfile 생성

  • 도커 이미지를 만들기 위해서 Dockerfile이 필요함
  • Dockerfile이란 도커 이미지를 어떻게 생성할 것인지 정의한 파일

  • FROM: 도커 이미지를 생성할 때 기본적으로 사용할 base image를 작성, 주로 OS이미지, 런타임 이미지를 지정
  • ADD src dst: 호스트 머신에 있는 파일이나 폴더를, dst라는 위치에 저장(만약, 이미지에 복사하려는 디렉토리가 없을 시 도커가 자동 생성해줌 )
  • RUN script: 스크립트 실행, 이미지를 빌드할 때 사용하는 커맨드
  • CMD: 생성된 도커 이미지를 실행할 때 자동으로 실행되는 커맨드

 

 

기타 

EXPOSE: 이미지가 통신에 사용할 포트 지정

ENV: 환경변수 지정

ENTRYPOINT: 도커 이미지가 실행될 때 사용되는 기본 커맨드 지정, CMD와 다른 것은 추가 옵션을 지정할 수 있음

// property 파일 지정
ENTRYPOINT ["java","-jar","-Dspring.profiles.active=prod", "/app.jar"]

// 프로파일 활성화
-Dspring.profiles.active=prod,logging

// 외부 설정 파일 지정
-Dspring.config.location=file:/path/to/external/application.properties

// 서버 포트 지정
-Dserver.port=8081

// 로거 레벨 지정
-Dlogging.level.com.example=DEBUG

// JMX 활성화/비활성화
-Dcom.sun.management.jmxremote

// 메모리 설정
-Xms256m -Xmx512m

WORKDIR: RUN, CMD, ENTRYPOINT 등 사용한 커맨드를 실행하는 디렉토리 지정 -w옵션으로 오버라이딩 할 수 있음

VOLUME: 퍼시스턴스 데이터를 저장할 경로를 지정, 호스트 디렉토리를 도커 컨테이너에 연결

 

2) 도커 이미지 빌드하기

dockerfile을 실행하기 위해서는 docker build 커맨드 사용

docker build {OPTIONS} {PATH}

'.' 옵션: 도커 빌드를 어느 위치에서 실행할 것인지 정의

이 위치에 따라 ADD 커맨드에서 호스트의 파일 위치를 사용하는것이 바뀔 수 있음

 

3) REPOSITORY와 TAG 설정 후 빌드

-t 옵션을 사용하면 이미지에 원하는 이름을 붙일 수 있음

tag를 붙이지 않을 경우 자동으로 latest됨

-t {image_name}:{tag}

 

 

 

4) 이미지 리스트 확인

 

 

5) 히스토리 확인 

이미지는 레이어로 관리됨

 

 

6) 버전 관리

- TAG로 버전 관리 할 수 있음, 코드가 수정되어 재 빌드하게 되면 같은 태그를 사용하지 않는 것이 좋음

왜? 같은 리포지토리명과 태그명이지만 코드의 변경 등의 이유로 다른 실행 결과가  나올 수 있음

 

 

 

2. 어플리케이션 이미지 공유하기

 

1) docker hub 접속 

https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

Deliver your business through Docker Hub Package and publish apps and plugins as containers in Docker Hub for easy download and deployment by millions of Docker users worldwide.

hub.docker.com

 

 

2) 리포지토리 생성

내가 만든 리포지토리

 

3) 로그인

docker login

 

 

4) 빌드

docker build -t {Docker_id}/리포지토리명:태그

- 이미지의 이름을 리포지토리와 동일하게 맞춰야함(? 강의에서 맞추라고했는데 리포지토리 이름을 빼먹음..;)

 

5) push

docker push 리포지토리명:태그

 

👏🏻  위에서 리포지토리명을 빼먹었는데 어떻게 push가 되는거지??? 했는데 Docker Hub 확인 했더니 리포지토리가 생성됨(리포지토리를 Docker Hub 들어가서 직접 만들지 않아도 되는거군)