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 서비스 설계 구성

구분Service

Docker Hub Base Image

Centos 7.9.2009

Developer

OpenJDK11

Service

Tocmat 9.0.8

Jenkins Src

Jenkins 2.319.2

Service Port

80

2.2 dockerfiles 폴더 구성

폴더 및 파일설명

dockerfile

DockerFile Build 파일

apache-tomcat-9.0.8-pre-install.tar.gz

Tomcat 설정 및 Jenkins 압축 파일

./conf/context.xml

Tomcat Manager 접근 제어 설정

./conf/server.xml

Tomcat Service 포트 설정

./conf/tomcat-user.xml

Tomcat Manager User/Password 설정

docker-compose.yml

docker-compose 실행 파일

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