이전에 빌드와 테스트 자동화까지는 진행했다.
이번 글을 도커로 배포까지 자동화하는 과정을 설명하겠다.
- FROM: 생성할 이미지의 베이스가 될 이미지를 뜻합니다. FROM 명령어는 Dockerfile을 작성할 때 반드시 한번 이상 입력해야 하며 뒤 이미지 정보는 run을 할때 사용한 이미지와 동일합니다.
- MAINTAINER: 이미지를 생성한 개발자의 정보를 넣습니다. 일반적으로는 연락을 할 수 있는 이메일 같은 정보를 넣습니다.
- LABEL: 이미지에 메타데이터를 추가합니다. 추후에 docker inspect를 통해서 정보를 확인할 수 있습니다.
- RUN: 이미지를 만들기위해 컨테이너 내부에서 명령어를 실행합니다. 위에서는 update 후 apache2를 설치합니다. 단 설치할 때 사용되는 yes라고 대답해야하는 경우 -y를 통해 대답을 해주어야합니다.
- ADD: 파일을 이미지에 추가합니다. 추가하는 파일은 Dockerfile이 위치한 디렉터리인 컨텍스트에서 가져옵니다. 가져오는 파일의 위치는
Dockerfile이 위치한 폴더에서 가져옵니다.- WORKDIR: 명령어를 실행할 디렉터리를 나타냅니다. 예를 들어 echo hello => test2.html이라고 한다면 test2.html은 WORKDIR에서 생성됩니다.
- EXPOSE: Dockerfile의 빌드로 생성된 이미지에서 노출할 포트를 설정합니다. 하지만 이것을 설정한다고 무조건 host와 바인딩되는 것은 아니며 단지 80번 포트를 사용할 것임을 나타내는 것뿐입니다.
- CMD: CMD는 컨테이너가 시작될 때마다 실행할 명령어를 설정하며 Dockerfile에서 한번만 사용할 수 있습니다. 위와 같이 아파치를 실행하는 명령어를 사용하여 웹 서버가 시작됩니다. 기본적으로는 /bin/bash로 설정되어 있는데 이를 덮어 씌운 것입니다.
- VOLUME : 호스트와 공유할 컨테이너 내부의 디렉터리 설정
- ENTRYPOINT : 빌드한 이미지를 컨테이너로 생성할때 단 한번 실행(run)
출처: https://frozenpond.tistory.com/98 [얼음연못]
출처: https://hoony-gunputer.tistory.com/entry/docker-file-작성 [후니의 컴퓨터]
FROM openjdk:11-jdk
VOLUME /tmp
COPY target/eureka-1.0.jar Eureka.jar
ENTRYPOINT ["java", "-jar", "Eureka.jar"]
base 이미지를 jdk 사용한다는 의미로
JDK 안깔린 환경에서도 jdk 를 자동으로 설치해 환경을 구축해준다.
공유 임시 디렉터리
target 파일에 jar파일을 복사
해당 이미지를 컨테이너로 생설할 때 실행하고자하는 명령어이다.
복사해둔 jar 파일이 실행된다.
mvn -Dmaven.test.failure.ignore clean compile package
Docker build -t jifrozen0110[도커허브아이디]/eureka[이미지 이름]:1.0[태그] .
. 까지 현재 위치에서 빌드해준다는 의미로 eureka 안에 들어가서 실행해줘야한다.
dockerhub 올려 작업하기 위해 도커허브아이디 포함하였다.
Docker push jifrozen0110/dd:1.0
도커 허브에 올려줌
Docker network create Dining-together
네티워크 생성
eureka 서버부터 실행
docker run -d -p 8761:8761 --network Dining-together\
--name eureka jifrozen0110/eureka:2
gateway 서버 실행
docker run -d -p 8000:8000 --network Dining-together\
--name gateway
-e "eureka.client.serviceUrl.defaultZone=http://eureka:8761/eureka/" \
jifrozen0110/gateway:2
++++++
-> -e "eureka.client.serviceUrl.defaultZone=http://eureka:8761/eureka/" \
이 부분은 application.yml 파일에 eureka.client.serviceUrl.defaultZone이 http://localhost:8761로 설정되어 있기 때문에 바꿔줘야한다.
micro services 실행
docker run -d --network Dining-together \
--name member \
-e "eureka.client.serviceUrl.defaultZone=http://eureka:8761/eureka/" \
jifrozen0110/member:2
docker run -d --network Dining-together \
--name auction \
-e "eureka.client.serviceUrl.defaultZone=http://eureka:8761/eureka/" \
jifrozen0110/auction:2
docker run -d --network Dining-together \
--name search \
-e "eureka.client.serviceUrl.defaultZone=http://eureka:8761/eureka/" \
jifrozen0110/search:2
중단한 화면인데 정상 작동한다!
기존 젠킨스 서버는 너무 사양이 낮아 빌드 배포 서버를 새롭게 생성했다.
서버 생성 누르면 이런 화면이 뜬다.
이 절차를 거친다. 인증키 없으면 생성하고 네트워크 접근 설정은 서버 그룹에 대한 네트워크 접근 제어 및 관리를 돕는 ACG 설정하는건데 어렵지 않다.
일단 처음 하는거기 때문에 모든 ip와 포트번호를 허용했다.
다 생성하면 Public IP 로 이동해 공인 ip 를 받는다.
그 후 다시 server에 돌아와 포트 포워딩 설정을한다.
서버 생성은 네이버 클라우드 플랫폼 가이드에 가면 너무 자세하게 설명이 되어있다.
이후 난 맥북 이므로 iTerm 을 이용해 서버에 접속한다.
ssh root@[포트포워딩 서버접속용ip] -p [외부포트]
서버 누르면 상세정보에 있다.
접속하면 비밀번호를 입력하라고 한다.
서버클릭후 오른쪽키를누르면 관리자 비밀번호 확인
눌러 확인한다.
이러면 서버 생성과 서버 접속 성공이다.