실행환경

- Windows 10 WSL(Ubuntu 20.04.3 LTS)

- Docker Compose version v2.2.3

- Docker version 20.10.12

 

DockerFile 이란?
DockerFile 은 코드의 형태로 인프라를 구성하는 방법을 텍스트 형식으로 저장해 놓은 파일이며 docker build 를 사용하여 자신만의 이미지를 만들 수 있다.
Docker-Compose 란?
다중 컨테이너 애플리케이션을 정의하고 공유할 수 있도록 개발된 도구입니다. Compose에서 서비스를 정의하는 YAML 파일을 만들고, 단일 명령을 사용하여 모두 실행하거나 모두 종료할 수 있습니다. 즉 여러 컨테이너를 YAML 파일로 관리할 수 있습니다.
 
 
2. DockerFile을 이용하여 만들어 보자!
2.1 서비스 설계 구성
  DataBase Server WEB/WAS Service
Docker Hub Base Image mariadb:10.4.18 Ubuntu 20.04
OS Ubuntu 20.04.2 LTS Ubuntu 20.04.2 LTS
Service Mariadb 10.4.18
 
Nginx 1.18.0
Tomcat 9.0.45
Developer  
OpenJDK 1.8.x
Maven 3.8.1
NodeJS 14.16.1
Dev Source   USE Github
Service Port 3306 80, 8080
 

2.2 아키텍처 구성도

대규모 3-Tier 구성 : 로드 발란스를 이용하여 3-Tier 구성을 확장하는 방식.
2.3 Database(Mariadb:10.4.18) Docker Image 만들기
 
- deverse.sql 파일
 
 
- db_user.sql 내용
create database demodb;
USE demodb;
GRANT ALL PRIVILEGES ON *.* TO 'devers'@'localhost' IDENTIFIED BY '1234' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'devers'@'%' IDENTIFIED BY '1234' WITH GRANT OPTION;
FLUSH PRIVILEGES;

 

- dockerfile 내용

### Base Image 지정    
FROM mariadb:10.4.18  

### TimeZone 환경 변수 지정
ENV TZ Asia/Seoul  

### Mariadb root 비밀번호 설정
ENV MYSQL_ROOT_PASSWORD=root

### Mariadb Database 생성  
ENV MYSQL_DATABASE=deverse      

### TimeZone 설
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

### Mariadb User 및 DB 스키마 설정 스크립
ADD deverse.sql /docker-entrypoint-initdb.d/deverse.sql
ADD db_user.sql /docker-entrypoint-initdb.d/db_user.sql

### 홈 디렉토리
WORKDIR /home/dev

### 서비스 포
EXPOSE 3306
 
 
소스 파일은 Github 에서 참고 하시기 바랍니다.
 
2.4 Nginx & Tomcat(ubuntu:20.04) Docker Image 만들기
- dockerfile 내용
### Base Image 지정
FROM ubuntu:20.04

### TimeZone 환경 변수 지정
ENV TZ Asia/Seoul

### TimeZone 설정    
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

### /home/dev 폴더 생성
RUN mkdir /home/dev

### update 및 패키지 설치     
RUN apt update && apt -y install vim git tar gzip build-essential curl alien openjdk-8-jdk nginx

### nodejs 설
RUN curl -sL https://deb.nodesource.com/setup_14.x -o nodesource_14_setup.sh && bash nodesource_14_setup.sh && apt -y install nodejs

### build, tomcat, maven, nginx(default.conf) 파일 복사   
COPY build.tar.gz /home/dev/build.tar.gz
COPY tomcat-9.0.45.tar.gz /home/dev/tomcat-9.0.45.tar.gz
COPY apache-maven-3.8.1.tar.gz /home/dev/apache-maven-3.8.1.tar.gz
COPY default.conf /etc/nginx/conf.d/default.conf

### ubuntu01 계정 생성
RUN addgroup --gid 1100 ubuntu01 && adduser --disabled-password --home /home/dev --no-create-home --system -q --uid 1000 --ingroup ubuntu01 ubuntu01

### Github Source 파일 다운로드     
RUN git clone https://github.com/bc-hwang/TEST.git /home/dev/deverse

### /home/dev 폴더 이동   
WORKDIR /home/dev

### 암축 파일 해제    
RUN tar -zxvf apache-maven-3.8.1.tar.gz
RUN tar -zxvf tomcat-9.0.45.tar.gz
RUN tar -zxvf build.tar.gz

