우리는 저번 시간에 우리의 애플리케이션을 docker image로 만들었다. 이번에는 해당 docker image를 가지고 애플리케이션을 실행해보겠다!
그러기 위해서는 다음과 같은 단계를 거쳐야 한다.
1. ec2 인스턴스 만들고 docker, docker-compose 설치하기
2. ec2 인스턴스에 docker-compose.yml 작성하고 실행하기
- OS image : ununtu 24.04 LTS
- instance 유형 : t2.medium
- 보안그룹 : 생성, ssh 트래픽 전체 허용
- 스토리지 : 30GiB
이렇게 생성한 인스턴스 보안그룹의 인바운드 규칙을 다음과 같이 설정한다.
8080은 서버에 접근하기 위해서이고, 3306은 mysql 접근을 위해서 설정한 것이다.
ec2 기기에 연결해서 다음 명령어를 실행한다.
$ sudo apt-get update $ sudo apt-get install docker.io $ sudo usermod -aG docker $USER $ docker version
- docker version을 했을때 버전이 잘 뜨면 정상이다.
- 'sudo usermod -aG docker $USER' 명령은 docker 를 sudo 명령 없이 실행할 수 있도록 해준다.
원래 'sudo apt-get install docker-compose-plugin'로 됐던 것 같은데, 나는 작동하지 않아서 수동으로 설치해주었다.
$ DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} $ mkdir -p $DOCKER_CONFIG/cli-plugins $ curl -SL https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose $ chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose $ docker compose version
- docker compose version을 했을때 버전이 잘 뜨면 정상이다.
'vim docker-compose.yml'로 아래와 같이 작성해준다.
services: db: container_name: db platform: linux/amd64/v3 #(1) image: mysql:8.4 #(2) restart: always ports: - "3306:3306" #(3) environment: MYSQL_DATABASE: hongpoong #(4) MYSQL_ROOT_PASSWORD: 1234 #(5) TZ: Asia/Seoul volumes: - db_data:/var/lib/mysql #(6) service: container_name: service image: dompoo/service:0516 #(7) restart: unless-stopped #(8) ports: - "8080:8080" #(9) depends_on: #(10) - db environment: SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/hongpoong #(11) SPRING_DATASOURCE_USERNAME: root SPRING_DATASOURCE_PASSWORD: 1234 volumes: #(12) db_data:(1) : mysql 이미지의 플랫폼 설정
(2) : mysql 이미지 설정
(3) : mysql 컨테이너 expose
(4) : mysql에서 사용할 데이터베이스 명
(5) : mysql 루트 유저의 비밀번호, 이렇게 설정하면 root/1234 가 된다.
(6) : DB데이터가 컨테이너가 종료되어도 유지될 수 있도록 도커 볼륨 설정
(7) : 내가 DockerHub에 올렸던 이미지
(8) : AWS 기기를 중지했다 다시 시작하더라도 컨테이너가 자동으로 실행되도록 설정
(9) : 서비스 컨테이너 expose
(10) : db컨테이너보다 더 늦게 실행되도록 설정
(11) : mysql db의 url, 접속할 user 설정(IP가 아니라 컨테이너명으로 구분된다.)
이렇게 작성하고 'docker compose up'을 하면 드디어 서버가 실행된다! 야호!!