DockerFile 을 이용하여 나만의 Docker Image [Tomcat+Jenkins] 만들기

[설치 구성 : Centos 7.x, Tomcat 9.x,Jenkins 2.319.2] docker-compose.yml 설정 포함

2022년 NHN Cloud 무료 교육일정 : https://doc.skill.or.kr/2022-NHN-Cloud-Education

2022년 NHN Cloud 행사/프로모션 정보 공유 : https://doc.skill.or.kr/2022-NHN-Cloud-Event-Promotion

1. 먼저 알아 두기

1.1 DockerFile 이란?

DockerFile 은 코드의 형태로 인프라를 구성하는 방법을 텍스트 형식으로 저장해 놓은 파일이며 docker build 를 사용하여 자신만의 이미지를 만들 수 있다.

1.2 Docker Build 란?

DockerFile 및 컨텍스트로부터 이미지를 빌드하는 Docker 명령

1.3 Docker-Compose 란?

Compose는 멀티 컨테이너 도커 애플리케이션을 정의하고 실행하는 도구이다. YAML 파일을 사용하여 애플리케이션의 서비스를 구성하며 하나의 명령을 가지고 모든 컨테이너의 생성 및 시작 프로세스를 수행한다.

1.4 Jenkins 란?

소프트웨어 개발 시 지속적 통합(continuous integration) 서비스를 제공하는 툴이다. 다수의 개발자들이 하나의 프로그램을 개발할 때 버전 충돌을 방지하기 위해 각자 작업한 내용을 공유 영역에 있는 Git등의 저장소에 빈번히 업로드함으로써 지속적 통합이 가능하도록 해 준다.

출처 : https://ko.wikipedia.org/wiki/%EC%A0%A0%ED%82%A8%EC%8A%A4_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4)

2. DockerFile을 이용하여 만들어 보자!!!

2.1 서비스 설계 구성

2.2 dockerfiles 폴더 구성

2.3 Docker Image 만들기(Tomcat + Jenkins)

dockerfile
FROM centos:7.9.2009

#서버 시간 설정
ENV TZ Asia/Seoul
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

#서버 홈폴더 설정
RUN mkdir /home/jenkins

#서버 yum update 및 openjdk 설치
RUN yum update -y && yum install epel-release java-11-openjdk-devel -y 

#tomcat+jenkins 압축 파일 복사
COPY apache-tomcat-9.0.8-pre-install.tar.gz /home/jenkins/apache-tomcat-9.0.8.tar.gz

#압축 해제
RUN cd /home/jenkins && tar -zxvf apache-tomcat-9.0.8.tar.gz

#서비스 포트 지정
EXPOSE 80

#작업 폴더 설정
WORKDIR /home/jenkins

#Tomcat 서비스 시작
CMD ["/home/jenkins/apache-tomcat-9.0.8/bin/catalina.sh", "run"]

2.4 DockerFile Build 후 Docker Hub 업로드 하기

Step1. docker loign

Step2. 작성 한 DockerFile 에서 빌드 하기

• docker build -t tomcat_mariadb:jenkins1.0 .

• docker images ## 로컬에 저장된 Docker Images 확인

Step3. 로컬에 만든 이미지 실행 및 확인

• docker run -d -p 80:80 tomcat_mariadb:jenkins1.0

Step4. Docker Hub 이미지 업로드

• docker tag tomcat_mariadb:jenkins1.0 bchwang/tomcat_mariadb:jenkins1.0

• docker push bchwang/tomcat_mariadb:jenkins1.0

Step5. Docker Hub 에 등록된 이미지 확인

• Docker Hub 에 개인 개정으로 로그인 후 Docker Image 및 Tag 확인 Step6. Docker Hub 에 등록된 이미지로 실행 하기

• docker run -d -p 80:80 bchwang/tomcat_mariadb:jenkins1.0

3. docker 를 이용하여 실행 하기

3.1 docker 실행 하기