### maven link 설정
RUN ln -s /home/dev/apache-maven-3.8.1/bin/mvn /usr/bin/mvn

### Build 실행
RUN cd /home/dev/build && bash ./back_build.sh
RUN cd /home/dev/build && bash ./front_build.sh

### Nginx & Tomcat Service 실행    
CMD nginx -g 'daemon on;' && /home/dev/tomcat-9.0.45/bin/catalina.sh run

### 서비스 포
EXPOSE 80 8080
 
 소스 파일은 Github 에서 참고 하시기 바랍니다.
 
docker image를 생성하는 명령어입니다.
 
$ docker build -t tomcat_mariadb:mariadb -f nginx-image.dockerfile .
 
 
 
2.5 DockerFile Buil 하기 후 Docker Hub 에 업로드 하기

Database(mariadb:10.4.18) image 생성 및 업로드

Step1. docker loign 

Step2. 작성 한 DockerFile 에서 빌드 하기
  • docker build -t tomcat_mariadb:mariadb .
  • docker images ## 로컬에 저장된 Docker Images 확인

Step3. 로컬에 만든 이미지 실행 및 확인
  • docker run –d tomcat_mariadb:mariadb 

Step4. Docker Hub 이미지 업로드
  • docker tag tomcat_mariadb:mariadb <docker_id>/tomcat_mariadb:mariadb
  • docker push <docker_id>/tomcat_mariadb:mariadb  

Step5. Docker Hub 에 등록된 이미지 확인
  • Docker Hub 에 개인 개정으로 로그인 후 Docker Image 및 Tag 확인
 
 
 
Nginx&Tomcat(ubuntu:20.04) 이미지 생성 및 업로드
Step1. docker loign 

Step2. 작성 한 DockerFile 에서 빌드 하기
  • docker build -t tomcat_mariadb:nginx_tomcat .
  • docker images ## 로컬에 저장된 Docker Images 확인

Step3. 로컬에 만든 이미지 실행 및 확인
  • docker run –d –p 80:80 tomcat_mariadb: nginx_tomcat 

Step4. Docker Hub 이미지 업로드
  • docker tag tomcat_mariadb:nginx_tomcat bchwang/tomcat_mariadb:nginx_tomcat 
  • docker push bchwang/tomcat_mariadb: nginx_tomcat 

Step5. Docker Hub 에 등록된 이미지 확인
  • Docker Hub 에 개인 개정으로 로그인 후 Docker Image 및 Tag 확인
 
 
 
 
 
 
 
 
소스 파일은 Github 에서 참고 하시기 바랍니다.
2.6.2 Docker Hub Image 를 이용하여 docker-compose.yml 만들기
docker-compose.yml
1
### 빌드할 버전
2
version: '2'
3
4
### 서비스 설정
5
services:
6
mariadb:
7
image: bchwang/tomcat_mariadb:mariadb
8
restart: always
9
10
nginx-tomcat:
11
image: bchwang/tomcat_mariadb:nginx_tomcat
12
restart: always
13
ports:
14
- 80:80
15
links:
16
- mariadb
 
Copied!
3. NHN Cloud 를 이용한 Kubernetes 서비스를 구축 방법
3.1 커뮤니티 블로그 서비스 Yaml 설정 하기
NHN Cloud 를 이용하여 커뮤니티 블로그 서비스를 Kubernetes 로 구축 하는 방법을 소개해 드립니다.
아래의 내용을 따라 하시거나 GitHub 의 소스 파일을 참고 시기 바랍니다.
3.2 NameSpace Yaml
1
apiVersion: v1
2
kind: Namespace
3
metadata:
4
name: project
 
Copied!
3.3 Mariadb Yaml
1
apiVersion: apps/v1
2
kind: Deployment
3
metadata:
4
name: tomcat-mariadb
5
labels:
6
app: mariadb
7
namespace: project
8
spec:
9
replicas: 1
10
selector:
11
matchLabels:
12
app: mariadb
13
template:
14
metadata:
15
labels:
16
app: mariadb
17
spec:
18
hostname: mariadb
19
containers:
20
- name: mariadb
21
image: bchwang/tomcat_mariadb:mariadb
22
ports:
23
- containerPort: 3306
24
name: mariadb
 
Copied!
3.4. Mariadb Service Yaml
1
apiVersion: v1
2
kind: Service
3
metadata:
4
name: tomcat-mariadb
5
labels:
6
app: mariadb
7
namespace: project
8
spec:
9
clusterIP: None
10
ports:
11
- port: 3306
12
selector:
13
app: mariadb
 
