2019-9-8 Docker이미지 만들기
dockerize
- express 웹서버를 도커화 시켜야한다.
- 도커개념
- 왜 도커를 써야되는가
- 도커심화
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