Docker

[Docker] Docker, Jenkins를 이용한 프로젝트 실행

ozofweird 2020. 12. 11. 01:38

1. 사전에 필요한 내용

[참고] CICD - AWS EC2 Jenkins 설치

[참고] CICD - AWS EC2 Jenkins GitHub 설정

[참고] CICD - AWS EC2 Jenkins 프로젝트 War 배포

 

 

 

2. Docker, Jenkins를 이용한 프로젝트 실행

1) Jenkins 설정

Execute Shell에 도커 이미지를 생성하고 생성한 이미지를 실행하도록 설정한다.

docker build --build-arg WAR_FILE=build/libs/springproject-1.0.1-SNAPSHOT.war -t ozofweird/springproject:0.1 .
docker run --name springproject -d -p 8080:8080 ozofweird/springproject:0.1

Jenkins 설정

2) Dockerfile 생성

프로젝트 내에 Dockerfile을 실행한다.

  • openjdk:8-jdk-alpine 베이스 이미지로 사용
  • ARG를 이용하여 WAR_FILE 변수값 설정
  • COPY를 이용하여 호스트의 파일을 컨테이너로 복사
  • ENTRYPOINT를 이용하여 컨테이너에서 명령 실행

 

Spring Boot는 내장 톰캣을 지원하기 때문에 톰캣을 독립적으로 사용하지 않고도 자바 명령어를 이용하여 실행할 수 있다. (Spring Boot를 구동시킬 컨테이너 내부에서 'java -jar -Dserver.port=8080 springproject.war' 명령 수행)

FROM openjdk:8-jdk-alpine
ARG WAR_FILE=springproject-1.0.1-SNAPSHOT.war
COPY ${WAR_FILE} springproject.war
ENTRYPOINT ["java","-jar","-Dserver.port=8080","springproject.war"]

'docker daemon permission denied' 에러가 발생할 경우 jenkins 사용자를 추가해준다.

sudo usermod -aG docker jenkins

Jenkins를 재시작하고도 오류가 재발생할 경우 1트

sudo usermod -aG root jenkins

Jenkins를 재시작하고도 오류가 재발생할 경우 2트

sudo setfacl -m u:jenkins:rwx /var/run/docker.sock

도커 데몬 권한 오류


그 외에 실습을 하며 발생한 오류들은 2가지가 있다. 우선 하나는 8080 포트가 사용중일 경우 동작하지 않을 수 있다. 이를 해결하기 위해서 사용중인 8080 포트를 Kill 해주면 된다.

sudo fuser -k 8080/tcp

8080 사용 오류

'docker: Error response from daemon' 오류의 경우, 가동중인 컨테이너를 찾고 지워주면 된다.

sudo docker ps -a
sudo docker rm [컨테이너ID]

중복 컨테이너 오류


[참고] bhsbhs235.github.io/

[참고] github.com/ozofweird/SpringBoot_Test

728x90