개발/기타

WAS Docker배포하기/설치부터 배포

승리승리 2022. 2. 22. 18:12

이번에 전달받은 과제는

Dockerise해서 실행할 수 있도록 해주세요.

라는 조건이 있었다.

 

약 2년전...

 

기획팀 유차장님이랑 우리 리부장님의 주도하에 정말 잠깐 깔짝 해본 도커...

 

발표 ppt도 만들었었는데... 안보이네...

 

다행히 OneNote에 메모한 내용이 있어서 참고해서 간단하게 구성하였다.

 

내용이 워낙 이것저것 많은데 구조와 이론, 각 명령어들의 의미 등에 대해서는 작성하지 않는다.

 

아래는 명령어 위주로 작성하고자 한다.


목표는 다음과 같다.

개발한 WAS 프로그램을 Docker Image로 만들어서 배포

이를 위한 단계는 다음과 같다.

 

01. 개발한 WAS 배포 내용물 준비(여기서는 jar)

 

02. Docker 설치

 

03. Docker 이미지 생성

 

04. Docker 이미지 실행 및 테스트

 

05. Docker 이미지 배포

 

06. 배포한 Docker 이미지를 내려받아 실행 및 테스트


환경은 아래와 같다.

 

WAS : jdk11

 

Docker 실행 환경 : Linux (AWS이용)

 

Docker Image 환경 : 우분투, jdk11


01. 우선 배포할 내용을 리눅스 환경에 업로드 하였다.

 

02. Docker 설치

아래 명령어를 이용해서 Docker를 설치한다.

curl -s https://get.docker.com | sudo sh

또는 yum을 이용해서 설치할 수도 있다.

sudo yum install docker

 

03. Docker 실행 여부 확인

sudo systemctl status docker

아래같이 출력되면 실행되지 않은 것이다.

 

04. Docker 실행

sudo systemctl start docker

실행하고 다시 한번 실행 여부 확인

 

05. 실행되는 이미지 확인 (컨테이너 확인)

docker ps

이때 권한 오류 발생

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied

 

06. 권한 부여

sudo chmod 666 /var/run/docker.sock

다시 docker ps 실행 시 정상 동작 확인


Docker를 사용할 준비는 끝났다.

 

Docker Image를 만들기 위해 갖가지 명령어를 사용하는데 이걸 모아놓은걸 Dockerfile이라 한다.

 

07. Dockerfile 작성

 

이름을 Dockerfile로 맞춰주고 권한도 줘야한다. (chmod 755 Dockerfile)

# 기본 환경은 우분투 16.04를 사용할거다.
FROM       ubuntu:16.04

# 누가 만들었지? Docker 관리자 이름 및 연락처 작성
# 해당 내용은 옵션이지만 약 2년전에 메모한 내용으로는 내용이 없을 때 아래 오류가 발생할 수 있다고 한다.
# repository does not exist or may require 'docker login'
MAINTAINER victory_0602@naver.com

# 명령어 작성
# apt를 update하고
RUN apt-get -y update

# Install Oracle Jdk11
# apt repository 명령어를 사용하기 위해서는 아래 패키지를 설치해야한다.
RUN apt-get -y install software-properties-common

# Openjdk 저장소를 읽고
RUN add-apt-repository ppa:openjdk-r/ppa

# openjdk 11버전을 다운 받는다.
# jdk버전에 따른 다운로드는 보통 숫자만 바뀌는데 안된다면 구글링하면 금방 나온다.
RUN apt install -y openjdk-11-jdk

# 모든 작업의 실행 위치를 변경한다.
WORKDIR /home/ksr

# (좌)복사할 대상 (우)복사할 위치 및 이름
COPY Server-0.0.0.jar /home/ksr/Server-0.0.0.jar
COPY startup.sh /home/ksr/startup.sh

# 복사해서 넣은 내용들에 권한 부여
RUN chmod 755 /home/ksr/HerrenServer-0.0.0.jar
RUN chmod 755 /home/ksr/startup.sh

# 마지막에 실행할 명령어
ENTRYPOINT /home/ksr/startup.sh

 

08. Docker Build

docker build --tag victory0602/server .

태그를 달아줌으로서 이름을 구분한다.

 

앞에 victory0602/는 없어도 되지만 Docker Hub에 해당 Image를 배포하기 위해 Docker Hub 계정명을 붙여줬다.

 

위 명령어는 buildDocker.sh 라는 Script로 작성했고 이후 해당 파일로 실행하도록 한다.

막 이런저런 로그들이 출력되면서 Image가 생성된다.

 

docker images

로 생성된 Image를 확인할 수 있다.

이전에 생성한 image가 있는데... image 삭제는

docker rmi image이름

 

09. Docker Start

docker run --rm -it -d -p 18080:18080 victory0602/herrenserver /bin/bash

위에서 생성한 Image를 실행한다.

-d 옵션으로 Background에서 실행되도록 했다.

 

-it 옵션으로 터미널에서 입력이 가능하도록 설정할 수 있다.

 

-p 옵션으로 접속할 Port를 설정했다.

 

좌측이 외부에서 접속하는 Port이고

 

우측이 Docker Image내부에서 받아들이는 Port이다.

 

물론 외부 설정파일로 뺄 수 있는데 기억이 안나기도 하고 당장 필요 없어서 우선 패스

 

해당 명령어는 startDocker.sh로 작성해서 사용하였다.

 

실행한 Image(컨테이너)는

docker ps

로 확인할 수 있다.

 

컨테이너 중지는

docker stop ContainerID

 

컨테이너 삭제는

docker rmi ContainerID

 

 

10. Docker Image 들어가기

docker exec -it ContainerID /bin/bash

메모한 내용에 있길래 추가해본다.

exec로 접속하고

 

-it 옵션으로 터미널 입력 가능하게 해준다.

 

들어가서 확인해보면 Dockerfile의 마지막에 startup.sh로 실행한 WAS가 실행되고 있음을 확인할 수 있다.

 

일반적인 ssh접속 처럼 exit로 다시 빠져나올 수 있다.


지금까지 Docker Image를 만들고 실행해서 정상 동작을 확인해봤으니 배포를 하자

 

11. Docker Hub 접속

docker login

이때 Docker Hub의 이메일이 아닌 계정명을 입력해야한다.

 

12. Docker Image Push : 배포

docker push image명

 

이때 Image 앞에 계정명/ 이 없다면 배포가 안되니

docker tag Image명 DockerHub계정명/Image명

으로 태그를 추가할 수 있다.

 

배포가 되면 DockerHub접속해서 확인할 수 있다.

 

13. Docker Image Pull : 다운

docker pull 배포한 이름

이를 위해 Image를 삭제 해보고

 

Pull받아서 startDocker.sh로 실행해보고

 

Test까지 완료하였다.

 

Test는 Docker Container가 실행되고 있는 환경의 접속 IP 또는 Domain을 이용했다.

 

Containber에 특정 IP 또는 Domatin을 설정하는 방법을 옛날에 본거 같은데...

 

정확히 기억이 안나서 해당 내용은 패스하였다.


Docker Hub 배포도 Script로 만들어서 사용하면 편리할테니 시간날 때 만들어둬야겠다.

 

아예 전체 Script를 하나로 묶어서 작은 프로그램으로 만들면 더 편리하겠네...

 

Shell 공부도 해야겠구나...

 

아무튼 위 내용대로만 하면 [간단한 WAS의 Docker 배포]는 이룰 수 있다고 생각한다.