초보자의 Docker 사용기

Docker의 간단한 명령어

현재 Lubycon 에서 진행하는 프로젝트에서 front-end 서버를 위한 docker 세팅이 필요해서 갑자기 docker에 대한 학습을 하기 시작했다. lubycon에서 진행하는 프로젝트의 spec은 Nodejs, Vuejs 그리고 Typescript를 이용한 서버사이드 랜더링의 SPA 어플리케이션이다. 일단 학습하기에 앞서 간단한 docker에 간단한 명령어를 먼저 학습해야 했다.

이미지 빌드

1
$ docker build -t -p 80:80 <your username>/node-web-app .

내가 빌드한 이미지 리스트

1
$ docker images

이미지 삭제

1
$ docker rmi [image id]

동작 중인 컨테이너 리스트

1
$ docker ps

모든 컨테이너 리스트

1
$ docker ps -a

컨테이너 삭제

1
$ docker rm [container id]

컨테이너 로그 확인

1
$ docker logs [container id]

컨테이너 접속

1
$ docker exec -it <container id> /bin/bash

컨테이너 실행시키

1
$ docker run -i -t --name [docker-example] -p 3000:3000 [images name] /bin/bash

위의 기본적인 명령어만 가지고 어느정도 컨테이너를 띄우고 내리는 것은 간단하게 된다.

일단 간단한 Docker image를 만들기 위해서는 간단한 어플리케이션이 하나 필요하다. 아무래도 Javascript로 이루어진 Node 서버가 나에게는 조금 더 쉽거니와 Lubycon에서 역시 Node 서버를 사용하기 때문에 Node 서버를 기준으로 글을 썼다.

일단 간단한 express 서버를 띄운다. express 서버를 띄우기 위해선 express-cli가 설치되어 있어야 한다. 혹시나 설치가 되어 있지 않다면 generator를 global 옵션을 이용해서 설치한다.

1
$ npm install express-generator -g

위와 같이 global 옵션을 이용해서 설치했다면 간단하게 express 서버 시작하는 것은 간단하게 된다. 일단 docker를 테스트 할 수 있는 디렉토리로 들어가 아래와 같은 명령어로 express 서버를 셋업 & 모듈을 설치해준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# expres 설치를 하면 아래 create와 같은 설치된 리스트가 자동으로 나온다.
$ express

create : .
create : ./package.json
create : ./app.js
create : ./public
create : ./routes
create : ./routes/index.js
create : ./routes/users.js
create : ./views
create : ./views/index.jade
create : ./views/layout.jade
create : ./views/error.jade
create : ./bin
create : ./bin/www
create : ./public/javascripts
create : ./public/images
create : ./public/stylesheets
create : ./public/stylesheets/style.css

# 모듈 설치
$ npm install

위와 같이 설치한 후, 서버를 실행시킨 후 localhost:3000 으로 접속하면 아래와 같은 화면이 나온다.

/images/docker/docker09.png

위와 같이 ‘Welcome to Express’ 라는 글이 나오면 docker이미지를 만들 서버는 준비가 완료되었다. 이제 Docker image를 만들기 위한 준비만 하면 된다.

아래와 같이 Nodejs 어플리케이션의 최상의 root에 Dockerfile 이라는 파일을 생성한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# nodejs 서버를 명시
FROM node:carbon

# 디렉토리를 생성, working directory를 설정
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# node 모듈이 설치된 package.json를 카피하여, 모듈을 설치
COPY package*.json ./
RUN npm install

# 내가 만들 모든 파일을 copy 해서 옮겨간 후, 3000 port를 연결
COPY . .
EXPOSE 3000

# node 서버를 실행 시킬 명령어
CMD [ "npm", "start" ]

위와 같이 Dockerfile 작성이 완료되었다면 해당 Node 서버의 디렉토리로 이동하였으면 이미지를 먼저 build한다.

1
$ docker build -t example-app .

그 후, docker images를 확인해보면 해당하는 images가 생성되어 있다.

1
2
3
4
$ docker images

REPOSITORY TAG IMAGE ID CREATED SIZE
example-app latest f941c5ec3023 9 seconds ago 692MB

이미지가 생성되었으면 이제 container를 이용하면 실행시키면 된다.

1
$ docker run -p 4000:4000 -d example-app

그 후, container 리스트를 보면 상태가 나온다.

1
2
3
4
$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4f2369d486da exampl-app "npm start" 4 minutes ago Up 4 minutes 0.0.0.0:4000->4000/tcp gracious_brown

그 후, 브라우저에서 접속해보면 Express 서버가 로컬에서와 동일하게 떠있는 것을 볼 수 있다.


출처

현재 이커머스회사에서 frontend 개발자로 업무를 진행하고 있는 Martin 입니다. 글을 읽으시고 궁금한 점은 댓글 혹은 메일(hoons0131@gmail.com)로 연락해주시면 빠른 회신 드리도록 하겠습니다. 이 외에도 네트워킹에 대해서는 언제나 환영입니다.:Martin(https://github.com/martinYounghoonKim
단위 테스트 삽질기
Vue eslint 적용하기