이전에는 로컬에서 Docker과 mysql의 연동에 대해 다뤄보았으니 이번에는 이전에 사용했던 파일을 Ec2로 배포해보겠다.
Ec2에 배포하기전에 우선 Docker의 이미지 파일들을 Dockerhub에 올려줄 필요가있다.
Docker hub에 올리기 위해선 각 이미지들의 태그를 지정해줘야하는데 예시로 다음과 같이 하면 된다.
docker tag 기존의 이름: 기존의 태그 사용자/허브에 저장할 이름: 허브에 저장할 태그
ex) docker tag dockersql-app:latest cjxisia62/dockersql-app:latest
ex) docker tag mysql:latest cjxisia62/mysql:latest
이제 태그를 지정해 줬으면 push를 통해 이미지들을 허브에 올려주면 된다.
docker push 사용자/이미지이름:태그
ex) docker push cjxisia62/dockersql-app:latest
ex) docker push cjxisia62/mysql:latest
성공적으로 Docker hub에 이미지를 push 했다면 Ec2 인스턴스를 생성및 putty로 연결해주자.
Ec2 인스턴스 생성 및 putty연결은 내가 이전에 작성한 티스토리의 글을 참고바란다.
https://eatingmouse.tistory.com/29
Node.js Ec2 배포해보기#上 인스턴스 생성
최근 클라우드 공부를 시작하였고 그 중 Ec2를 통한 배포에 성공하여 Ec2를 배포한 과정에 대해 포스팃 하고자 한다. 이전에 만들었던 커뮤니티 프로젝트를 사용하여 Ec2를 사용하였고 클라우드에
eatingmouse.tistory.com
putty로 자신이 생성한 인스턴스에 도착했다면 우선 인스턴스 환경 업데이트와 docker를 설치해주자.
sudo apt update
sudo apt install -y docker.io
docker설치 및 환경의 최신화가 끝났으면 이전에 dockerhub에 올려두었던 이미지를 pull해서 가져오면 된다.
docker pull 유저/이름:태그
ex) docker pull cjxisia62/dockersql-app:latest
ex) docker pull cjxisia62/mysql:latest
팁) ubuntu@ip-172-31-8-239:~$ docker pull cjxisia62/dockersql-app Using default tag: latest permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/create?fromImage=cjxisia62%2Fdockersql-app&tag=latest": dial unix /var/run/docker.sock: connect: permission denied
위와 같은 문제가 발생한다면 사용자가 group에 지정되지 않아서 발생하는 문제이니 다음과 같은 명령어로 해결할 수 있다.
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
이제 이미지를 pull해서 가져왔으니 이미지를 사용해 컨테이너를 생성 및 실행하면 된다.
//mysql container 생성 및 실행
docker run -d
--name mysql-container
-e MYSQL_ROOT_PASSWORD= root 비밀번호
-e MYSQL_DATABASE= 데이터베이스 이름
-e MYSQL_USER= 사용자 이름
-e MYSQL_PASSWORD= 사용자 비밀번호
-p 3306:3306
mysql:latest
여기서 주의해야할 점이 있는데 특수문자를 그냥 사용하면 오류가 발생하니 특수문자를 사용하고 싶을 때에는 ' '를 사용해주자. ex) Mysql_PASSWORD = 'tistory!2'
마찬 가지로 docekrsql-app도 컨테이너를 생성 및 실행해주겠다.
docker run -d
--name dockersql-app-container
-e DATABASE_HOST= 데이터베이스 호스트
-e DATABASE_USER= 데이터베이스 사용자
-e DATABASE_PASSWORD= 데이터베이스 비밀번호
-e DATABASE_NAME= 데이터베이스 이름
-p 3000:3000
cjxisia62/dockersql-app:latest
다른건 mysql에 생성해둔 값에 맞춰서 변수 값을 지정하면 되지만 데이터베이스의 호스트는 Ec2의 퍼블릭 주소로 설정해주어야 한다.
팁) docker logs를 통해 로그를 확인할 수 있는데( ex) docker logs dockersql-app-container)
ubuntu@ip-172-31-8-239:~$ docker logs dockersql-app-container Server is running on http://localhost:3000 Error connecting to MySQL: Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not su pport authentication protocol requested by server; consider upgrading MySQL clie nt at Handshake.Sequence._packetToError
위와 같은 문제가 발생한다면 mysql의 클라이언트가 인증 프로토콜을 사용하지 못해서 발생하는 문제이니 다음과 같이 Mysql의 user의 인증 프로토콜을 수정한다면 오류를 고칠 수 있다.
docker exec -it mysql-container bash
mysql -u -root -p
패스워드
ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
위의 모든 과정을 실행하고 localhost:3000/경로에 접속하면 잘 접속하는걸 볼 수 있다.

+) 위의 모든 과정을 수행했음에도 접속이 불가능하다면 Ec2의 보안 그룹의 인바운드 규칙에서 포트번호를 열어주지 않아서 발생하는 문제일 가능성이 크다.
인바운드 규칙에서 필요한 포트번호를 열어주자.
필자의 경우에는 3000, 3306, 8080 포트번호를 열어주었다.
'클라우드' 카테고리의 다른 글
| 가비아 클라우드를 통해 배포하기 # 2 가비아 클라우드 접속 (0) | 2024.10.30 |
|---|---|
| 가비아 클라우드를 통해 배포하기 # 1 가비아 클라우드 생성 (0) | 2024.10.30 |
| Docker와 Mysql연동 및 Ec2 배포 #上 (1) | 2024.04.28 |
| Docker 배포해보기 #下 node.js 프로젝트 배포해보기 (1) | 2024.03.12 |
| Docker 배포해보기 #上 Docker란 무엇인가? (0) | 2024.03.11 |