어쩌다 풀다, 못 풀어서 다시 풀어 본 코딩 테스트 문제
Docker를 설치하고 간단하게 Nginx, Node 서버를 배포해봅니다.
2018-09-04
Explanation
Docker에 대해 1~2년 전부터 엄청 많이 들어서 이름만 익숙했었는데요. 최근에 들어서야 (조~금) 사용하게 되어 간단하게나마 docker를 설치하고 사용해보는 것에 대한 글을 적어 보려 합니다.
시중에 docker에 관련된 책도 많은 것으로 보아 그 사용이나 활용에 대해 많은 방법들이 있을 것 같아요, 하지만 저는 깊이 있게 사용하지 않고 간단하게 테스트 환경과 상용의 환경을 같게 해서 코드나 데이터의 무결성에 조금 도움이 되는?? 정도로만 사용하기 때문에 Docker에 대해 퀵스타트 정도로 얕게 적어 보려 합니다.
전에는 Vagrant로 가상 환경을 만들어서 작업을 했었는데요, 제가 생각하는 가장 큰 둘의 차이는 Vagrant는 모든 OS의 가상 환경을 만들 수 있고 Docker는 리눅스 기반의 환경만 가능합니다. 저는 서버 환경을 Ubuntu만 사용하기 때문에 아주 간단하게 비교했을 때 속도 면에서 훨씬 Docker가 빠르답니다.
우선 https://www.docker.com/ 사이트로 이동하여 회원가입을 하고 docker를 설치합니다.
맥OS 기준입니다.
1-1. Docker 홈페이지
1-2. Products > Docker Desktop 로 이동합니다.
1-3. 로그인 후 다운로드가 가능합니다. 회원이 아니라면 회원 가입 후 로그인 합니다.
1-4. Get Docker 버튼을 눌러 다운로드 한 후 설치하고, 실행해 줍니다.
1-5. 터미널을 열어주세요.
1 2 3 4 5 6 7 8 9 10 11 12 |
$ docker --version # docker 버전 확인 $ docker run hello-world # 지금은 이미지가 없으니까 Docker Hub에서 hello-world 라는 이미지를 # 이미지를 가져옵니다. $ docker run -d -p 80:80 --name webserver nginx # 80번 포트로 webserver 라는 컨테이너 이름으로 nginx 서버를 띄웁니다. $ docker container ls # 실행되고 있는 컨테이너의 정보를 봅니다. |
1-6. docker의 Getting started를 따라 진행하면 위와 같이 로컬 호스트 80번(기본값) 포트에 Nginx의 웹 페이지를 확인 할 수 있습니다.
2-1. 간단하게 디렉토리를 만들고 ‘npm init’ 으로 패키지를 만듭니다. (express 설치)
1 2 3 4 |
$ mkdir ./docker-node $ cd ./docker-node $ npm init $ npm install --save express |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// package.json { "name": "docker-node", "version": "1.0.0", "description": "docker node test", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "falsy", "license": "WTFPL", "dependencies": { "express": "^4.16.3" } } |
2-2. index.js 파일을 만듭니다.
1 |
$ vi index.js |
1 2 3 4 5 6 7 8 9 10 |
const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('hello world'); }); app.listen(80, () => { console.log('test listening on port 80'); }); |
2-3. 모듈 파일을 복사하지 않도록 .dockerignore 파일을 만듭니다.
1 |
$ vi .dockerignore |
1 |
node_modules/ |
2-4. Dockerfile 파일을 만듭니다.
1 |
$ vi Dockerfile |
1 2 3 4 5 6 7 |
FROM node:8 COPY . . RUN npm install EXPOSE 80 WORKDIR / CMD node index.js |
2-5. Docker 이미지를 만듭니다.
1 |
$ docker build --tag docker-node:dev . |
2-6. 이미지 생성이 끝나면 이미지가 잘만들어 졌는지 확인합니다.
1 2 |
$ docker images # docker-node |
2-7. 생성한 이미지를 실행합니다.
1 |
$ docker run --name docker-node-container -p 80:80 docker-node:dev |
2-8. 이제 브라우저를 열고 localhost로 접속하면[포트 80번(기본값)] 위와 같이 ‘hello world’가 뜨는 걸 확인 할 수 있습니다.
3-1. 실행 중인 컨테이너 중지 및 삭제, 이미지 삭제
1 2 3 4 5 6 7 8 |
$ docker stop docker-node-container # 'docker-node-container' 컨테이너 중지 $ docker container rm docker-node-container # 'docker-node-container' 컨테이너 삭제 $ docker image rm docker-node:dev # 'docker-node:dev' 이미지 삭제 |