안녕하세요.
컨테이너 기술인 도커를 돌려볼려고 합니다.
목표는 아주 쉬운 기초입니다.
node.js 프로그래밍 언어로 만들어진 간단한 api 요청을 받아주는 웹사이트를 도커 컨테이너에 띄우는 것이 목표입니다.
따라서 도커 데스크탑 등을 설치해야 구동할 수 있습니다.
윈도우, Mac os에서는 도커 데스크탑을 설치하는 것이 편합니다.
리눅스에서는 도커 엔진을 깔면 되죠.
--
이제 작업을 시작합니다.
node.js로 된 간단한 웹서버 하나를 만듭니다.
요청을 받으면 Hello World! 라고 응답하는 기능입니다.
디렉토리를 우선 만듭니다.
mkdir nodejs-docker-example
nodejs-docker-example이라는 디렉토리를 생성한 것입니다.
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
이 파일을 app.js 라고 저장합니다.
{
"name": "nodejs-docker-example",
"version": "1.0.0",
"description": "Node.js Docker Example",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "^4.17.1"
}
}
이 파일을 package.json 이라고 저장합니다.
# Use the official Ubuntu base image
FROM ubuntu:latest
# Update package list and install Node.js
RUN apt-get update
RUN apt-get install -y nodejs
RUN apt-get install -y npm
# Set the working directory in the container
WORKDIR /app
# Copy package.json and package-lock.json to the container
COPY package.json ./
# Install app dependencies
RUN npm install
# Copy the application files to the container
COPY . .
# Expose the port the app runs on
EXPOSE 3000
# Command to run the application
CMD ["npm", "start"]
# Add a command to create a start_success file in /tmp/
RUN touch /tmp/start_success
이 파일을 Dockerfile 이라고 저장합니다.
위 파일을 nodejs-docker-example 디렉토리에 집어넣습니다.
커맨드라인 프로그램을 켭니다.
docker build -t nodejs-docker-example .
-t nodejs-docker-example: 빌드한 이미지의 태그를 지정합니다.
-f Dockerfile-custom: 사용할 도커파일을 지정합니다. 여기서는 Dockerfile-custom을 사용합니다.
.: 현재 디렉토리를 빌드 컨텍스트로 사용합니다. 즉, 현재 디렉토리에 있는 모든 파일과 도커파일을 빌드에 포함시킵니다.
docker run -p 3000:3000 --name my-nodejs nodejs-docker-example
앞 3000포트는 호스트(로컬머신)의 포트입니다.
뒤 3000포트는 컨테이너의 포트입니다.
두 포트를 매핑합니다.
컨테이너 이름은 my-nodejs 로 하였습니다.
컨테이너 내부를 접근하고 싶다면
docker exec -it my-nodejs /bin/bash 로 접속해서 볼 수 있습니다.
크롬에서 http://localhost:3000 을 요청하게 되면 Hello World!를 볼 수 있습니다.