본문 바로가기

study_IT/DevOps

Docker 활용 : 웹 애플리케이션 배포하기

728x90
반응형

Docker는 컨테이너 기반 가상화를 제공하여 애플리케이션을 효율적으로 패키징하고 배포할 수 있는 강력한 도구입니다. 이번 포스트에서는 Docker를 사용하여 웹 애플리케이션을 배포하는 전체 과정을 살펴보겠습니다.

1. 도커 컨테이너 WAS에 .war파일 올리기

mkdir /javawebapp8102   // host linux에 /javawebapp8102 디렉토리 만들기
ls /javawebapp8102 -l  // fileZilla로 .war 파일 복사 후 확인

docker container cp /javawebapp8102/ZJavaWeb.war tomcat8102:/usr/local/tomcat/webapps/   
// war파일 deploy(copy) : host linux에서 컨테이너 WAS의 webapps로 카피

docker container exec -it tomcat8102 /bin/bash    // 컨테이너 내부로 접속해서 확인
ls /usr/local/tomcat/webapps/ -l

http://공인IP:8102/ZJavaWeb/ 접속해서 페이지 정상 출력 확인

 

2. 도커 컨테이너 WAS의 파일을 host linux로 copy

rm /javawebapp8102/*.war    // host linux의 파일 삭제

// 컨테이너의 war 파일을 host linux의 폴더로 copy
docker container cp tomcat8102:/usr/local/tomcat/webapps/ZJavaWeb.war /javawebapp8102/

// copy 결과 확인
ls /javawebapp8102 -l

 

3. host linux 디렉토리와 컨테이너 내부 /usr/local/tomcat/webapps/ 디렉토리 Bind Mount 해서 war 배포

mkdir /javawebapp8103  // host linux에 디렉토리 생성

ls /javawebapp8103 -l    // fileZilla로 .war 파일 복사 후 확인

// tomcat8103 컨테이너 생성하고 백그라운드 실행, -v 호스트디렉토리:컨테이너디렉토리 동기화
docker container run --name tomcat8103 \
-p 8103:8080 -dit \
-v /javawebapp8103/:/usr/local/tomcat/webapps/ \
tomcat:9.0.74-jre8

ls /javawebapp8103 -l   // 확인

docker container inspect tomcat8103  // Binds 정보 확인

docker container exec -it tomcat8103 /bin/bash  // 컨테이너 내부 접속 후 확인
ls /usr/local/tomcat/webapps/ -l

http://공인IP:8103/ZJavaWeb/ 접속해서 페이지 정상 출력 확인

 

4. Volume Mount를 이용한 war 배포(docker가 관리)

docker volume create tomcat8104_volume  // tomcat_volume 생성
docker volume ls
docker volume inspect tomcat8104_volume  // Mountpoint로 경로 확인
ls /var/lib/docker/volumes/tomcat8104_volume/_data -l  // 확인한 경로 확인

// tomcat8104 컨테이너 만들고 백그라운드 실행, volume mount를 이용하여 디렉토리 동기화
// -v 볼륨이름:컨테이너디렉토리
docker container run --name tomcat8104 \
-p 8104:8080 -dit \
-v tomcat8104_volume:/usr/local/tomcat/webapps \
tomcat:9.0.74-jre8

docker container inspect tomcat8104  // Binds 정보 확인

docker container cp \
/javawebapp8103/ZJavaWeb.war tomcat8104:/usr/local/tomcat/webapps/   
// host linux에서 컨테이너 WAS의 webapps로 war deploy

http://공인IP:8104/ZJavaWeb/ 접속해서 페이지 정상 출력 확인

ls /var/lib/docker/volumes/tomcat8104_volume/_data -l   
// 도커가 관리하는 volume mount 디렉토리 확인

docker container exec -it tomcat8104 /bin/bash   // 컨테이너 내부로 접속해서 확인
ls /usr/local/tomcat/webapps/ -l

 

5. 컨테이너를 이미지로 만들기

docker container commit tomcat8103 tomcat8103_image
docker image ls

// tomcat8103_image를 이용해서 tomcat8201 컨테이너 만들기
docker container run --name tomcat8201 \
-p 8201:8080 -dit \
tomcat8103_image

// 결과 확인
docker container ls -a
docker container logs tomcat8201   // ZJavaWeb.war가 deploy 안된 것 확인

http://공인IP:8201/ZJavaWeb/  404페이지 확인

// Binds, Images, Volumes 정보 확인
docker container inspect tomcat8201 | grep Binds
docker container inspect tomcat8201 | grep Image
docker container inspect tomcat8201 | grep Volumes
(docker container inspect tomcat8201 | grep -e Binds -e Image -e Volumes)

// tomcat8103 컨테이너는 볼륨 바인드 마운트를 사용하지만, 
// 이것으로 이미지를 만들고 그 이미지로 컨테이너를 생성했을 때 볼륨 바운드 마운트는 적용되지 않음

 

6. war를 가지고 있는 컨테이너를 이미지로 만들기

docker container commit tomcat8102 tomcat8102_image
docker image ls

docker container run --name tomcat8202 \
-p 8202:8080 -dit \
tomcat8102_image

docker container ls -a
docker container logs tomcat8202    // war파일 deploy된 것 확인

http://공인IP:8202/ZJavaWeb/  페이지 정상 출력 확인

 

7. Docker file (컨테이너 이미지 만드는 정보를 갖는 메타데이터) 이용해서 이미지 만들기

- 컨테이너 생성, war 카피 등의 명령어를 Docker file에 서술해서 war 파일을 가지고 있는 이미지 생성

// image_make01 디렉토리 생성후 war 파일 복사
mkdir image_make01
cp /javawebapp8103/ZJavaWeb.war /image_make01
ls /image_make01 -l
cd image_make01
// Docker file 만들기
vi Dockerfile

# Dockerfile 내용
# 베이스이미지, 상속할 이미지
FROM tomcat:9.0.74-jre8

#이미지에 파일, 폴더 추가 : ROOT.war 변경
#COPY ./ZJavaWeb.war /usr/local/tomcat/webapps/
#COPY ./ZJavaWeb.war /usr/local/tomcat/webapps/ROOT.war
COPY ./ZJavaWeb.war $CATALINA_HOME/webapps/ROOT.war

#WORKDIR /usr/local/tomcat
#EXPOSE 8080
//도커파일 이용해서 이미지 만들기
docker image build -t tomcat8203_image_dockerfile:0.0.1 .
docker image ls // 이미지 생성 확인

// tomcat8103_image_dockerfile 이미지로 컨테이너 만들기
docker container run --name tomcat8203 \
-p 8203:8080 -dit \
tomcat8203_image_dockerfile:0.0.1

docker container ls

http://공인IP:8203  페이지 정상 출력 확인

 

8. 컨테이너 이미지 hub.docker.com 레지스트리에 등록하기(push/pull)

hub.docker.com 회원가입 후 로그인
Create repository // 레파지토리 만들기

docker tag tomcat8204_image_dockerfile:0.0.1 tomcat8204:0.0.1  // hub에 등록할 이미지 만들기
docker image ls

docker login // id, pwd
docker push tomcat8204:0.0.1    // hub에 업로드

hub.docker.com에서 업로드 확인

// 이미지 pull
docker pull tomcat8204:0.0.1

// pull로 가져온 이미지로 컨테이너 만들기
docker container run --name tomcat8205 \
-p 8205:8080 -dit \
tomcat8204:0.0.1

docker container ls // 컨테이너 생성 확인

http://공인IP:8205  페이지 정상 출력 확인
728x90
반응형