도커라는 것의 존재는 알았지만 처음 개념을 알았을 땐 쓰는 이유를 봐도 이해를 하지 못했다.
하지만 개발서버, qa서버, 운영서버 그리고 오토스케일링을 위한 인프라를 구축하면서 느낀게
각 서버마다 jdk 설치도 해야하고 배포를 codedeploy로 하기 때문에 code deploy-agent 를 각 서버마다 설치 해줘야한다.
귀찮다.
서버를 하나만 띄웠을 때는 몰랐으나 매우 귀찮다. 그래서 사람들이 도커 이미지 하나만 배포해서 끝내고싶었나보다
테스트용으로 프로젝트를 만들었다
1. DockerFile 만들기
dependency 로 Spring web만 추가 Spring boot 3.x 버전, JDK는 17
실행 테스트를 위해 간단한 api를 만들었다.
프로젝트 내부 루트경로에 DockerFile 이라고 파일을 하나 만든다.
도커가 내가 적은 DockerFile을 읽어서 동작 한다.
// dockerfile
// jdk 17 image start
FROM openjdk:17
//인자 설정 - JAR\_FILE
ARG JAR_FILE=build/libs/*.jar
//jar 파일 복제
COPY ${JAR\_FILE} app.jar
// 실행 명령어
ENTRYPOINT ["java", "-jar", "/app.jar"]
2. 빌드 해서 jar파일 생성
그리고 build를 한번 해서 jar 파일을 만들었다.
인텔리제이 기준 우측의 그래들 아이콘으로 clean 후 build 클릭
build/libs 에 빌드 해서 나온 .jar 파일이 나온다.
3. 도커 CLI로 도커 이미지 빌드 하기
이제 터미널에서 도커 이미지를 빌드 해서 나온 도커 이미지를 로컬(내 PC)에서 Docker HUB로 이미지를 업로드 해야한다.
깃허브에 코드 올리는 느낌과 비슷하다.
// 도커 로그인
docker login -u 본인도커허브닉네임
=> docker login -u mightytony
// 도커 이미지 빌드
// 1. 프로젝트 내에 DockerFile이 있는 경로로 간다
cd /프로젝트경로/
docker build -t 본인도커허브닉네임/저장소이름 dockerfile의 경로
=> docker build --platform linux/amd64 -t mightytony/dockertest -f DockerFile .
맥북(m시리즈)에서 이미지 빌드시 아키텍쳐가 다르므로 ec2에서 못 읽는다 (아키텍쳐가 다름 m 시리즈는 arm 칩이고 서버는 보통 amd64 니까..) 그래서 --platform linux/amd64를 꼭 써야 한다.
WARNING:
The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64/v3)
and no specific platform was requested
기입 안하고 빌드 하면 꼭 이런 에러가 뜰 것이다. 맥북을 부수고 싶다.
도커 이미지가 생성 되었다! 확인 해보자.
docker images
이제 만들어진 이미지를 docker hub에 업로드 하겠다. 로컬에 있는 이미지를 도커 허브에 올려야한다.
docker push 본인허브아이디/저장소
3. EC2 생성, 연결
EC2 생성 방법은 다른 참고할 만한 블로그가 많으니 생략.
참고로 저는 os를 amazon linux 2023 으로 했습니다. 적어두는 이유는 패키지 매니저가 os 마다 다름.
- 보안 그룹 설정:
인바운드 (접근 포트) 8080포트를 허용한다.
뒤의 소스 부분은 해당 포트로 접근 할 수 있는 IP를 설정하는 것이다. 0.0.0.0/0 은 모든 IP에서 접근을 허용 한다는 의미.
테스트 용이니까..
- EC2에 접속
제일 안전한 방법으론 22번 포트(ssh)를 내 아이피에만 열고 putty를 통해 접속 하는 것이다.
테스트 용이니 브라우저를 통해서 접속한다.
ec2 접속 후 해야 할일 :
1. 서버에 도커 설치
2. 내가 올린 도커 이미지를 pull 한다.
3. 해당 이미지를 실행 해서 컨테이너를 올린다.
4. 잘 됐는지 테스트 한다.
//도커 설치
sudo yum update -y
sudo yum install docker
// 도커 실행
sudo usermod -aG docker ec2-user
sudo systemctl start docker
// 이미지 pull
sudo docker pull 도커허브아이디/저장소이름
// 도커 컨테이너 실행
docker run -d -p 8080:8080 mightytony/dockertest:latest
앞의 8080은 서버의 포트, 후자는 컨테이너 포트
docker ps -a : 실행 되지 않은 도커 목록
docker ps : 실행 되고 있는 도커 컨테이너 목록
docker ps 를 쳤을때 컨테이너가 보인다면 성공이다.
테스트를 해보자
ec2의 IP:8080/test 접속
성공.
ps. 실행 도커 에러로그 보는 법 : docker logs 컨테이너아이디
참고:
'devOps' 카테고리의 다른 글
nginx letsencrypt 로 SSL 인증서 발급 후 사이트 https 적용하기 (0) | 2024.02.01 |
---|---|
[Jenkins] 다른 프로젝트에 의존성을 가진 프로젝트 자동 빌드 하기 (0) | 2023.09.26 |
Host key verification failed..(젠킨스 서버 이관 이후 빌드 반영 안될 때) (0) | 2023.08.28 |
(Ubuntu) AWS EC2 인스턴스 2개를 이용해 젠킨스 자동배포 (프리티어) (0) | 2023.08.10 |