[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
💛 개인 공부 기록용 블로그입니다. 👻