고인물을 지양하는 블로그

[Docker] docker 이미지 생성 & Docker Hub에 push 본문

카테고리 없음

[Docker] docker 이미지 생성 & Docker Hub에 push

yunjaeGong 2021. 12. 14. 16:14

# 개발환경

MacBook Air M1, MacOS Monterey, IntelliJ gradle java11

 

# 도커란?

"컨테이너 단위의 OS 가상화 시스템"

격리된 환경을 제공하는 점은 기존 하이퍼바이저나 가상머신과 같지만, 가상환경 안에서 실행될 프로그램이 동작할 게스트 OS를 제거(Docker Engine으로 통일)했다. 게스트OS들이 차지하던 부분이 없어져 보다 효율적인 가상화를 제공한다.

 

https://www.docker.com/resources/what-container

이전 가상머신에서는 애플리케이션 동작에 필요한 바이너리/라이브러리, 애플리케이션 그리고 애플리케이션이 동작할 운영체제까지가 하나의 가상머신을 구성했다면 이제는 애플리케이션 동작에 필요한 바이너리/라이브러리, 애플리케이션이 하나의 컨테이너를 구성하고, 컨테이너로 추상화된 애플리케이션이 도커 위에서 동작하게 된다.

 

https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

 

 

초보를 위한 도커 안내서 - 도커란 무엇인가?

도커를 처음 접하는 시스템 관리자나 서버 개발자를 대상으로 도커 전반에 대해 얕고 넓은 지식을 담고 있습니다. 도커가 등장한 배경과 도커의 역사, 그리고 도커의 핵심 개념인 컨테이너와 이

subicura.com

 

# 기본 docker 명령

● 도커 이미지 만들기

docker build [OPTIONS] PATH | URL | -    

  -t : tag

e.g docker build -t vieux/apache:2.0 .    태그가 2.0인 vieux/apache 이미지 생성

 

● 컨테이너 실행하기 도커 이미지 -> 컨테이너

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

  -i : interactive - 유저 콘솔과 연결된 상태

  -d : detach - 데몬 상태로 동작

  -p : publish - 호스트 컴퓨터의 포트와 컨테이너에서 실행되는 서버의 포트 연결

  --name: 컨테이너에 이름 붙이기

 

● 실행중인 컨테이너에서 명령 실행하기

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

e.g docker exec -it ubuntu_bash pwd    =>  /


2. 배포할 Docker 이미지 생성

# gradle 빌드

./gradlew build

프로젝트 폴더에서 /build/libs 아래 빌드된 jar 파일을 찾을 수 있다.


# Dockerfile 생성

# openjdk11  기반 이미지
FROM openjdk:11

# gradle wrapper로 빌드 한 프로젝트 jar 파일 위치
ARG JAR_FILE=build/libs/*.jar

# 생성된 도커 파일명
COPY ${JAR_FILE} boot.jar
ENTRYPOINT ["java", "-jar", "/boot.jar"]

도커는 도커 파일에 명시된 명령에 따라 이미지 빌드를 진행한다.

FROM 명령은 생성하는 도커 이미지의 기반이 되는 부모 이미지를 뜻하고, 도커파일 명령들은 부모 이미지를 기반으로 작성하면 된다.

ARG 빌드에 사용하는 변수 --build-arg <varname>=<value> 와 같이 ARG에 값 전달 가능

COPY src -> dest로 파일 복사

ENTRYPOINT 컨테이너가 실행할 파일을 지정 (설명)

 

 

초보를 위한 도커 안내서 - 이미지 만들고 배포하기

이 글은 초보를 위한 도커 안내서 - 설치부터 배포까지 시리즈의 마지막 글입니다. 지난 글에서 도커를 설치하고 컨테이너를 실행해 보았으니 이번엔 이미지를 만들고 서버에 배포해보도록 하

subicura.com


# 애플 실리콘 맥을 사용한다면?

도커 이미지를 빌드한 호스트 컴퓨터의 환경은 (linux / aarch64)이고, 실질적으로 컨테이너가 실행될 환경은 EC2 위(linux / amd64)이다.

운영체제는 같지만 명령어 아키텍처가 다르기 때문에 추가적인 설정이 필요하지 않을까 라는 생각이 들어 찾아봤더니 문제가 있다 한다.

호스트 환경 (docker info)

ec2에서 실행하기 위해서는 다음과 같은 옵션을 줘야 문제없이 동작한다고 한다.

--platform linux/amd64

 

생성된 이미지는 docker images로 확인할 수 있다.


# docker build

docker build [OPTIONS] PATH

    docker build -t boot .

docker build 후 boot:latest 태그로 도커 이미지가 생성된 것을 볼 수 있다.


# docker hub에 이미지 push

git에 push 하는것과 비슷하게 도커 이미지들이 모여있는 도커 허브에 push 합니다.

선행조건으로 docker hub 계정과 repository가 필요합니다.

 

docker login을 통해 터미널에서 로그인 한 후(public repository의 경우라면 생략 가능할지도?)

docker push 계정/레포지토리 명령을 통해 도커 허브에 push 하면 다음과 같이

업로드 된 이미지를 확인할 수 있다.


https://meetup.toast.com/posts/255

https://docs.docker.com/engine/reference/builder/

https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html

https://zzang9ha.tistory.com/360

https://spring.io/guides/topicals/spring-boot-docker/

Comments