Copied!
3.5 Nginx & Tomcat Service Yaml
1
apiVersion: v1
2
kind: Service
3
metadata:
4
name: nginx-tomcat
5
labels:
6
app: nginx-tomcat
7
namespace: project
8
## 오브젝트 선언형 관리
9
annotations
10
## Floating ip 유지 설정
11
loadbalancer.openstack.org/keep-floatingip: "true"
12
spec:
13
ports:
14
- port: 80
15
protocol: TCP
16
targetPort: 30000
17
selector:
18
app: nginx-tomcat
19
## NodePort 가 아니라 LoadBalancer 로 설정 해 주어야 함.
20
type: LoadBalancer
21
## Floating ip 를 지정 하여 Loadbalancer ip 로 설정.
22
loadBalancerIP: 133.186.216.107
 
Copied!
3.6 Nginx & Tomcat Yaml
아래의 내용 중 hostAliases 의 ip 정보가 mariadb 의 IP 정보를 입력 하여야 함.
Mariadb 를 실행 한 후에 kuberctl get pod -n project 로 나온 IP 값을 입력 하면 됨.
1
apiVersion: apps/v1
2
kind: Deployment
3
metadata:
4
name: nginx-tomcat
5
labels:
6
app: nginx-tomcat
7
namespace: project
8
spec:
9
replicas: 10
10
selector:
11
matchLabels:
12
app: nginx-tomcat
13
template:
14
metadata:
15
labels:
16
app: nginx-tomcat
17
name: nginx-tomcat
18
spec:
19
hostname: nginx-tomcat
20
hostAliases:
21
- ip: "10.100.4.9" ### mariadb hosts 지정
22
hostnames:
23
- "mariadb"
24
containers:
25
- name: nginx-tomcat
26
image: bchwang/tomcat_mariadb:nginx_tomcat
27
ports:
28
- containerPort: 80
29
name: nginx-tomcat
 
Copied!
 
소스 파일은 Github 에서 참고 하시기 바랍니다.
3.7 커뮤니티 블로그 서비스 Yaml 실행 하기
NHN Cloud Manager Server 에 접속 하여 실행 함
1
### mariadb 및 서비스 실행
2
$ kubectl apply -f 1.kubernetes_mariadb+service.yaml
3
4
### Mariadb Pod 실행 및 IP 정보 확인
5
$ kubectl get pod -n project -o wide
6
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
7
mariadb-service-59868b7dd6-xb8tq 1/1 Running 0 1m 10.100.4.9 kubernetes <none> <none>
8
9
### ip 입력 후 nginx & tomcat 실행
10
kubectl apply -f 2.kubernetes_nginx+tomcat.yaml
11
12
### Pod 실행 및 IP 정보 확인
13
$ kubectl get pod -n project -o wide
14
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
15
mariadb-service-59868b7dd6-xb8tq 1/1 Running 0 1m 10.100.4.9 kubernetes <none> <none>
16
nginx_tomcat-service-59868b7dd6-xb8tq 1/1 Running 0 1m 10.100.4.10 kubernetes <none> <none>
17
18
### Service 정보 확인
19
$ kubectl get service -n project -o wide
20
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
21
nginx_tomcat nginx_tomcat LoadBalancer 133.186.216.107 <none> 80/TCP 8m4s app=nginx_tomcat
22
mariadb mariadb ClusterIP <none> <none> 3306/TCP 18m4s app=mariadb
 
Copied!
3.8 공인 IP로 접속 한 화면
4. GitHub 정보 및 커뮤니티 블로그 소개
4.1 개발 환경
  •  
    Ubuntu/20.x (OS)
  •  
    mariadb/10.4.18 (DB Service)
  •  
    tomcat/9.0.45 (WAS Service)
  •  
    nginx/1.18.0 (WEB Service)
  •  
    OpenJDK/1.8.x
  •  
    Maven/3.8.1
  •  
    NodeJS/14.6.1
4.2 NHN Cloud Kubernetes & Docker 사용해 보기
A. DockerFile 을 이용하여 Docker Images 만들기(Tomcat, Mariadb)
  •  
    Dockerfile 을 이용하여 Mariadb 이미지 만들기
1
- /install/mariadb/db_user.sql (DB 계정 스크립트)
2
- /install/mariadb/devers.sql (DB 스키마 스크립트)
3
- /install/mariadb/dockerfile (Docker Image 스크립트)
 
