[Docker] DockerHub에 이미지 올리고 다른 환경에서 실행하기
지난 포스팅에서 SpringBoot Dockerfile을 이용하여 도커 이미지를 만들어 보았다.
H2 이미지는 도커허브에서 가져왔지만 SpringBoot 프로젝트 이미지는 로컬환경의 Dockerfile을 빌드해서 만들어야 했다. SpringBoot 프로젝트 이미지도 도커허브에서 가져올 수 있도록 도커이미지를 도커허브에 등록해보자.
1. 도커허브 리포지토리 생성하기
도커허브 사이트 링크로 들어가서 Create Repository를 클릭한다.
이미지는 도커허브의 리포지토리에 등록된다. 리포지토리 이름은 도커 이미지와 일치하도록 설정한다. 도커 이미지는 이름과 일치하는 도커 리포지토리로 등록된다.
그럼 도커이미지를 빌드하여 리포지토리에 등록해보자.
2. 도커이미지 빌드하기
내 노트북은 MacOS M1칩으로 ARM64환경이다. ARM64환경에서 빌드된 이미지는 x64환경에서 Run되지 않고 x64환경에서 빌드된 이미지는 ARM64 환경에서 Run되지 않는다. 그러므로 다른 환경에서 빌드된 이미지도 Run할 수 있도록 이미지 빌드시 특별한 명령어를 사용해야 한다.
> docker buildx build --platform=linux/amd64 -t <리포지토리명과 일치하는 이미지명> .
buildx는 멀티플랫폼으로 run이 가능하도록 하는 명령어이다. 여기에 --platform 옵션을 추가하면 빌드된 이미지를 Run할 환경도 지정할 수 있다. 이미지명은 도커허브의 리포지토리명과 일차하는 이름으로 지정한다.
그럼 빌드해보자.
> docker inspect [ 빌드된 이미지명 ]
"Architecture": "amd64",
"Os": "linux"
빌드 된 이미지를 inspect 명령어로 들여다 보면 Architecture와 Os가 설정되어 있는것을 확인 할 수 있다.
3. 빌드된 이미지 리포지토리로 push 하기
> docker login # 도커허브 로그인
> docker push [ 이미지명 ]
도커허브레 로그인 하고 push 명령어로 push를 해보자.
Tags란에 이미지가 등록된 것을 확인할 수 있다. 그럼 이제는 Dockerfile이 없어도 도커허브에 등록된 이미지를 pull 하여 컨테이너를 띄울 수 있게 되었다.
지난 포스팅에서 작성한 Docker Compose 파일을 수정해보자.
4. docker-compose.yml 수정
version: "3"
services:
db: # db 서비스
container_name: h2
image: oscarfonts/h2:latest
ports:
- 1521:1521
- 8081:81
environment:
H2_OPTIONS: -ifNotExists
volumes:
- ./h2/:/opt/h2-data
restart: always
app:
#build: # 로컬에서 Dockerfile 참조하던 설정 주석 처리
# context: .
# dockerfile: Dockerfile
container_name: spring-app
image: lordofkangs/spring_app # 도커허브에 등록된 이미지명
ports:
- 5000:8080
environment:
SPRING_DATASOURCE_URL: jdbc:h2:tcp://h2:1521/demo
SPRING_DATASOURCE_USERNAME: sa
SPRING_DATASOURCE_PASSWORD:
SPRING_JPA_HIBERNATE_DDL_AUTO: create
depends_on:
- db
app 시스템에서 로컬영역의 Dockerfile을 참조하도록 하는 설정을 주석처리하고 image 설정을 추가하여 도커허브에서 이미지를 pull 하도록 설정해놓았다. 이로써 docker-compose.yml만 있으면 컨테이너를 띄어 Application을 동작할 수 있게 되었다.
5. 테스트 해보기
--platform으로 설정했던 환경에서 도커 컴포즈로 컨테이너가 정상 동작하는지 확인해보자.
위 환경은 우분투 20.04 버전이고 x64 운영환경이다.
여기에 docker-compose.yml 파일 하나만 위치시켰다.
도커 컴포즈를 실행하려면 도커환경을 설치해야한다. 이는 아래 포스팅을 참고하면 된다.
그럼 도커 컴포즈를 실행해보자.
> sudo docker get install docker-compose #도커 컴포즈 설치하기
> docker-compose up #도커 컴포즈 실행하기
도커 컴포즈를 실행하면 자동으로 Spring 컨테이너와 Docker 컨테이너가 생성되고 SpringBoot Application이 동작한다.
url : localhost:5000
웹사이트 또한 잘 기동 되었음을 확인할 수 있다.
이처럼 도커 이미지를 도커 허브에 등록해놓으면 언제 어디서든 도커 환경에 마련된 곳이라면 소스가 없더라도 컨테이너를 띄어 프로그램을 기동시킬 수 있다.