-
11. 도커를 이용한 리액트 실행React 2023. 6. 27. 15:06
도커를 사용하는 이유
: 프로그램을 다운 받는 과정을 간단하게 만들기 위해서.
도커 없이 다운받기
-> 프로그램을 설치하는 과정에서 에러 발생 가능성이 있다.
=> 갖고 있는 서버, 패키지 버전, 운영체제 등등에 따라 프로그램을 설치하는 과정 중에 많은 에러들이 발생하게 된다.
#게다가 설치 과정이 다소 복잡할 수 있다.
도커 없이 Redis 다운 받는 과정
-> wget 이 없어 에러 발생.
-> wget 을 다운받은 후, 다시 다운받아야 한다.
=> 어떠한 특정 프로그램을 받을때 거기에 맞는 부수적인 것들도 계속 받아야하고, 그에 따라 설치하는 과정이 복잡해지고 에러도 많이 생기게 된다.
도커로 Redis 다운
docker run -it redis
-> 도커를 이용하여 프로그램을 설치하면 예상치 못한 에러도 덜 발생하며, 설치하는 과정도 훨씬 간단해진다.
=> 도커가 꼭 필수사항이 아니지만, 선택사항으로 잘 활용한다면 좀 더 간편해질 수 있다.
도커란 무엇인가
: 컨테이너를 사용하여 응용프로그램을 더 쉽게 만들고 배포하고 실행할 수 있도록 설계된 도구.
컨테이너 기반의 오픈소스 가상화 플랫폼이며 생태계이다.
컨테이너란?
-> 컨테이너 안에 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해준다.
#AWS, Azure, Google cloud 등등...
도커를 사용할 때의 흐름 감잡기
도커 사용 시에는 항상
-> 먼저 도커 CLI에 커맨드를 입력한다.
=> 그러면 도커 서버 (도커 Daemon) 이 그 커맨드를 받아서 그것에 따라 이미지를 생성하든 컨테이너를 실행하든 모든 작업을 하게 된다.
실제로 커맨드를 입력해보기
docker run hello-world
-> 클라이언트에서 도커 서버로 요청을 보낸다.
-> 서버에 'hello-world' 라는 이미지가 이미 로컬에 cache 됐는지 확인한다.
-> 없다. (Unable to find image 'hello-world:latest'... 라는 문구 출력)
-> Docker Hub (이미지가 저장되어 있는 곳)에서 이미지를 가져오고 로컬에 보관한다.
-> 이제 이미지가 있으므로 컨테이너를 생성한다.
여기서 한번 더 docker run hello-world 하면 ?
: Unable to find image 'hello-world:latest'... 문구 없이 프로그램이 실행된다.
=> 이미 이미지가 있으므로 이미지를 가져오는 과정 없이 컨테이너를 생성하는 것이다.
도커 이미지로 도커 컨테이너 만들기
: 이미지는 응용 프로그램을 실행하는데 필요한 것을 포함하고 있다.
필요한 것?
-> 컨테이너가 시작될 때 실행되는 명령어
-> 파일 스냅샷
이미지로 컨테이너 만드는 순서
- Docker 클라이언트에 docker run '이미지 이름' 입력해준다.
- 도커 이미지에 있는 파일 스냅샷을 컨테이너 하드 디스크에 옮겨 준다.
- 이미지에서 가지고 있는 명령어를 이용해서 실행시켜준다.
도커 이미지 생성하는 순서
간단하게 도커 이미지 다시 복습하기
-> 도커 이미지는 컨테이너를 만들기 위해 필요한 설정이나 종속성들을 갖고 있 는 소프트웨어 패키지이다.
-> 도커 이미지는 Dockerhub에 다른 사람들이 만들어 놓은 것을 이용할 수도 있으며, 직접 도커 이미지를 만들어서 사용할 수도 있고, 직접 만든 것을 Dockerhub에 업로드할 수도 있다.도커 이미지를 이용해서 도커 컨테이너를 생성
도커 이미지 생성하는 순서
도커 파일 만들기
도커 파일(Docker file)이란 ?
: 도커 이미지를 만들기 위한 설정 파일이며, 컨테이너가 어떻게 행동해야 하는지에 대한 설정들을 정의해 주는 곳.
Dockerfile을 만드는 법
-> 베이스 이미지를 명시해준다.
-> 추가적으로 필요한 파일을 다운 받기 위한 몇 가지 명령어를 명시해준다.베이스 이미지는 무엇인가?
-> 도커 이미지는 여러개의 레이어들로 되어 있다. 그 중에서 베이스 이미지는 이 이미지의 기반이 되는 부분이다.
도커 이미지 "hello-world" 출력하기
- 도커 파일을 만들 폴더를 하나 만든다. #dockerfile-folder 폴더 생성
- 방금 생성한 도커 파일 폴더를 에디터(Visual Studio Code)를 이용해서 실행
- 파일 하나를 생성한다. #dockerfile
- 그 안에 기본적인 토대를 명시한다.
FROM : 이미지 생성 시 기반이 되는 이미지 레이어.
RUN : 도커 이미지가 생성되기 전에 수행할 쉘 명령어.
CMD : 컨테이너가 시작되었을 때 실행할 실행 파일 또는 셀 스크립트. #DockerFile 내 1회만 사용가능. - 베이스 이미지부터 실제 값 추가.
- 베이스 이미지는 ubuntu를 써도 되고 centos 등을 써도 되지만 hello를 출력하는 기능은 굳이 사이즈가 큰 베이스 이미지를 쓸 필요가 없기에 사이즈가 작은 alpine 베이스 이미지를 사용.
- hello 문자를 출력해주기 위해 echo를 사용하여야 하는데 이미 alpine 안에 echo를 사용하게 할 수 있는 파일이 있기에 RUN 부분은 생략함.
FROM alpine CMD [ "echo", "hello-world" ]
=> 이렇게 하면 도커 파일 만들기까지 한 것이다.
도커파일로 도커 이미지 만들기
: 도커 파일에 입력된 것들이 도커 클라이언트에 전달되어서 도커 서버가 인식하게 해야한다.
=> docker build ./ 또는 docker build .
Build 명령어
: 해당 디렉토리 내에서 dockerfile이라는 파일을 찾아서 도커 클라이언트에 전달시켜준다.
: docker build 뒤에 ./ 와 . 는 둘 다 현재 디렉토리를 가리킨다.
docker build . 를 해보자
=> 베이스 이미지에서 다른 종속성이나 새로운 커맨드를 추가할 때는 임시 컨테이너를 만든 후 그 컨테이너를 토대로 새로운 이미지를 만든다. 그리고 그 임시 컨테이너는 지워준다.
리액트를 위한 도커 파일 작성하기
-> 현재까지는 Dockerfile을 그냥 한 가지만 만들었지만 실제로는 Dockerfile을 개발단계를 위한 것과 실제 배포 후를 위한 것을 따로 작성하는 게 좋다.
=> 개발단계를 위해서 Dockefile이 아닌 Dockerfile.dev 라는 파일을 만들어보자.
Dockerfile.dev를 작성한 후, 이 도커 파일로 이미지를 생성한다.
-> docker build ./ 으로 이미지 생성한다.
-> unable to evaluate symlink ...이러한 에러 발생.
-> 그 이유는 원래는 이미지를 빌드할 때 해당 디렉토리만 정해주면 dockerfile 을 자동으로 찾아서 빌드하는데 현재는dockerfile이 없고 dockerfile.dev 밖에 없다.
=> 그러기에 자동으로 올바른 도커 파일을 찾지 못하여 이런 에러가 발생.
=> 임의로 build 할 때 어떠한 파일을 참조할지 알려주는 방법 : 빌드를 할 때 docker build . 하는 것이 아니라 이 아래처럼 해줘야 한다.
=> 그래서 이런 식으로 -f 옵션을 이용하여서 다시 해보면, 개발단계에서 리액트를 실행하게 해 줄 이미지빌드가 가능해졌다.
생성한 이미지로 어플리케이션 실행 시 접근이 안 되는 이유 (포트 맵핑)
-> 우리가 이미지를 만들 때 로컬에 있던 파일(package.json)등을 컨테이너에 복사해줘야 했었다. 그것과 비슷하게 네트워크도 로컬 네트워크에 있던 것을 컨테이너 내부에 있는 네트워크에 연결을 시켜주어야 한다.
EC2 에서 도커 설치 및 실행
#나는 해당과정을 진행하지 못했다... (AWS 로그인이 안되기 때문)
'React' 카테고리의 다른 글
10. 리덕스 (0) 2023.06.20 09. 리액트 Version 18 (0) 2023.06.19 8. Next.js와 TypeScript (0) 2023.05.29 7. React TDD 를 이용한 간단한 앱 생성 및 배포 (0) 2023.05.22 6. React TDD 기본 (0) 2023.05.22