Copied!
  •  
    Dockerfile Build 방법(mariadb Image)
1
- /install/mariadb 의 폴더에 dockerfile 을 확인 후 아래 명령어 실행
2
-> docker build -t tomcat_mariadb:mariadb .
3
- docker images (tomcat_mariadb:mariadb 이미지 확인)
 
Copied!
  •  
    Dockerfile 을 이용하여 nginx_tomcat 이미지 만들기
1
- /install/nginx_tomcat/apache-maven-3.8.1.tar.gz (maven src 파일)
2
- /install/nginx_tomcat/tomcat-9.0.45.tar.gz (tomcat src 파일)
3
- /install/nginx_tomcat/build.tar.gz (src build 파일)
4
- /install/nginx_tomcat/dockerfile (Docker Image 스크립트)
5
- /install/nginx_tomcat/default.conf (nginx 설정 파일)
6
- /install/nginx_tomcat/nginx.conf (nginx 설정 파일)
 
Copied!
  •  
    Dockerfile Build 하는 방법(nginx_tomcat Image)
1
- /install/nginx_tomcat 의 폴더에 dockerfile 을 혹인 후 아래 명령어 실행
2
-> docker build -t tomcat_mariadb:nginx_tomcat .
3
- docker images (tomcat_mariadb:nginx_tomcat 이미지 확인)
 
Copied!
  •  
    Docker Hub push 하는 방법
1
- docker login 을 함.
2
- docker tag tomcat_mariadb:nginx_tomcat bchwang/tomcat_mariadb:nginx_tomcat (tag 설정)
3
- docker tag tomcat_mariadb:mariadb bchwang/tomcat_mariadb:mariadb (tag 설정)
4
- docker push bchwang/tomcat_mariadb:nginx_tomcat (docker hub 에 업로드 진행)
5
- docker push bchwang/tomcat_mariadb:mariadb (docker hub 에 업로드 진행)
 
Copied!
B. Build 된 Tomcat, Mariadb Images 실행 하기
  •  
    docker images 확인 하기
1
- docker images
 
Copied!
  •  
    Local Image 로 실행 하기
1
- docker run -d --name mariadb tomcat_mariadb:mariadb
2
- docker run -d --name tomcat -p 80:80 --link mariadb tomcat_mariadb:nginx_tomcat
 
Copied!
  •  
    docker Hub Image 로 실행 하기
1
- docker run -d --name mariadb bchwang/tomcat_mariadb:mariadb
2
- docker run -d --name tomcat -p 80:80 --link mariadb bchwang/tomcat_mariadb:nginx_tomcat
 
Copied!
C. Docker-Compose 사용하기
  •  
    Local Images 로 실행 하기
1
- /install/docker-compose_local.yml (docker-compose 설정 값 Local Images 사용)
 
Copied!
  •  
    Docker Hub 에 Push 한 Images 로 실행 하기
1
- /install/docker-compose.yml (docker-compose 설정 값 Docker Hub Images 사용)
 
Copied!
D. NHN Cloud Kubernetes 로 사용하기
  •  
    NHN Cloud 회원 가입 및 Console 로그인 : http://toast.com
  •  
    NHN Cloud Console 에 Kubernetes Manager Instance 생성
1
- NHN Cloud Console 접속 -> Compute -> Instance -> 인스턴스 생성
2
- 이미지(Ubuntu Server 20.04 LTS) -> 인스턴스 이름(kube-manager) -> 인스턴스 타입(Standard : t2.c1m1) -> 키 페어 선택(생성 or 기존에 사용하던것)
3
-> 블록 스토리지 타입(HDD or SDD) -> 블록 스토리지 크기(50~100GB) -> 인스턴스 생성
 
Copied!
  •  
    NHN Cloud Console 에서 Kubernetes 생성
1
- NHN Cloud Console 접속 -> Container -> Kubernetes -> 클러스터 생성
2
- 클러스터 이름(kube-master) -> 인스턴스 타입(Standard : m2.c8m16) -> 노드 수(2~3개) -> 키 페어 선택(생성 or 기존에 사용하던것)
3
-> 블록 스토리지 타입(HDD or SDD) -> 블록 스토리지 크기(50~100GB) -> 오토 스케일러(사용 or 사용 안 함) -> 클러스터 생성
 
