나누는 이유
개발에서 사용하는 서버는 소스를 변경하면 전체 앱을 다시 빌드 해서 변경 소스를 반영해주는 것과 같이
개발 환경에 특화된 기능들이 있습니다.
분명 좋은 기능이지만 운영환경을 살펴 보자면 쓸모 없는 리소스를 사용하게 된다는 말이 될수도 있다는 거죠
그렇기에 개발환경에서는 개발환경에 특화된 서버를 운영환경에서는 조금 더 빠르고 가벼운 Nginx를 많이 사용한다고 합니다.
Dokcerfile.dev
Dockerfile.dev
인코딩 문제로 인하여 한글이 깨질 수도 있습니다. 따라서 따로 설정이 필요합니다.
my.cnf
Dockerfile
defaul.conf
Dockerfile
위와 같은 설정이 필요한 이유는 지금 Nginx는 프록시 역할을 하고 있습니다.
따라서 3000번 포트에서는 프론트엔드가, 5000번 포트에서는 백엔드가 돌아가고 있다는 것을 명시 해 주는 것입니다.
Nginx는 80번 포트에서 돌아가며
/api로 오는 요청은 백엔드로 요청이 흘러가고 그 이외에는 모두 프론트엔드로 흘러가도록 설정을 해 줍니다.
컨테이너들 간 통신을 위한 Docker-compose.yml을 작성 해 줍니다.
해당 디렉토리로 간다음 터미널 창에 입력하시면 됩니다.
docker-compose up --build
이렇게 실행이 완료 되었고 한번 localhost:3000에 접속 해 봅시다.
sungjin을 입력 한 다음 mysql 서버로 가서 한번 값이 들어 왔나 확인 해 봅시다
docker ps
로 실행 중인 컨테이너 목록확인.docker exec -it <컨테이너 ID> sh
mysql -u root -p
use myapp;
select * from lists;
sungjin hello라고 잘 들어오는 것을 확인 했습니다.
지금까지 개발 환경 구성은 마치었고 이제 운영환경을 위한 Dockerfile을작성 해 봅시다.
Dockerfile
1편에서의 운영환경 설계를 봅시다!
운영환경 설계를 보시면 리액트는 Nginx서버를 활용해 정적 파일을 제공하도록 하였습니다.
따라서 리액트에서 활용할 Nginx서버를 위한 설정이 또 필요하게 됩니다.
default.conf
Dockerfile
이렇게 운영환경을 위한 Dockerfile을 다 작성 하였습니다. 이제 운영환경을 github에 push하고 ,travis ci와 연결을 하고, AWS에 배포 해 주는 일이 남았습니다!!