# docker run --name project1 -d -p 80:80 bchwang/tomcat_mariadb:jenkins1.0
Unable to find image 'bchwang/tomcat_mariadb:jenkins1.0' locally
jenkins1.0: Pulling from bchwang/tomcat_mariadb
Digest: sha256:a44086d7242cd88c5e1abef7a99c5a5bd5fe1762e5eaa8ce58c2232e75eeff05
Status: Downloaded newer image for bchwang/tomcat_mariadb:jenkins1.0
e54875e866040c63e383de6424a516398ebe7ef3235994d4a2d9c9ffa895cd49

# docker ps
CONTAINER ID   IMAGE                               COMMAND                  CREATED          STATUS          PORTS                NAMES
2c12c471ad47   bchwang/tomcat_mariadb:jenkins1.0   "/home/jenkins/apach…"   24 seconds ago   Up 22 seconds   0.0.0.0:80->80/tcp   project1

# docker logs -f project1
07-Feb-2022 13:29:42.336 INFO [Finalizing set up] jenkins.install.SetupWizard.init

*************************************************************
*************************************************************
*************************************************************

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

75c34fe2059a4ec69b1d0e6e03e3ffed  #### Jenkins 초기 비밀번호    

This may also be found at: /root/.jenkins/secrets/initialAdminPassword

*************************************************************
*************************************************************
*************************************************************

3.2 Tomcat+Jenkins 설정 확인

3.2.1 Tomcat 설정 확인(server.xml)

Tomcat 서비스 포트(80) 설정 하기 위해 server.xml 파일을 수정 하여 적용

파일 위치 : /home/jenkins/apache-tomcat-9.0.8/conf

<Connector port="80" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

3.2.2 Tomcat 설정 확인(tomcat-user.xml)

Tomcat Manager 로그인 권한 및 계정/비밀번호 설정

-> 계정 : admin, 비밀번호 : 1234567890

파일 위치 : /home/jenkins/apache-tomcat-9.0.8/conf

  <role rolename="manager"/>
  <role rolename="manager-gui" />
  <role rolename="manager-script" />
  <role rolename="manager-jmx" />
  <role rolename="manager-status" />
  <role rolename="admin"/>
  <user username="admin" password="1234567890" roles="admin,manager,manager-gui, manager-script, manager-jmx,  manager-status"/>

3.2.3 Tomcat 설정 확인(context.xml)

Tomcat Manager 접근 제한 설정

-> 제한 없음 설정

파일 위치 : /home/jenkins/apache-tomcat-9.0.8/webapps/manager/META-INF

   <!--Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /-->

4. docker-compose.yml 을 이용하여 실행 하기

4.1 docker-compose.yml 파일

version: '2'

services:
  tomcat_jenkins1.0:
    image: bchwang/tomcat_mariadb:jenkins1.0
    ports:
      - '80:80'
    volumes:
      # data 폴더와 instance 폴더 동기  
      - "./data:/home/jenkins/data:rw"
      # context.xml 파일(Tomcat Manager 접근 제한 설정)        
      #- "./conf/context.xml:/home/jenkins/apache-tomcat-9.0.8/webapps/manager/META-INF/context.xml"
      # server.xml 파일(Tomcat Serivce Port 설정)
      #- "./conf/server.xml:/home/jenkins/apache-tomcat-9.0.8/conf/server.xml"
      # tomcat-users.xml 파일(Tomcat Manager User/Password 설정 :: admin / 1234) 
      #- "./conf/tomcat-users.xml:/home/jenkins/apache-tomcat-9.0.8/conf/tomcat-users.xml"

4.2 docker-compose 실행 방법

# docker-compose up -d
Creating network "jenkins_default" with the default driver
Creating jenkins_tomcat_jenkins1.0_1 ... done

