[AWS] EC2 서버에 Docker 설치하기 : MySQL 설치 + 배포

진예·2024년 5월 1일
1

Infra

목록 보기
5/7
post-thumbnail

💡 목표

AWS EC2 서버에서 Jenkins를 사용하여 CI/CD 자동 배포 서버 구축하기!

EC2 인스턴스 생성하기 + 보안 그룹 생성 및 설정하기 : Ubuntu + t2.micro 서버 생성


🐋 Docker

1. EC2 서버 접속

ssh -i [키페어 이름] [리눅스 계정명]@[EC2 퍼블릭 IPv4 DNS]
  • 터미널을 사용할 키페어 파일(.pem)이 존재하는 경로에서 열어줄 것
  • 리눅스 계정명의 경우, 우분투 서버를 사용한다면 ubuntu

: 계정명이 ubuntu@ip[]로 변경되었다면 성공적으로 접속된 것!


2. Docker 설치

  • 리눅스에서 기본으로 제공하는 apt 패키지 업데이트
sudo apt-get update
  • Docker 설치
sudo apt-get install docker.io

: 설치 후 docker --version을 입력했을 때, 버전이 뜨면 정상적으로 설치된 것!

  • Docker 실행
sudo service docker start

: sudo systemctl status docker를 통해 Docker의 실행 상태를 확인했을 때, active이면 정상적으로 실행되고 있다는 뜻!


3. Docker에 MySQL 설치

  • MySQL Docker Image 다운 : 버전을 명시하지 않은 경우, 가장 최신 버전
sudo docker pull mysql:[version]
  • 다운로드 된 Docker image 목록 확인 : mysql이 설치됨
sudo docker images

  • MySQL Docker 컨테이너 생성 및 실행
sudo docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=[password] -d -p 3306:3306 mysql:latest
  • Docker 컨테이너 리스트 확인 : mysql-container이 실행 중
sudo docker ps -a

  • EC2 내부에서 실행중인 MySQL Docker 컨테이너에 접속하기 : bash로 mysql 컨테이너에 접근 후 패스워드 입력 (입력해도 안보임) ➡️ mysql에 접속 완료!
sudo docker exec -it mysql-container bash
bash $ mysql -uroot -p

  • 외부에서 MySQL 컨테이너에 접속하기 (Workbench) : EC2 인스턴스의 IP를 사용하여 연결 가능! ➡️ 보안 그룹에서 MySQL의 포트번호인 3306번을 열어줘야 함

  • MySQL Docker 컨테이너 시작/중지/재시작
# 실행
docker start mysql-container

# 중지
docker stop mysql-container

# 재시작
docker restart mysql-container

4. Docker image 빌드

  • 프로젝트 최상단 경로에 Dockerfile 생성 ➡️ cleanbootJar을 통해 jar 파일 빌드
FROM openjdk:17
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
  • Dockerfile이 있는 패키지(프로젝트)에서 터미널을 실행한 후, Docker image 생성 ➡️ 태그 생략 시 latest
docker build -t [username/image명]:[태그명] .

  • image 실행 ➡️ 포트번호 : 8888
docker run -p [외부 포트번호(사용자 지정)]:[컨테이너 내부 포트번호(8080)] [이미지명]:[태그]

: 8888번 포트에서 프로젝트가 정상적으로 실행된다!


5. Docker image를 DockerHub에 push

  • Docker 로그인 : 이미 로그인 되어있다면 docker login 만으로 가능
docker login -u [username]
  • image push 하기
docker push [이미지명]


6. 배포

  • EC2 서버에 접속 후 docker login 수행
  • 로그인을 수행한 계정의 DockerHub에서 이전에 생성한 image를 컨테이너로 가져오기 (pull)
sudo docker pull [이미지명]

  • image 실행하기 (배포) ➡️ 포트번호 : 8888
sudo docker run -d -p [외부 포트번호]:[컨테이너 내부 포트번호] [이미지명]:[태그]

🚨 트러블 슈팅

  • ssh: connect to host [ip주소] port 22: Connection timed out : EC2 서버에 접속되지 않는 문제 발생

➡️ 인스턴스 생성 시 적용한 보안 그룹에 ssh의 22번 포트를 열어주지 않아서 ssh에 접속할 수 없었음..
해당 보안 그룹에 22번 포트를 열어주니 정상적으로 연결됨!


🙏🏻 참고

profile
백엔드 개발자👩🏻‍💻가 되고 싶다

0개의 댓글