Copied!
  •  
    NHN Cloud Console 에서 SSH 접속 설정
1
- NHN Cloud Console 접속 -> Network -> Security Groups -> Default 선택 -> 보안정책 생성 -> 포트: 22, 원격 공인IP 입력(ex 포트: 22, CIDR: 111.111.111.111/32) 후 확인
2
- 자세한 사항은 https://docs.toast.com/ko/Compute/Instance/ko/overview/#linux (SSH 접속 방법) 참고
 
Copied!
  •  
    NHN Cloud 에서 생성된 Instance(Kube-manager) 접속 방법 및 Kubernetes 연결 방법
1
- https://doc.skill.or.kr/nhn-cloud#5-2-kube-manager-api 에서 NHN Cloud Kubernetes API 설정 방법
 
Copied!
  •  
    NHN Cloud 에서 Kubernetes 를 이용하여 서비스 사용하기
1
- /install/1.kubernetes_mariadb+service.yaml (mariadb Pod/Service 등 설정 값)
2
-> kubectl apply -f 1.kubernetes_mariadb+service.yaml (mariadb pod 와 Service 실행) -> kubectl get pod -n project -o wide (Mariadb IP 확인)
3
- /install/2.kubernetes_nginx+tomcat.yaml (tomcat Pod 설정 값)
4
-> vi 2.kubernetes_nginx+tomcat.yaml (- ip: "10.100.4.9" 의 값을 Mariadb IP 로 수정) -> kubectl apply -f 2.kubernetes_nginx+tomcat.yaml (Nginx 와 Tomcat Pod 실행)
5
- Build 설정 파일
6
- nginx+tomcat Server 접속
7
- /home/dev/build/application.yml 에 DB 접속 정보 설정
8
- /home/dev/deverse/frontend/.env.build 에 url 접속 정보 설정
 
Copied!
TIPs.1 DockerFile 기본 형식 자세히 알아 보기
TIPs 1.1 DockerFile 기본 형식
Command
Description
FROM
베이스 이미지 지정
RUN
명령어 실행
CMD
데몬 실행
LABEL
라벨 설정
EXPOSE
포트 설정
ENV
환경 변수 설정
ADD
파일 추가
COPY
파일 복사
USER
사용자 설정
WORKDIR
작업 디렉토리 지정
VOLUME
볼륨 마운트
ENTRYPOINT
데몬 실행
ONBUILD
빌드 후 실행 명
TIPs 1.2 Docker Build 기본 형식
Name, Shorthand
Default
Description
--add-host
Add a custom host-to-IP mapping (host:ip)
--build-arg
Set build-time variables
--cache-from
Images to consider as cache sources
TIPs 1.3 Docker-Compose 기본 형식
rm
Remove stopped containers
run
Run a one-off command
scale
Set number of containers for a service
start
Start services
stop
Stop services
top
Display the running processes
unpause
Unpause services
up
Create and start containers
version
Show version information and quit
Name, Shorthand
Description
-f, --file FILE
Specify an alternate compose file (default: docker-compose.yml)
-p, --project-name NAME
Specify an alternate project name (default: directory name)
--profile NAME
Specify a profile to enable
-c, --context NAME
Specify a context name
--verbose
Show more output
--log-level LEVEL
Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
--ansi (never|always|auto)
Control when to print ANSI control characters
--no-ansi
Do not print ANSI control characters (DEPRECATED)
-v, --version
Print version and exit
-H, --host HOST
Daemon socket to connect to
--tls
Use TLS; implied by --tlsverify
--tlscacert CA_PATH
Trust certs signed only by this CA
--tlscert CLIENT_CERT_PATH
Path to TLS certificate file
--tlskey TLS_KEY_PATH
Path to TLS key file
--tlsverify
Use TLS and verify the remote
--skip-hostname-check
Don't check the daemon's hostname against the name specified in the client certificate
--project-directory PATH
Specify an alternate working directory (default: the path of the Compose file)
--compatibility
If set, Compose will attempt to convert keys in v3 files to their non-Swarm equivalent (DEPRECATED)
--env-file PATH
Specify an alternate environment file

'Docker' 카테고리의 다른 글

Run the Docker daemon as a non-root user (Rootless mode)  (0) 2022.04.18
docker compose 설치  (0) 2022.03.18
podman Error Message ERRO[0000]  (0) 2022.01.13
Docker Compose란  (1) 2022.01.07
Window10 Podman 설치  (0) 2021.12.26

+ Recent posts