ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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  이와 같은 오류가 발생할 수 있습니다!

    댓글