도커
개발 환경 요소들이 설치된 모습을 이미지로 저장합니다. 그리고 그 저장한 이미지를 클라우드에 올리고 그 이미지들이 서로 연결돼서 동작하는 설정을 문서(Dockerfile)로 저장합니다. 새 컴퓨터에서 도커만 설치하면 이 문서의 내용대로 이미지를 다운받아 설치합니다.
가상머신과 비슷하지만 그것보다 훨씬 빠르고 자원을 효율적으로 사용합니다! 불필요한 추가적 운영체제 설치가 필요 없습니다.
도커를 쓰는 이유?
서버를 돌리기 위해선 환경이 갖춰져야 합니다.
예를 들어 회사에 각각 윈도우와 맥을 쓰는 개발자가 있었고, 리눅스를 쓰는 개발자가 신입으로 들어왔다고 해봅시다.
그럼 신입의 컴퓨터에 Node 등 버전을 똑같이해서 깔아야겠죠. 깔았는데 실행이 안돼요!
왜냐면 운영체제에 따라서 환경이 달라지기 때문입니다. 버전 맞춰서 생성을 해도 문제는 항상 발생했어요.
그래서 가상 머신(VM)이 나옵니다. 가짜 컴퓨터에 운영체제를 하나 더 까는거죠! 보통 리눅수 운영체제를 설치하는데, 가볍고 물이기 때문입니다. 근데 여기서 또 문제, 컴퓨터 안에 컴퓨터가 또 있으니까 너무 느린 문제가 있었죠.
그래서 나온게 Docker입니다. Docker는 부팅 등 운영체제의 핵심 기능(커널)을 공유하는 가상머신입니다. OS 전체를 새로 설치하지 않아도 되고, 컴퓨터에 도커를 설치하면 도커 안에 리눅스가 설치되어 있는 형식입니다. 도커랑 내 컴퓨터는 일정 기능을 공유하고 있는거예요.
맥도 원본이 유닉스, 리눅스 계열이어서 상관이 없습니다. 윈도우는 리눅스랑 완전 다른데...? 그래서 공유가 안됩니다. 그래서 윈도우에서 리눅스 기능을 사용하려면 WSL(Window Sebsystem for Linux)를 설치해야 합니다.
도커의 장점
1. 개발/배포환경 통일
2. 프로그램 미리 설치
3. 가벼운 가상 컴퓨터
도커 설치
Home - Docker
Learn how Atomist will help Docker meet the challenge of securing secure software supply chains for development teams.
www.docker.com
도커 홈페이지에 접속한 뒤 Get Started -> 운영체제에 맞게 다운로드합니다.
Docker 실행
원하는 경로에와서 최상단에 Dockerfile을 생성합니다. Dockerfile은 컴퓨터를 만드는 설명서와 같습니다. 그리고 이것대로 실행하면 내 컴퓨터 안에서 EC2 인스턴스가 실행되는 것입니다.
이건 docker hub에서 다운로드 받아가지고 오는데, 한 번 들어가서 검색해보면 우분투 안에 node.js랑 yarn까지 설치해놓고 그 전체를 통으로 올려놓은 것들을 볼 수 있습니다. 그래서 FROM node:14 하면 node랑 yarn이 설치되어있는 리눅스가 설치되어 있는 걸 받아올 수 있습니다.
왼쪽에 있는 목록을 그대로 EC2에 가서 설치하라는 설명서를 작성할 것입니다.
RUN mkdir aaaa
COPY . /aaaa/
aaaa라는 폴더를 만들고 거기에 .(전부)를 aaaa에 복사하겠다는 의미입니다.
마지막 최종 명령은 CMD로 합니다. CMD는 한 번 밖에 못 씁니다.
복사할 때 node_modules가 같이 들어가면 안되기 때문에 .dockerignore 라는 파일을 생성한 후 node_modules를 적어줍니다.
커서가 어디서 깜빡거릴지(어디서 명령을 실행할지) 정하는 것은 WORKDIR(workingdirectory)입니다.
WORKDIR /class_build/
라고 쓰면 class_build에 들어가서 그 다음 명령이 수행될 것임을 의미합니다.
docker-compose.yml 파일을 생성합니다. Docker-compose 파일에 설정을 어떻게 할지 미리 적어둘겁니다. 그리고 docker-compose 명령어로 컨테이너를 실행하고 닫고를 할 것입니다.
yml 파일이기 때문에 tab과 space에 유의합니다.
version: "3.3"
services:
class_build:
build:
context: .
dockerfile: Dockerfile
여기서 services는 컴퓨터들을 의미합니다.
context는 위치, dockerfile은 파일 이름입니다.
여기서 위치는 최상단이고 파일 이름은 Dockerfile이므로 .과 Dockerfile을 적어준 것입니다.
컨테이너를 실행하기 전에 먼저 해야할 것은 이미지를 만드는 것입니당. Dockerfile이 바로 그 이미지입니다! 컴퓨터를 만드는 설명서 같은 거라고 했었죠. 거기서 이미지를 만들기 위한 명령어를 입력합니다.
FROM node:14
WORKDIR /class_build/
COPY . /class_build/
RUN yarn install
RUN yarn build
CMD yarn start
명령어들은 CMD 전까지 실행되고 CMD는 그 컴퓨터가 실행될 때 한 번 실행됩니다.
docker-compose build : 컴퓨터를 만드는 과정
docker-compose up : 만든 컴퓨터를 실행하는 것
build와 up을 하면 localhost 주소가 나오는데, 이걸 내 컴퓨터에서 바로 들어갈 수가 없습니다.
포트 포워딩을 해주어야 합니다.
docker-compose.yaml파일에
version: "3.3"
services:
class_build:
build:
context: .
dockerfile: Dockerfile
ports:
- 3000:3000
ports: 부분을 추가합니다. 이때 띄어쓰기가 잘 못 되면 제대로 실행되지 않습니다.
뜻은 내 컴퓨터 3000번이랑 도커 안의 3000번이랑 연결시켜달란 뜻입니다.
yarn start 했을 때 문제점은 쉘이 먹통이 되거나 ctrl+c를 누르면 꺼져버린다는 것이었습니다. (ctrl+c가 실수로 눌렸을 경우)
이렇게 실행했을 때 켜지고 대기 상태로 빠지는데, 이 상태를 포그라운드(foreground)배포라고 합니다. 눈으로 볼 수 있게 앞에서 배포했다는 뜻입니다.
앞에서 안 보이게 배포하는 것이 background배포입니다.
docker-compose up -d ( 백그라운드 배포 )
docker ps (도커 프로세스. 실행중인지 확인할 수 있다.)
docker exec -it ( 이 컴퓨터 안에 접속해서 수정, 삭제 등이 가능함)
docker exec -it [docker ps쳤을 때 나오는 id] /bin/bash - 컨테이너 아이디에 접속해서 터미널을 실행시킴
빠져나가고 싶으면 exit
도커 배포 종료하고 싶다면? docker-compose stop
백그라운드 배포를 하고 docker ps 를 쳐보면 도커가 실행중인지를 알 수 있습니다.
docker exec -it는 그 컴퓨터 안에 접속해서 수정, 삭제 등이 가능하게 하는데 이 뒤에 docker ps를 쳤을 때 나오는 id를 입력하고 그 뒤에 /bin/bash를 입력합니다. 컨테이너 아이디에 접속해서 터미널을 실행시키는 것을 의미합니다.
여기서 빠져나가고 싶으면 exit, 도커의 배포를 종료하고 싶다면 docker-compose stop을 입력합니다.
sudo yum install docker
그 가상 컴퓨터 안에서 도커를 설치합니다.
sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose version
네 개를 한 줄 한 줄씩 입력합니다.
(마지막 명령어는 version을 확인하는 명령어입니다)
그 다음 aws(아마존 웹서비스)용 도커를 설치하고 실행을 합니다.
sudo amazon-linux-extras install docker // 도커 설치
sudo service docker start // 도커 실행
sudo usermod -a -G docker ec2-user // 도커 권한 변경
모든 입력 후에, EC2 터미널을 종료 후, 다시 열어 줍니다.
그리고 나서 localhost 주소에 접속해보면 접속이 됩니다.
동적인 페이지에도 접속이 가능합니다.
그러나 {router.query._id}를 받아오진 못하는데요, 이건 빌드 아이디가 통합이 안돼있어서입니다.
storage와 instance의 배포 아이디가 같아야 합니다.
class_build(내가 작업하고 있는 내 컴퓨터의 폴더)에서 yarn build:ssg를 합니다. 그럼 out 폴더에 html, css, js파일 등이 들어왔겠죠. AWS에 가서 S3 스토리지에 들어가서 있는 것을 삭제한 후에 out 폴더 안의 정적 자료들을 다시 긁어서 옮겨줍니다. 그리고 전체 선택 후 작업에서 퍼블릭으로 전환합니다.
그냥 ~입니다 말투로 적어보고 싶어서 적었습니다... 어디서 배껴서 그런 것이 아닙니다,,,
'프론트엔드✏️ > 코드캠프' 카테고리의 다른 글
알고리즘 - [카카오 인턴] 키패드 누르기 (0) | 2022.06.30 |
---|---|
220630 프론트엔드 부트캠프 51일차 : 동적 배포 마무리, Docker (0) | 2022.06.30 |
Javascript vs TypeScript (0) | 2022.06.30 |
220629 프론트엔드 부트캠프 50일차 : 배포를 해보자!(3) - 동적 배포 실습 (0) | 2022.06.30 |
알고리즘 - 신규 아이디 추천 replace, slice, concat, (0) | 2022.06.29 |