React 앱을 만들었다는 가정하에 진행되며 Nginx에 대한 개념없이 단순히 사용하고 있음을 미리 알립니다.
Make docker image using Nginx
Nginx 서버를 사용해 제작한 React 앱을 도커 이미지로 만들어보자.
도커 이미지로 만들고 도커 허브에 올리면 Github처럼 어디서든 받아서 컨테이너를 실행시킬 수 있고 수정해서 다시 올릴 수 있다.
Create Nginx server Container
먼저 React 앱을 동작시킬 Nginx 서버를 도커 이미지를 통해 생성한다. Nginx는 도커 허브에서 공식 이미지를 지원하고 있으므로 바로 다운받아 실행이 가능하다.
1️⃣ Nginx 컨테이너 생성
로컬 터미널에서 docker run
명령을 통해 Nginx 이미지를 받아 컨테이너를 생성한다.
만약 이미지가 다운받아져있지 않다면 자동으로 :latest
태그를 달아 최신 버전을 다운로드해서 생성한다.
$ docker run --name web -p 80:80 -dt nginx
$ docker ps | grep web
25f71d09fc77 nginx "/docker-entrypoint.…" 18 seconds ago Up 17 seconds 0.0.0.0:80->80/tcp web
2️⃣ IP 정보 확인
로컬에서 테스트 하는 경우에는 굳이 필요하진 않지만 IP 정보는 언제 필요할지 모른다. 확인할 수 있는 명령어정도는 알아두도록 하자.
$ docker inspect web | grep "IPAddress"
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
3️⃣ default.conf 파일 생성
Nginx에서 사용할 default.conf
파일을 생성한다.
서버 설정에 대한 지식이 있다면 더 채워도 되지만 여기서는 간단하게 몇가지만 설정한다.
- 80포트로 통신
- root를
/var/www/html
로 지정
server{
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html/;
}
4️⃣ 컨테이너로 복사
3번에서 생성한 default.conf
파일을 컨테이너로 전송해준다.
FTP를 사용해도 되고 도커 명령을 통해 전송해도 된다. 컨테이너 내부에 저장할 위치만 잘 확인하도록 하자.
$ docker cp default.conf web:/etc/nginx/conf.d/default.conf
5️⃣ /var/www 폴더 생성
도커 명령으로 Nginx 컨테이너 내부에 /var/www/html
폴더를 만든다.
$ docker exec web mkdir /var/www/html
6️⃣ build 폴더 복사
도커 명령으로 build한 react 앱을 5번에서 생성한 폴더로 복사한다.
$ docker cp build/ web:/var/www/html
7️⃣ 권한 변경
도커 명령으로 html폴더의 권한을 변경해준다.
$ docker exec web chown -R nignx:nginx /var/www/html
8️⃣ nginx reload
이제 마지막으로 변경된 내용을 적용하기위해 Nginx 서버를 다시 시작한다.
$ docker exec web nginx -s reload
이제 localhost
로 접속하면하면 내가 만든 React앱이 동작하는 것을 확인할 수 있다.
Push image into Docker Hub
이제 React 앱이 동작하는 Nginx 서버를 컨테이너로 생성했다. 만들어진 컨테이너를 이미지로 저장해 도커 허브에 올려보도록 하자.
1️⃣ 도커 이미지 생성
동작하고 있는 컨테이너를 docker commit
명령을 통해 이미지로 만든다.
- 컨테이너 이름 : web
- 이미지 이름(식별자/이름) : qkrwltn24/react-nginx
- 이미지 버전 : v1
$ docker commit web qkrwltn24/react-nginx:v1
$ docker images | grep react-nginx
qkrwltn24/react-nginx v1 16415ce38f4e About an hour ago 138MB
2️⃣ 도커 허브로 Push
만들어진 이미지를 도커 허브에 올린다.
$ docker push qkrwltn24/react-nginx:v1
도커 허브에 접속하면 이미지가 제대로 올라갔는지 확인할 수 있다.
Docker Image Confirm using AWS EC2
도커 허브에 이미지를 올렸으니 어디서든 pull 받아서 사용할 수 있다.
AWS EC2인스턴스로 아주 멀리있는 지역에서 앱을 실행하고 접속이 가능한지 확인해보자.
여기서는 버지니아 북부에 인스턴스를 만들고 Public IP를 사용해 원격으로 접속 및 테스트를 진행했다.
Create Instance
SSH와 HTTP를 통해 접속이 가능한 AWS EC2 인스턴스를 하나 생성한다.
생성과정에서 Public IP 자동 생성 활성화를 반드시 확인해야한다.
여기서는 Ubuntu 20.04를 베이스 이미지로 사용했다.
Run React App
1️⃣ Connect by SSH
SSH로 인스턴스에 원격으로 접속한다.
Putty, Xshell 등 다양한 프로그램이 있으니 선택해서 사용하면 된다.
여기서는 MobaXterm을 사용했다.
2️⃣ Download Docker
접속한 인스턴스에서 docker를 사용하기 위해 공식 홈페이지에서 각 환경에 맞는 방식으로 docker를 설치한다. SSH로 접속할 경우 CLI를 사용해 설치해야하므로 순서에 맞게 설치를 진행해야한다.
설치가 완료되면 docker --version
명령을 통해 확인해보자.
3️⃣ Download using Dockerhub
도커 설치가 완료됐다면 이제 도커 허브에 있는 이미지를 받아서 실행해보도록 한다.
docker run
명령은 이미지가 없다면 받아서 컨테이너 실행까지 한번에 진행한다. run
명령을 통해 React 앱을 실행까지 시켜보자.
$ sudo docker run --name web -p 80:80 -dt qkrwltn24/react-nginx:v1
On Browser
브라우저에서 EC2 인스턴스의 public IP를 통해 접속하면 인스턴스를 통해서 Nginx 서버와 React 앱이 제대로 동작하고 있음을 확인할 수 있다.
Uploaded by Notion2Tistory v1.1.0