2019-9-8 Docker이미지 만들기

dockerize

FROM mhart/alpine-node:10

# install nodemon
RUN npm install nodemon -g

WORKDIR /usr/src/app

COPY package*.json ./

# move tmp directory and install package.json
RUN npm install

# es6를 사용하기 위한 babel설정
COPY ./.babelrc ./
COPY . .
EXPOSE 5000
# CMD는 명령어를 배열 형태로 배치하며 실제로 앱을 실행시키는 커맨드가 들어간다.
CMD ["npm", "start"]

// .dockerignore
node_modules
npm-debug.log
.env

  • dockerFile로 docker이미지를 만들고, .dockerignore파일을 통해 무시할 파일들을 추가한다. 여기서 .env파일을 추가했는데, 이 부분은 어떻게 해야될지 잘 모르겠다.
docker build -t <username>/<image name> .
docker images
docker run -p 49160:5000 -d <your username>/<image name>
  • 위의 명령어를 통해 이미지를 만들고 docker images를 통해 만들어진 이미지를 볼 수 있다.
  • docker run을 통해 docker 이미지를 실행시킨다. -d플래그는 백그라운드에서의 실행 플래그이고, -p명령어는 public port를 private port로 리다이렉션 해주는 역할이다.
  • 여러시행착오를 거쳐서 도커 이미지를 만들고 run명령어를 한 결과 정상적으로 동작했다.
// client/Dockerfile
FROM mhart/alpine-node:10

WORKDIR /usr/src/client

COPY package*.json ./

# move tmp directory and install package.json
RUN npm install

# es6를 사용하기 위한 babel설정
COPY ./.babelrc ./
COPY . .
EXPOSE 8080
# CMD는 명령어를 배열 형태로 배치하며 실제로 앱을 실행시키는 커맨드가 들어간다.
CMD ["npm", "run", "dev"]
  • 서버와 클라이언트 도커 이미지를 만들고 이제 docker-compose를 이용해서 한번에 도커로 서버를 띄우려고 한다.

docker-compose

  • docker-compose.yml파일을 만들자.
version: "3"
services:
  client:
    build:
      dockerfile: Dockerfile
      context: ./client
    networks:
      - backend
    ports:
      - "8080:8080"
  server:
    build:
      dockerfile: Dockerfile
      context: ./server
    networks:
      - backend
    ports:
      - "5000:5000"

networks:
  backend:
    driver: bridge

  • docker-compose.yaml파일을 만들고 설정했다.
  • docker-compose up –build or docker-compose up명령어를 통해 docker-compose를 돌리면 client, server가 동시에 띄어지고 돌아간다. 다만 ip이슈가 있다.
  • docker container가 돌아가면 단순히 Localhost에서 포트번호를 입력하고 돌아갈 줄 알았다. 하지만 그게 아니였다. front-end docker이미지화를 할때 webpack에 관한 이슈가 있었기때문에 발생한 이슈였다.
Written on September 8, 2019