본문 바로가기
Docker

docker를 돌려보자

by lumination 2023. 11. 22.

안녕하세요.

 

컨테이너 기술인 도커를 돌려볼려고 합니다.

 

목표는 아주 쉬운 기초입니다.

 

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 이라고 저장합니다.

 

app.js
0.00MB
Dockerfile
0.00MB
package.json
0.00MB

 

 

위 파일을 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!를 볼 수 있습니다.