# docker ps 
CONTAINER ID   IMAGE                               COMMAND                  CREATED         STATUS         PORTS                NAMES
450fb13bace8   bchwang/tomcat_mariadb:jenkins1.0   "/home/jenkins/apach…"   5 seconds ago   Up 3 seconds   0.0.0.0:80->80/tcp   jenkins_tomcat_jenkins1.0_1

# docker exec -it 450fb13bace8 /bin/bash
[root@450fb13bace8 jenkins]# ls
apache-tomcat-9.0.8  apache-tomcat-9.0.8.tar.gz  data

4.3 docker-compose 중지 방법

# docker-compose down
Stopping jenkins_tomcat_jenkins1.0_1 ... done
Removing jenkins_tomcat_jenkins1.0_1 ... done
Removing network jenkins_default

4.4 conf 폴더 파일 정보

#3.2-tomcat+jenkins에서 설정 파일 정보 확인

5. Tomcat+Jenkins 접속 화면

5.1 Tomcat Manager 접속 화면

http://localhost/manager/html 접속

5.2 Jenkins 접속 화면

http://localhost/jenkins/ 접속

00. 오류 해결하기

00.1 Jenkins Administrator 초기 비밀번호

Jenkins Admin 초기 비밀번호는 /root/.jenkins/secrets/initialAdminPassword 에 저장되어 있음.

# docker ps
CONTAINER ID   IMAGE                               COMMAND                  CREATED          STATUS          PORTS                NAMES
e06afb6798ff   bchwang/tomcat_mariadb:jenkins1.0   "/home/jenkins/apach…"   57 minutes ago   Up 57 minutes   0.0.0.0:80->80/tcp   project1

# docker exec -it e06afb6798ff /bin/bash
[root@e06afb6798ff jenkins]# cd 

[root@e06afb6798ff ~]# ls -alh
total 44K
dr-xr-x--- 1 root root 4.0K Feb  7 15:20 .
drwxr-xr-x 1 root root 4.0K Feb  7 15:18 ..
-rw-r--r-- 1 root root   18 Dec 29  2013 .bash_logout
-rw-r--r-- 1 root root  176 Dec 29  2013 .bash_profile
-rw-r--r-- 1 root root  176 Dec 29  2013 .bashrc
drwxr-x--- 3 root root 4.0K Feb  7 15:20 .cache
-rw-r--r-- 1 root root  100 Dec 29  2013 .cshrc
drwxr-x--- 3 root root 4.0K Feb  7 15:18 .java
drwxr-x--- 9 root root 4.0K Feb  7 15:19 .jenkins
-rw-r--r-- 1 root root  129 Dec 29  2013 .tcshrc
-rw------- 1 root root 3.4K Nov 13  2020 anaconda-ks.cfg

[root@e06afb6798ff ~]# cd .jenkins/secrets
[root@e06afb6798ff secrets]# ls -al initialAdminPassword
-rw-r----- 1 root root 33 Feb  7 15:18 initialAdminPassword

[root@e06afb6798ff secrets]# cat initialAdminPassword
0bac68086c2042899be70b9d984bae6e

또는 Tomcat Logs 폴더의 catalina.out 에 Jenkins admin 정보가 남겨져 있음.

002. Tomcat Manager 접속 에러 [403 Access Denied]

위의 그림과 같은 Tomcat Manager 접속 에러 [403 Access Denied] 화면인 경우 context.xml 설정파일을 확인하여야 함. #3.2.3-tomcat-context.xml참고

003. Tomcat Manager Login 안됨

Tomcat Manager 접속 하였을때 Login 이 안되는 경우 tomcat-users.xml 의 설정 값을 확인 하여야 함 . #3.2.2-tomcat-tomcat-user.xml 참고

2022년 NHN Cloud 무료 교육일정 : https://doc.skill.or.kr/2022-NHN-Cloud-Education

2022년 NHN Cloud 행사/프로모션 정보 공유 : https://doc.skill.or.kr/2022-NHN-Cloud-Event-Promotion

Last updated