도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이다.
<컨테이너>
여기서 컨테이너는 격리된 공간에서 프로세스가 동작하는 기술이다.
컨테이너 기술도 가상화 기술의 일종이지만 기존의 것과는 동작 방식이 다르다.
기존의 가상화 기술은 os를 가상화했다. VMware나 Virtual Box 같은 os 전체를 가상화하여 사용하였는데 무겁고 느려서 사용하기 힘들다는 단점이 있다.
이를 해결하기 위해 프로세스를 분리하는 기술이 나왔고 이것이 리눅스 컨테이너이다.
CPU나 메모리는 딱 프로세스가 필요한 만큼만 추가로 사용하고 성능의 차이도 거의 없었다.
하나의 서버에 여러개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행되어 편리하게 관리를 할 수 있고 컨테이너 하나를 만드는데 걸리는 시간은 1,2초로 가상머신보다 훨씬 빠르다.
<이미지>
이미지는 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 것이다.
이미지는 바뀌지 않고 추가되거나 바뀌는 값들은 컨테이너에 저장된다.
컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 더 이상 파일을 컴파일하고 설치할 필요가 없다. 새로운 서버가 추가되면 미리 만들어 놓은 이미지를 다운받고 컨테이너를 생성만 하면 된다. 한 서버에 여러개의 컨테이너를 실행할 수도 있다.
<도커 설치>
https://www.docker.com/products/docker-desktop/
여기서 설치를 하면 된다.
<도커 사용법>
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
docker run 명령어로 도커를 실행할 수 있다.
자주 사용하는 옵션들이다.
docker run -p 4567:80 -d nginx:latest
이렇게 nginx 이미지 기반 도커를 실행하고
docker ps
로 실행중인 컨테이너를 확인할 수 있다.
<도커라이징>
도커라이징은 도커 컨테이너를 이용해 애플리케이션을 패킹, 배포, 실행하는 프로세스이다.
도커를 사용해서 웹앱을 배포할 건데 도커라이징 방법에 대해서 찾아보니 대부분 nodejs 기반 웹을 배포하길래 전에 만들었던 nodejs 게시판으로 방법을 배워보았다.
1. Dockerfile 생성
FROM node:18
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install -g npm
COPY . .
EXPOSE 3000
CMD [ "node", "app.js" ]
Dockerfile을 만들고 이 코드를 넣었다.
첫 줄의 node:18은 버전을 뜻하는데 최신 버전을 사용하고 있다면 node:latest로 써도 된다.
WORKDIR은 이미지를 받을 폴더를 설정하는 것이고 COPY package는 .json으로 끝나는 패키지 파일들을 복사한다.
RUN npm install -g npm은 npm 을 이용해 위에서 복사한 패키지들을 설치해주는데
대부분의 사이트에서 그냥 RUN npm install로 작성하라고 방법을 알려주는데 에러가 나서 -g npm을 붙여서 해결하였다.
COPY . .은 설치된 파일을 복사한다. .은 현재 디렉토리를 의미한다.
EXPOSE로 3000번 포트를 열고 node app.js 명령어를 실행시킨다는 의미이다.
2. .dockerignore 파일 생성
.dockerignore이라는 파일을 만든다.
node_modules
npm-debug.log
이 파일은 Docker 이미지를 생성할 때, 이미지에 포함하고 싶지 않을 파일을 제외할 수 있게 해준다.
로컬 모듈과 디버깅 로그를 로드하지 않게 설정하였다.
없어도 잘 되기는 한다.
3. 빌드, 실행
docker build . -t bluesunset/dockerstudy
docker run -p 49160:3000 -d bluesunset/dockerstudy
이런식으로 build와 run을 할 수 있다. bluesunset은 도커 아이디이고, dockerstudy는 이미지의 이름을 지정해준 것이다.
'기타' 카테고리의 다른 글
Burp Suite (0) | 2023.11.01 |
---|