안녕하세요. IT Window 킷도우입니다.
명절 다들 잘 보내셨나요? ㅎㅎ 명절 이후 정말 오랜만에 다시 글을 써 봅니다.
지난 번 포스팅에서는 GCP VM(Ubuntu linux)에 도커를 설치하고 톰캣 9.0 버전 이미지를 도커 허브에서 다운 받아 VM에서 톰캣을 실행시키고 외부에서 해당 웹 서버로 접근하는 것까지 진행해 봤습니다.
최초 접근 시에는 404에러가 나서 결국 도커 컨테이너에 직접 터미널로 붙어 tomcat 디렉토리 구조를 변경하면서 해당 에러를 잡았었는데요. 못보신 분들은 아래 링크를 참조해 주시면 되겠습니다.
[Docker] 도커 설치, 톰캣 컨테이너 이미지 다운, 컨테이너 생성/시작/중지/삭제 방법(Docker run, start,
안녕하세요. IT Window 킷도우입니다. 지난 번 포스팅에서는 도커 컨테이너에 대해서 알아봤는데요. 못 보신 분들은 아래 링크 참고해주세요~ https://kitdow.tistory.com/24 [Docker] 도커란? 도커 컨테이너
kitdow.tistory.com
여기서 번거로운 점은 매번 우리가 톰캣 9.0 이미지를 다운 받을 때 마다 디렉토리 구조를 변경하는 수작업을 진행하는 것은 매우 비효율적이라는 겁니다. 이미지를 다운 받았을 때, 별도 변경 작업없이 곧바로 웹 서버에 접근할 수 있으면 참 좋을텐데 말이죠.
그래서 오늘 포스팅하려하는 내용이 바로 내가 만들고 조작한 컨테이너를 이미지화하여 내 도커 리포지토리로 배포(RELEASE)하는 방법에 대해서 알아보겠습니다. 그럼 바로 본론으로 들어가겠습니다.
1. 도커 계정 만들기(이미 계정이 있으시다면 생략)
우선 도커 사이트 계정이 없으신 분들은 아래 링크를 통해서 계정을 만들어 주시기 바랍니다.
회원가입 시 인증 가능한 이메일만 있으면 편하게 가입 가능하답니다.
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. VM에서 도커 로그인
이제 GCP로 다시 넘어와 VM(가상머신)에서 도커 허브와 연동을 위한 로그인을 진행해 주겠습니다.
docker login 명령어를 입력하고 username/password를 입력하여 로그인을 진행합니다.
주의할 점은 여기서 username은 도커 허브 로그인할 떄 ID가 아닌 회원가입시 지정한 username입니다.
root@instance-1:~# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: kitdow
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
3. 이미지화(DOCKER COMMIT)
네 이제 제가 지지고 복고 조작한 도커 컨테이너를 이미지화하는 작업을 해보겠습니다. 컨테이너를 이미지화 하기 전에 컨테이너의 상태를 한 번 조회해 보겠습니다.
root@instance-1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9e8f0510bc16 tomcat:9.0.70-jdk8-corretto "catalina.sh run" 2 weeks ago Up 2 weeks 0.0.0.0:80->8080/tcp, :::80->8080/tcp tomcat
부끄럽지만 약 2주 전에 tomcat이라는 이름으로 컨테이너를 만들었었네요...
docker commit 명령어를 활용해 이미지화를 진행하겠습니다.
root@instance-1:~# docker commit -a "kitdow" -m "kitdow tomcat9.0 customizing version" tomcat kitdow/tomcat
sha256:a8c4e8c5e22cdeae385cc6991707553c3f94bdac455a9785ba716503de2d851c
이미지가 성공적으로 만들어지면 위와 같이 해시값이 찍히는 것을 볼 수 있습니다.
docker commit 명령어의 옵션을 살펴보면
-a : author의 약자로 이미지를 만든 사람을 식별하도록 작성해 주면 됩니다.
-m : message의 약어로 해당 컨테이너 관련 설명을 간략히 적어주시면 되겠습니다.
tomcat kitdow/tomcat : 해당 구문에서 tomcat은 현재 AS-IS에서 돌고 있는 컨테이너의 이름입니다. 그리고 kitdow/tomcat은 도커 허브에 올릴 컨테이너 이미지의 이름입니다. 보통 username을 사용해서 프로젝트를 분리하기 때문에 위와 같은 형식으로 사용해서 관리하길 바랍니다.
그러면 이미지가 정상적으로 만들어졌는지 최종 확인해 보겠습니다.
root@instance-1:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kitdow/tomcat latest a8c4e8c5e22c 13 minutes ago 385MB
tomcat 9.0.70-jdk8-corretto 616d03c63d58 6 weeks ago 379MB
kitdow/tomcat 이라는 이름으로 이미지가 정상적으로 만들어진 것을 확인할 수 있습니다.
4. 배포(RELEASE)
이제 이렇게 만든 이미지를 도커 허브로 배포해 보겠습니다. 배포할 땐 docker push 명령어를 활용합니다.
root@instance-1:~# docker push kitdow/tomcat
Using default tag: latest
The push refers to repository [docker.io/kitdow/tomcat]
d4a8eedc0bf0: Pushed
6b65001500db: Mounted from library/tomcat
2b4da7b72fe8: Mounted from library/tomcat
a4a7e924299e: Mounted from library/tomcat
059c2d42be74: Mounted from library/tomcat
3f800aca2a44: Mounted from library/tomcat
latest: digest: sha256:8aa71d3b47132a9fb46ac84168b05916aded34195064af8a43ae8a5891f8e186 size: 1579
위처럼 메시지가 나왔다면 정상적으로 업로드된 것인데요. 실제로 도커 허브에 잘 올라갔는지 확인해 보겠습니다.
도커 허브 사이트에서 로그인하여 아래 이미지처럼 우측 상단에 My Profile을 선택합니다.

위처럼 Repositories 탭에 이미지가 만들어졌다면 성공적으로 업로드된 것입니다.
5. 내가 만든 도커 이미지를 다시 다운받아 톰캣 실행시키기
최종 검증을 위해 VM에 설치된 모든 이미지를 지우겠습니다.
아래 코드를 참조해 지워주세요.
root@instance-1:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kitdow/tomcat latest a8c4e8c5e22c 25 minutes ago 385MB
tomcat 9.0.70-jdk8-corretto 616d03c63d58 6 weeks ago 379MB
root@instance-1:~# docker rmi a8c4e8c5e22c
Untagged: kitdow/tomcat:latest
Untagged: kitdow/tomcat@sha256:8aa71d3b47132a9fb46ac84168b05916aded34195064af8a43ae8a5891f8e186
Deleted: sha256:a8c4e8c5e22cdeae385cc6991707553c3f94bdac455a9785ba716503de2d851c
Deleted: sha256:c2ee999ee9af818b6e9292e0272e65f64684cc3c51b51fe5d702d32bdb2ce89b
root@instance-1:~# docker rmi 616d03c63d58
Error response from daemon: conflict: unable to delete 616d03c63d58 (cannot be forced) - image is being used by running container 9e8f0510bc16
root@instance-1:~# docker stop tomcat
tomcat
root@instance-1:~# docker rm tomcat
tomcat
root@instance-1:~# docker rmi 616d03c63d58
Untagged: tomcat:9.0.70-jdk8-corretto
root@instance-1:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
마지막에 docker images 명령어로 확인 결과 다운받은 이미지가 아무것도 없는 것을 확인할 수 있습니다.
이제 docker pull 명령어를 활용해 내가 만든 이미지(kitdow/tomcat)를 VM으로 다운받아 보겠습니다.
root@instance-1:~# docker pull kitdow/tomcat
Using default tag: latest
latest: Pulling from kitdow/tomcat
5b4a36b5b78f: Pull complete
898f795353af: Pull complete
94fd12e86882: Pull complete
caadd07757b1: Pull complete
7be37fca6778: Pull complete
93a2f0e951f4: Pull complete
Digest: sha256:8aa71d3b47132a9fb46ac84168b05916aded34195064af8a43ae8a5891f8e186
Status: Downloaded newer image for kitdow/tomcat:latest
docker.io/kitdow/tomcat:latest
root@instance-1:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kitdow/tomcat latest a8c4e8c5e22c 31 minutes ago 385MB
이제 컨테이너를 실행해 tomcat 디렉토리 변경없이도 404에러가 뜨지 않고 tomcat 웹 메인 화면이 나오는지 확인해 보겠습니다. docker run 명령어를 활용해 컨테이너를 기동시키겠습니다.
root@instance-1:~# docker run -it -d -p 80:8080 kitdow/tomcat
e3fafd78e7ab74fb9fc36c37def31c4d66593ae333d576f6ef51fb39b1d4e82f
root@instance-1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e3fafd78e7ab kitdow/tomcat "catalina.sh run" 18 seconds ago Up 17 seconds 0.0.0.0:80->8080/tcp, :::80->8080/tcp affectionate_curie
GCP 외부 IP로 톰캣 서버에 접근해 보겠습니다.

네 이렇게 별도 변경 작업 없이 톰캣 화면이 뜨시는 것을 확인할 수 있습니다.
다음 시간에 더 유익한 정보로 찾아 뵙겠습니다. 감사합니다!
댓글