[docker] docker로 어플리케이션(petClinic) 띄우기,Spring boot+Maven+nginx
안녕하세요 !
Docker로 어플리케이션 띄우기를 진행해보겠습니다 ??
도커란 무엇인가? 에 대해선 잘나와있는 설명서가 있어 추천드립니다 !
https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
초보를 위한 도커 안내서 - 도커란 무엇인가?
도커를 처음 접하는 시스템 관리자나 서버 개발자를 대상으로 도커 전반에 대해 얕고 넓은 지식을 담고 있습니다. 도커가 등장한 배경과 도커의 역사, 그리고 도커의 핵심 개념인 컨테이너와 이미지에 대해 알아보고 왜 이렇게 도커가 인기 인지 하나하나 살펴보겠습니다.
subicura.com
진행방향 >
- java설치
- java 다운로드및 설치
- java 환경변수 설정
- java 버전확인
- Maven설치
- maven 다운로드 및 설치
- maven 환경변수 설정
- maven 환경변수 저장
- maven 버전확인
- 도커 설치
- 기존 도커 삭제
- 도커 설치
- 도커 서비스 실행
- 도커 버전확인
- 도커 컴포즈 설치
- 도커 컴포즈 다운로드
- 도커 버전확인
Nginx
- nginx 설정 디렉토리 생성
- nginx default.conf파일 추가, reverse proxy를 설정
Petclinic
- git clone하여 프로젝트 생성
- 프로젝트 수정 (mysql 설정관련)
- 프로젝트 빌드
- 결과물 확인 및 복사
Docker compose
- compose 파일작성
- Dockerfile 생성
- docker-compose up / ps
- mysql 콘솔접속
- 사용자 추가 쿼리 실행
- schema.sql, data.sql 쿼리 실행
웹사이트 경험
- localhost로 접속
이제부터 진짜 시이이이작 !
** vagrant를 통해 가상머신
저는 window유저이기에 vagrant를 통해 가상머신을 띄웠습니다.
(디테일하게 추가는 추후)
** 도커설치
# yum -y update : yum업데이트 (root권한)
** docker 설치 위한 계정 생성
$ useradd docker-petclinic
** docker 다운로드 및 설치
$ curl -fsSL https://get.docker.com/ | sudo sh
** 현재 접속중인 사용자에게 권한 주기 (에러 발생 하단 확인해주세요 )
$ sudo usermod -aG docker-pet $USER
** 도커서비스 실행
$ sudo systemctl start docker
웨이러미닛 ! (wait a minute !)
에러 발생 !!! docker-pet is not in the sudoers file. This incident will be reported.
> sudo명령어에서 root권한이 없을 때 발생, sudoeres 파일에 계정 이름이 들어가야 root권한이 부여
$ vi /etc/sudoers
$(username) ALL = (ALL:ALL) ALL
저장
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.40/containers/json?all=1: dial unix /var/run/docker.sock: connect: permission denied
그러나 또다시 실행시켰을때 에러가 발생하는데...
docker가 root계정으로 설치되었을때, root계정이 아닌 계정으로 docker를 실행하면 에러가 발생한다
요런 에러가 발생
> 즉 세팅후 로그아웃하지 않고 실행했기 때문이다 완전히 로그아웃후 재실행을 진행한다.
**자바설치
docker-pet 홈디렉토리에서 실행함
** java다운로드 및 설치
$ mkdir download : download 폴더 생성
$ cd download : download폴더로 이동
$ curl -O -L https://cdn.azul.com/zulu/bin/zulu8.40.0.25-ca-jdk8.0.222-linux_x64.tar.gz : java 다운로드
$ tar xvfz zulu8.40.0.25-ca-jdk8.0.222-linux_x64.tar.gz : 다운받은 java파일 풀기 (tar.gz 는 윈도우의 zip느낌)
$ mv zulu8.40.0.25-ca-jdk8.0.222-linux_x64 /usr/local/java : 풀어제낀 java파일을 이동시킴
** java환경변수 설정
$ vi /etc/profile : 환경변수 파일편집
아래 내용 추가
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
** 환경변수 설정 반영 및 확인
$ source /etc/profile : 반영
$ java -version : 확인
** maven 설치
$cd /root/download
$curl -O -L https://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
$mv apache-maven-3.3.9-bin.tar.gz /usr/local/maven
$tar xvfz apache-maven-3.3.9-bin.tar.gz
로컬로 위치 변경
환경변수 편집 및 반영
vi /etc/profile
아래 붙여넣기
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin
반영
source /etc/profile
** docker삭제 및 설치
# yum remove docker \
docker-client \
docker-client-latest \
docker-commo# \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
Docker Community Edition Repository 설정
# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
Docker Community Edition 설치
# yum install -y docker-ce docker-ce-cli containerd.io
> 버전이 낮아서 정상적으로 설치가 안될경우 selinux 업그레이드
# yum -y install http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.107-1.el7_6.noarch.rpm
도커 서비스
# systemctl start docker.service
#NGINX
# mkdir /etc/nginx/conf.d/ : NGINX 설정 디렉토리 생성
** nginx 설정
하위디렉토리 default.conf파일 추가해, NGINX 리버스 프록시를 설정
upstream app {
server localhost:8080; # 도커 컨테이너 호스트의 IP 주소
}
server {
listen 80;
location / {
proxy_pass http://app;
}
}
#PETCLINIC (일명 보급형 어플리케이션 정도로 생각)
$ mkdir -p /tmp/test/petclinic : 어플리케이션을 위한 폴더 생성
$ cd /tmp/test/petclinic : 해당 폴더로 이동
$ git clone https://github.com/spring-projects/spring-petclinic.git : 어플리케이션 소스 다운
#Maven 프로젝트 빌드 - 메이븐으로 진행
$ cd /tmp/test/petclinic/spring-petclinic
$ mvn clean package -Dmaven.test.skip=true
** 해당 파일 이쪽으로 두기
$ cp /tmp/test/petclinic/spring-petclinic/target/spring-petclinic-2.2.0.BUILD-SNAPSHOT.jar /tmp/test/petclinic/
** docker compose 스크립트 작성
- docker compose 설치 : 추후 스크립트 작성 ㅠ
-스크립트내 sevice3 (mysql, nginx, petclinic)
spring-petclinic 하위 - docker-compose.yml작성
version: '2'
services:
nginx:
image: nginx:latest
hostname: nginx
container_name: nginx
volumes:
- /etc/nginx/conf.d:/etc/nginx/conf.d
ports:
- "80:80"
mysql:
image: mysql:5.7
hostname: mysql
container_name: mysql
volumes:
- /var/lib/mysql:/var/lib/mysql
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=1111
petclinic-web:
build:
context: /tmp/test/petclinic
dockerfile: /tmp/test/petclinic/Dockerfile
image: petclinic-web
hostname: petclinic-web
container_name: petclinic-web
volumes:
- /var/log/petclinic-web:/var/log/petclinic-web
ports:
- "8080:8080"
environment:
- LOG_DIR=/var/log/petclinic-web
- LOG_FILENAME=petclinic
depends_on:
- nginx
- mysql
** petclinic 서비스의 경우 dockerfile 생성
> petclinic이 뜨기위해선 java컨테이너가 떠야하는데, dockerfile로 java컨테이너와 관련된 커스텀한 이미지를 만든다
/tmp/test/petclinic하위에 dockerfile생성
해당 스크립트 붙여넣기
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD spring-petclinic-2.2.0.BUILD-SNAPSHOT.jar spring-petclinic-2.2.0.BUILD-SNAPSHOT.jar
ENTRYPOINT ["java","-Dspring.profiles.active=mysql","-Djava.security.egd=file:/dev/./urandom","-jar","/spring-petclinic-2.2.0.BUILD-SNAPSHOT.jar"]
** docker-compose up
$ docker-compose -f /tmp/test/petclinic/docker-compose.yml up -d
** docker-compose ps
docker-compose로 띄운 컨테이너 확인
** 포트포워딩
127.0.0.1:80을 통해 접속 확인 ! :0 )