본문 바로가기
2023년 이전/Web&Server

Docker 실행 해보기!

by JeongUPark 2019. 12. 2.
반응형

이 자료는 이전에 2018년에 제가 개인적으로 docker 실행해본 내용으로 작업을 하였습니다. docker 버전 및 일부 내용은 지금과는 다른 수 있습니다.

 

docker를 한번 사용해 보겠습니다.

 

설치는 우선 컴퓨터가 가상화를 지원해야 한다고 해서 확인 해보니 제가 사용중인 컴퓨터는 가상화를 기원해서 docker를 다운 받았습니다.
Docker for windows Installer를 다운받아서 설치를 해보았는데, 

위와 같은 문구가 뜨면서 설치가 안되었습니다. 그래서 구글링을 해보니 윈도우7, 윈도우 10 홈 버전 이하 DokerToolBox라는 것을 다운 받아서 설치해야 하고, 윈도우 10 프로 이상 또는 윈도우 서버 2016 버전은 Docker for window로 다운 받아 설치하면 된다고 합니다.

그래서 DokerToolBox를 다운 받아서 설치 하니

위와 같은 실행 파일이 생성 되었습니다.

자 설치를 완료했으니 사용을 해봐야 겠죠? Docker의 동작은 위의 아이콘 중에 Docker Quickstart Terminal을 실행시켜서 작업할 수 있습니다.

그리고 이 프로그램이 가상화 플랫폼이기 때문에 virtualBox에서도 동작이 가능합니다. 그리고 virtualbox에서 가상으로 만들어진 os가 동작을 하지 않으면 docker도 동작을 하지 않습니다.

아무튼 Docker Quickstart Terminal을 실행 시키면 다음과 같은 화면을 볼 수 있습니다.

그럼 docker로 동작할 node.js 서버를 만들어 보겠습니다. 간단하게 hellow docker를 보여주는 code로 작성하겠습니다.
main.js 

const express = require('express');
const bodyParser = require('body-parser');
const app = express();


app.get('/',function(req,res){
    res.send("hello?");
});


app.listen(8080, ()=>console.log("node server main.js listening on port 8080"));

pakage.json

{
  "name": "gtracker_front_server",
  "version": "1.0.0",
  "description": "front_end server for gtrakcer UI",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "nodemon main.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.18.3",
    "express": "^4.16.3",
    "ejs": "~2.6.1",
    "uuid": "^3.2.1",
    "nodemon": "<=1.18.4"
  }
}

위의 main.js를 실행하면 다음과 같은 결과를 볼 수 있습니다.

 

자 그럼  docker를 통해서 image를 만들어 보겠습니다.

우선 image를 만들기 위한 Dockerfile이 필요 합니다. (처음에 Dockerfile.txt로 만들었다 안되서 많이 해맸다. .txt가 아니라 Dockerfile라는 이름을 가진 파일입니다.)
그 Dockerfile의 내용은 다음과 같습니다.

 

FROM node:v8.11.4
MAINTAINER jeongupark

#app 폴더 만들기 - NodeJS 어플리케이션 폴더
RUN mkdir -p /app
#winston 등을 사용할떄엔 log 폴더도 생성

#어플리케이션 폴더를 Workdir로 지정 - 서버가동용
WORKDIR /app

#서버 파일 복사 ADD [어플리케이션파일 위치] [컨테이너내부의 어플리케이션 파일위치]
#저는 Dockerfile과 서버파일이 같은위치에 있어서 ./입니다
ADD ./ /app

#패키지파일들 받기
RUN npm install

#배포버젼으로 설정 - 이 설정으로 환경을 나눌 수 있습니다.
ENV NODE_ENV production

#서버실행
CMD node main.js

그럼 Dockerfile을 통해서 iamge를 빌드해보겠습니다.
명령어는

docker build --tag server:0.0.1 [Dockerfile이 위치하는 경로]

뒤에 는 경로에는 폴더까지만 적으시면 됩니다. 저 같은 경우에는 계속 파일 이름을 너어서 실패했었습니다.  그리고 tag 다음에 적은 것은  image의 Repository 명과 tag 명입니다. (Repository명:tag명)
그래서 동작을 하면 아래 처럼 막 화살표가 움직이고 

그리고 완료가 되면

docker images 

로 명령하면 생성된 image 정보를 볼 수 있습니다.

 

이제 image를 만들 었으니 image를 동작하기 위한 컨테이너를 만들어 보겠습니다.
명령어는 

docker create --name [서버명] -p [외부 포트:컨테이너 내부포트] [이미지명:버전태그]

고 저같은 경우에는 

위와 같이 실행하였습니다. 실하고 나니 밑에 이상한 글씨들이 나오고 컨테이너가 생성된건지 모르는데

 

docker ps -a로 생성된 컨테이너를 확인 할 수 있습니다. (docker ps는 실행중인 컨테이너만 확인 됩니다.)
그래서

docker start [NAMES]

통해서 실행을 하면 

그리고 docker ps로 확인을 하면

 

그래서 이제 browser에서 확인을 해보면 

 

연결이 안됩니다. 아니 다 했는데! 고생했는데 왜 안될까!!!? 하고 고민을 해봤는데, virtualBox의 os 포트가 안열려 있습니다. 그래서 열었습니다.

여기서 포트 포워딩에 들어가서

이렇게 추가해 주었습니다. (각각의 의미는 게스트 포트는 virtualbox Port를 호스트포트는 window 의 Port로 연결하겠다는 것입니다.)

그랬더니

 

짜란 하고 결과가 나왔습니다.

반응형