[Docker] ec2 + docker-compose + spring boot + mysql 배포
1. git clone
$ git clone https://github.com/minju412/docker-test.git
2. docker-compose 설치
$ sudo apt  install docker-compose
3. docker-compose.yml 작성
version: '3'
services:
  database:
    container_name: mysql_db
    image: mysql/mysql-server:5.7
    environment:
      MYSQL_DATABASE: users_db
      MYSQL_ROOT_HOST: '%'
      MYSQL_ROOT_PASSWORD: 1234
      TZ: 'Asia/Seoul'
    ports:
      - "3306:3306"
    command:
      - "mysqld"
      - "--character-set-server=utf8mb4"
      - "--collation-server=utf8mb4_unicode_ci"
    networks:
      - test_network
  application:
    container_name: docker-compose-test
    build:
      context: ./
      dockerfile: Dockerfile
    ports:
      - "9000:9000"
    environment:
      SPRING_APPLICATION_JSON: '{
              "spring.datasource.url"  : "jdbc:mysql://mysql_db:3306/users_db?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false",
              "spring.datasource.username" : "root",
              "spring.datasource.password" : "1234",
              "spring.jpa.properties.hibernate.dialect" : "org.hibernate.dialect.MySQL8Dialect",
              "spring.jpa.hibernate.ddl-auto" : "create"
            }'
    depends_on:
      - database
    networks:
      - test_network
networks:
  test_network:
이 때 ip 주소 부분에 ip 주소가 아닌, service 이름으로 적어야 한다.
4. aws 보안 설정

5. 실행
# 빌드
docker-compose up --build
# 실행
$ sudo docker-compose up -d
# 실행 확인
$ sudo docker-compose ps -a
Trouble Shooting - 1

다양한 원인이 있겠지만, 내 경우에는 처음에 sudo를 붙이지 않아서 발생한 오류였다.
Trouble Shooting - 2
아래와 같이 Access denied for user 'root'@'172.18.0.3' 오류가 발생한다면, 
mysql에 접속해 해당 유저를 생성한 뒤, 권한을 부여하면 된다.
 
(mysql에 접속하기 전에 mysql container를 실행해두어야 한다.)

# 도커 컨테이너 접속
$ docker exec -it mysql_db bash 
# mysql 접속
bash# mysql -u root -p; 
# mysql db 사용
mysql> use mysql; 
# user 조회
mysql> select host, user from user; 
# 계정 생성
mysql> create user root@172.18.0.3 identified by '비밀번호'; 
# 권한 부여
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.18.0.3';
# 메모리에 반영
mysql> flush privileges;
# 권한 확인
mysql> show grants for root@172.18.0.3;

6. 성공!

Ref
💛 개인 공부 기록용 블로그입니다. 👻
