728x90
EC2 환경에서 docker-compose.yml을 통해 Docker container들을 띄우고 싶었는데, 검색해보니 대부분 EC2 환경에서 Spring boot 프로젝트의 git repository를 clone한 후 실행시키는 방법을 사용하였다.
하지만 우리 팀은 보안상 아이디나 비밀번호가 들어간 docker-compose.yml과 같은 파일을 git repository에 올리지 않기로 결정하였다.
그래서 고안한 방법이 'EC2 환경에 로컬의 docker-compose.yml 파일을 올리고, Docker Hub에 미리 올려둔 이미지를 활용해서 Docker container들을 띄우자!'였다.
Dockerfile
FROM openjdk:17-oracle
CMD ["./gradlew", "clean", "build"]
VOLUME /tmp
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
docker-compose.yml
version: '3.8'
services:
app:
image: 도커허브아이디/auto_enter_view
ports:
- "8080:8080"
environment:
SPRING_DATASOURCE_URL: jdbc:mariadb://db:3306/project
SPRING_DATA_REDIS_HOST: redis
depends_on:
- db
- redis
restart: on-failure
networks:
- app-network
db:
image: mariadb:10.11.8
ports:
- "3306:3306"
environment:
MARIADB_ROOT_PASSWORD: 비밀번호
MARIADB_DATABASE: DB명
networks:
- app-network
redis:
image: redis
ports:
- "6379:6379"
networks:
- app-network
networks:
app-network:
주의 : Redis를 연결해주기 위해 environment에 'SPRING_DATA_REDIS_HOST: redis' 추가
추가해주지 않았을 경우 Redis 관련 에러들이 정말 여러가지로 생김...
1. Local에서 Dockerfile을 이용해 이미지 생성하기
docker build -t auto_enter_view .
2. Docker Hub에 이미지 푸시
로그인
docker login
Docker 이미지 태그 지정
docker image ls
docker tag auto_enter_view 도커허브아이디/auto_enter_view:latest
Docker 이미지 푸시
docker push 도커허브아이디/auto_enter_view:latest
3. EC2 인스턴스 실행
4. EC2 인스턴스에 SSH로 접속
chmod 400 AutoEnterViewKey.pem
ssh -i "AutoEnterViewKey.pem" ubuntu@ec2-XX-XXX-XXX-XX.ap-northeast-2.compute.amazonaws.com
5. bash 창에서 docker-compose 설치하기
설치 명령어
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
권한 변경
sudo chmod +x /usr/local/bin/docker-compose
설치 확인
docker-compose --version
설치 확인 시 아래와 같은 출력이 나오면 설치가 완료된 것이다.
docker-compose version 1.29.2, build 5becea4c
6. bash 창에서 Docker Hub 로그인
docker login
7. EC2 서버에 로컬의 docker-compose.yml 파일 올리기
scp -i 키페어.pem ~/파일경로/.../docker-compose.yml ubuntu@IP:~/받을서버경로
8. bash 창에서 docker-compose up
docker-compose up
트러블 슈팅 - MariaDB 관련
ERROR: for ubuntu_db_1 Cannot start service db: driver failed programming external connectivity
on endpoint ubuntu_db_1 (d45663c3f5bb275686694e3a5cd1de5ad3ecf2b8bbbd4e75871a4c8c3620d00e): failed
to bind port 0.0.0.0:3306/tcp:
3306 포트가 이미 사용 중이라는 에러로 추정된다.
생각해보니 이전에 실습하면서 EC2 서버에 MariaDB가 자동으로 실행되도록 설정해두어서 생기는 에러같다.
해결 방법 첫번째
1. 포트를 사용 중인 프로세스 확인
sudo lsof -i :3306
2. 해당 프로세스 종료
sudo kill -9 <PID>
이렇게 해두면 일단은 돌아가지만 다시 서버를 띄우면 자동으로 MariaDB가 돌아갈 것이라는 문제점이 남는다.
해결 방법 두번째
1. MariaDB 서비스 중지
sudo systemctl stop mariadb
2. MariaDB 서비스 중지 확인
sudo systemctl status mariadb
3. MariaDB 서비스 자동 시작 비활성화
sudo systemctl disable mariadb
4. 변경 사항 확인
sudo systemctl is-enabled mariadb
추가 : Docker 컨테이너로 띄운 MariaDB 내의 데이터 확인하기!
1. MariaDB 컨테이너 접속
docker exec -it 마리아디비컨테이너명 bash
컨테이너명은 'docker ps'라는 명령어로 확인할 수 있다.
2. MariaDB 클라이언트 실행
mysql -u root -p
3. 데이터베이스 확인
'CI | CD' 카테고리의 다른 글
[Docker + AWS + RDS] EC2에 Docker 컨테이너 띄우기 (0) | 2024.07.12 |
---|---|
[Docker] 도커 이미지 생성 및 저장하기 - 실습편 (0) | 2024.07.11 |
[Docker] 도커 이미지 생성 및 저장하기 - 이론편 (0) | 2024.07.11 |
[Docker] 도커 컴포즈(docker-compose) 파일 작성하기 - 실습편 (0) | 2024.07.11 |
[Docker] 도커 컴포즈(docker-compose) 파일 작성하기 - 이론편 (0) | 2024.07.11 |