초학자에 의한 Docker 이해 정리 ② ~ docker-compose까지 ~

소개



드디어 Docker를 배우기 시작했으므로 자신의 이해를 정리해 둔다.
마지막 => htps : // 코 m / 테 페후 rst 펜 군 / ms / c9 28c795 884 40 6
다음 번 => htps : // 코 m / tepe fu rst penguin / ms / b6d3 414 829 68 23

오늘의 학습을 메모



node.js에서 express를 실행하는 컨테이너를 시작합니다. 단지 이것만을 docker-compose를 사용해 보았다.



우선 로컬로 준비


cd ~
mkdir sample && cd sample
yarn init -y
yarn add express
touch index.js

index.js
const express = require('express');
const app = express();
app.get('/', (req, res) => {
  res.send('Hello').status(200);
});

app.listen(3000, () => {
  console.log('Listening on port 3000');
});
node index.js

당연하지만 로컬에서 curl 명령을 두드리면 대답이 돌아옵니다.
curl http://localhost:3000
Hello

일단, 지금의 상황을 도화합니다. 일단.


Dockerfile 준비



node.js의 docker 이미지를 만드는 것은 여기 참조 이번에는 코피페. sample 디렉토리 바로 아래에 아래의 Dockerfile을 만든다.

Dockerfile
FROM node:alpine

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm ci --only=production

# Bundle app source
COPY . .
# package.jsonをコピー後にnpm installするという作業をビルドの度に毎回やりたくない。
# そのため、上記を終わらせてから COPY. .をやる。
# そうすればコードを変えた部分だけビルドが実行される。

EXPOSE 3000
CMD [ "node", "index.js" ]

그리고 node_modules도 복사되면 힘들기 때문에 .dockerignore도 만들어 둔다.
touch .dockerignore
echo 'node_modules' >> .dockerignore

덧붙여서, 여기까지 오면, 별도로 docker-compose를 사용하지 않아도
docker build -t app .
docker run -p 3000:3000 app

하면 컨테이너가 일어납니다.
이번에는 위의 명령을 사용하지 않고 docker-compose로 컨테이너를 시작합니다.

docker-compose.yml 준비



sample 디렉토리 바로 아래에 아래의 docker-compose.yml을 만든다.

docker-compose.yml
version: '3'
#何も考えず3を指定

services:
#コンテナに関する情報を記述。ここに複数のコンテナ情報を書くことで、複数のコンテナを同時に起動できる
  app:
  # appという(DNSの名前空間を持つ)コンテナを立ち上げる。
    build:
    # ビルド時の情報をここに記載する。Dockerfileがあればそれを参照できるし、なければ直接ここに書く。
      context: .
      # ビルド時にこのdocker-compose.ymlと同じディレクトリ(.)にあるDockerfileを参照する。
      # Dockerfileが複数ある場合は、ディレクトリを分けてcontextに指定する、もしくはその名前を docokerfile:XXX として指定する必要がある。
    container_name: express-app
    # 任意のコンテナ名をつける。このコンテナ名を使って、下記コマンドでコンテナにアクセスすることができる
    # docker exec -it express-app sh
    ports:
      - '3000:3000'
    # docker run -p 3000:3000 と一緒の意味です。
    volumes:
      - './:usr/src/app'
    # ローカルPCのカレントディレクトリ(./)とコンテナの~/usr/src/appディレクトリを同期させる
    # 開発にとっても便利。

docker-compose up 하고 끝


docker-compose up 그러면 컨테이너가 시작됩니다.
로컬 PC에서 curl 명령을 치면 컨테이너에서 답장이 돌아옵니다. 첫 번째 그림과 같습니다.
curl http://localhost:3000
Hello



컨테이너를 멈추려면 docker-compose down index.js 의 내용을 다시 쓰는 등 했을 때는 docker-compose build 로 재빌드합니다.

또, docker-compose up -d 라고 하면 백그라운드에서 컨테이너가 일어납니다만, 이 때는 컨테이너내의 console.log 가 보이기 어렵거나 하기 때문에, 자신은 포그라운드를 좋아합니다.

마지막으로



초보중의 초보를 정리했습니다. 고마워요.

좋은 웹페이지 즐겨찾기