-
Springboot+mysql+gradle+jenkins : Docker compose 사용하기 1편프로그래밍/Docker 2021. 2. 23. 17:58
목표 :
1. Ubuntu 에 Jenkins 를 올려서 gradle + springboot + jpa 웹 어플리케이션 자동 빌드 & 배포 시스템 구축
2. DBMS는 mysql을 사용하고 다른 컨테이너에 올려서 링크
3. 웹 컨테이너에서 Jenkins:30000, 웹:8080를 사용하고 DB 컨테이너에서는 mysql:3306 사용할 예정
(웹 컨테이너에는 Tomcat 없이 gradle 내장 tomcat 사용하여 배포 예정임)
4. 내 도커 허브에 이미지 올려놓고 사용하기
일단 나의 환경은 Windows 10 을 사용중이고, Intelli J 를 사용하여 gradle+springboot+jpa 웹 어플리케이션을 개발하는 중이였으며, 직접 mysql 설치하여 heidiSQL을 활용하는 상황이다.
로컬 환경에서 gradle 내장 tomcat으로 빌드 및 배포를 하였다.
1. 웹 컨테이너 이미지 만들고 Docker hub 에 올려놓기
가장 많은 시간을 할애했던 작업..! 결론부터 말하자면?
Ubuntu 20.04 버전의 베이스 이미지로 컨테이너를 만들고 필요한 각종 패키지들과 프로토콜들을 설치하고 설정하였다.그리고 내 Docker hub 계정 연동해서 만든 컨테이너를 이미지화 한 다음 push 해서 올렸다.
( == 어디서든 내 도커허브에 접근해서 해당 이미지 땡겨와서 사용 가능! 너무 편해! )출발!
0) CMD 창을 연다!
( 우린 마우스를 안쓰는 멋쟁이들이니까 Windows키 + r 하여 실행 창을 열고 "cmd" 입력하고 엔터를 누르자! )
1) Ubuntu 베이스 이미지 땡겨오기
C:\Users\Alexible> docker pull ubuntu:latest
위의 명령어를 통해 가장 최신버전의 ubuntu 이미지를 pull 해서 가져온다.
2) Ubuntu 컨테이너 만들기
C:\Users\Alexible> docker images REPOSITORY TAG IMAGE ID CREATED SIZE jenkins/jenkins latest 40afe17d4955 13 days ago 581MB ubuntu latest f63181f19b2f 4 weeks ago 72.9MB mysql latest c8562eaf9d81 5 weeks ago 546MB openjdk 14-jdk 77606ea825b1 4 months ago 523MB
위의 명령어로 최신 버전의 ubuntu 이미지가 잘 땡겨져 왔는지 확인한다! 2번째 줄에 아주 잘 땡겨져왔다.
자 이제 이미지를 기반으로 alexible 이라는 이름의 컨테이너로 실행시켜보자!
C:\Users\Alexible> docker run -it -p 80:8080 -p 30000:30000 --name alexible ubuntu:latest
run 명령어로 도커를 실행시켰다.
- -it 옵션은 컨테이너를 종료하지 않고 터미널의 입력을 계속해서 컨테이너로 전달하기 위해서 사용한다.
( 지금 열린 cmd 창에서 바로 CLI 환경의 도커 컨테이너로의 접속이 가능해유! ) - --name 옵션은 컨테이너에 이름을 지어줄 때 사용한다.
( 부여해준 이름으로 컨테이너를 식별할 수 있게 되니 유용하게 사용해보시길! ) - -p 옵션은 호스트와 컨테이너 간의 포트(port) 배포(publish)/바인드(bind)를 위해서 사용한다. 호스트(host) 컴퓨터에서 컨테이너가 리스닝하고 있는 포트로 접속할 수 있도록 설정해준다.
-p 80:8080 -p 30000:30000 내가 입력한 옵션 값으로는 호스트에서 80, 30000포트로 접근 시 컨테이너에서 8080, 30000 포트로 접근 가능하게 된다.
( 나는 웹앱으로 활용을 위해 8080, 젠킨스 사용을 위해 30000 포트를 사용했다! )
위의 명령어를 입력하고 문제가 없다면? 아래와 같이 cmd 창에서 도커 컨테이너가 cli 로 열려라 참깨 한다.
C:\Users\Alexible> docker run -it -p 80:8080 -p 30000:30000 --name alexible ubuntu:latest root@5b843d04a521:/# root@5b843d04a521:/#
자, 이제 이 컨테이너를 나의 놀이터/실험실로 만들기 위하여 이것 저것 설치를 해보자!
나는 아래와 같은 것들을 설치하였다.
1) net-tools : Ubuntu 20.04 에서 제공하지 않는 ifconfig, netstat 등을 사용할 수 있게 해주는 패키지
2) openjdk-8-jre : Jenkins 설치를 위한 8버전의 jdk
3) vim : 대표적인 편집기
4) git : 프로그램 등의 소스 코드 관리를 위한 분산 버전 관리 시스템
시작하기 전 apt-get을 통해 설치를 할 것이기 때문에 먼저 업데이트와 업그레이드를 해준 후 설치를 진행한다.
root@7ab761ab8680:/# apt-get update root@7ab761ab8680:/# apt-get upgrade root@7ab761ab8680:/# apt-get install net-tools root@7ab761ab8680:/# apt-get install 설치를_원하는_패키지_이름
3) 정성스레 구성한 컨테이너 이미지화 하여 Docker Hub에 올리기
docker commit 컨테이너이름 Repository/이미지이름:태그 C:\Users\Alexible\Desktop> docker commit alexible alex_ubuntu/alexible_test:ubuntu_1.0 sha256:119eb03df37a558d221db7ef4bb69716aa45dc112ee8d3dcc67a5618f547c655
docker commit 명령어로 컨테이너의 현재 상태를 "ubuntu_1.0" 태그의 "alexible_test" 이라는 이미지 파일을 "alex_ubuntu" 저장소에 생성한다.
C:\Users\Alexible\Desktop> docker images REPOSITORY TAG IMAGE ID CREATED SIZE jenkins/jenkins latest 40afe17d4955 13 days ago 581MB ubuntu latest f63181f19b2f 4 weeks ago 72.9MB mysql latest c8562eaf9d81 5 weeks ago 546MB openjdk 14-jdk 77606ea825b1 4 months ago 523MB alex_ubuntu/alexible_test ubuntu_1.0 def6b0094ed7 5 weeks ago 72.9MB
docker images 명령어로 이미지들을 확인해보면 맨 아래에 "alex_ubuntu" 이름의 이미지가 생성되었음을 확인할 수 있다!
이제 이 이미지를 내 도커 허브에 올려보자!
docker push Repository/이미지이름:태그 C:\Users\Alexible\Desktop> docker push alexible/alex_ubuntu:1.0 The push refers to repository [docker.io/alexible/alex_ubuntu] ec4278e8fe25: Pushed 1.0: digest: sha256:27b8842ad06ee9e184b0e5ee7dd1b2dc6207214194e7db852dd2400abec7f22e size: 1156
docker push 명령어로 이미지 파일을 허브에 올리고 확인해본다!
허브에 이미지 파일이 잘 올라간 모습! 잘 올라간 걸 확인했다면? 다음 2편에서!
꿀팁 꿀팁 개꿀팁
이미지 이름에 Docker Hub 계정 이름(Docker Hub의 네임스페이스)을 반드시 포함하세요!
그냥 막 지었을 경우????? == docker login 해도 저장소로 푸시가 되지 않고 오류를 뿜어냅니다.
denied: requested access to the resource is denied 이와 같은 오류가 발생할 수 있습니다!
- -it 옵션은 컨테이너를 종료하지 않고 터미널의 입력을 계속해서 컨테이너로 전달하기 위해서 사용한다.