초학자에 의한 Docker 이해 정리 ② ~ docker-compose까지 ~
7159 단어 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.jsconst 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을 만든다.
DockerfileFROM 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.ymlversion: '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
가 보이기 어렵거나 하기 때문에, 자신은 포그라운드를 좋아합니다.
마지막으로
초보중의 초보를 정리했습니다. 고마워요.
Reference
이 문제에 관하여(초학자에 의한 Docker 이해 정리 ② ~ docker-compose까지 ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/theFirstPenguin/items/58e6bc5acf90dc497cb0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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
가 보이기 어렵거나 하기 때문에, 자신은 포그라운드를 좋아합니다.마지막으로
초보중의 초보를 정리했습니다. 고마워요.
Reference
이 문제에 관하여(초학자에 의한 Docker 이해 정리 ② ~ docker-compose까지 ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/theFirstPenguin/items/58e6bc5acf90dc497cb0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(초학자에 의한 Docker 이해 정리 ② ~ docker-compose까지 ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/theFirstPenguin/items/58e6bc5acf90dc497cb0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)