도커파일 작성해서 이미지를 빌드해보자

MIlo·2025년 9월 12일

Docker

목록 보기
1/1
post-thumbnail

요구사항

  1. node:18 이미지를 사용한다.
  2. 작업 디렉토리를 /test으로 설정한다.
  3. npm install express명령으로 의존성을 패치한다.
  4. 3000번 포트를 사용다는 것을 명시한다.
  5. [“node”, “app.js”]를 컨테이너 ENTRYPOINT로 등록한다.
  6. 실행하여 잘 동작하는지 확인한다.
  7. 마지막으로 docker hub에 업로드를 수행한다.

-> 위의 요구사항을 만족하는 이미지를 VM에서 빌드하여 도커 허브에 업로드 해보자.

작업 내역 & 설명

준비물

최종적으로 빌드된 이미지를 통해 컨테이너가 실행되면 돌아갈 익스프레스 서버를 돌려야 하므로 간단한 Express코드를 작성해주자.

const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello, Docker World!');
});

app.listen(port, () => {
  console.log(`App listening at http://localhost:${port}`);
});

👀 전체 플로우 미리보기

이미지를 빌드하기까지의 과정을 간단하게 살펴보자

1. 작업 디렉토리 만들기

제일 먼저 이미지를 빌드하기 위해서 이미지 안에 돌리고? 싶은 코드도 있어야 하고, dockerfile도 있어야한다. 이 모든걸 갖고 있는 작업 디렉토리를 만들어 줘야 한다.

2. 애플리케이션 코드 생성

이미지가 실행될때 실제로 돌아갈 애플리케이션 코드를 작업 디렉토리 안에 생성한다.

3. 도커파일 생성

작업 디렉토리 안에서 도커파일을 만들어줘야한다.

도커파일이란?
- 이미지가 빌드될때 지켜야할 작업 지침서와 같은 것임. 우리가 이미지로 만들고 싶은 디렉토리를 빌드할때 지켜야하는 옵션들을 해당 도커파일에 작성하면 된다.
    

4. 해당 디렉토리 빌드

이미지로 만들고 싶은 디렉토리의 구성이 끝났으면 이제 빌드하자.

5. 빌드된 이미지 도커 허브에 Push

만들어진 이미지를 다른 사람들과 나누고 싶지 않은가? -> 도커 허브에 올려라. 허접한 이미지를 올려도 이상하게 누군가가 계속 Pull한다.... 그러니까 중요한 이미지를 팀원들과 공유하고 싶으면 도커허브보다는 하버가 좋은 선택지일듯 하다.

실습

작업 디렉토리 생성

VM의 루트 디렉토리에 test 라는 디렉토리를 생성한다.

cd ~
mkdir test
cd test

어플리케이션(app) & dockerfile 생성

익스프레스 서버 코드를 만들어준다.

vim을 통해 app.js코드를 생성했다.

vim app.js

아래 코드를 vim편집기에 입력한다.

const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello, Docker World!');
});

app.listen(port, () => {
  console.log(`App listening at http://localhost:${port}`);
});

이제 도커파일을 만들어준다.

vim dockerfile
# 1. node:18 이미지를 사용한다.
FROM node:18
# 2. 작업 디렉토리를 /test으로 설정한다. -> 생성될 이미지 내부의 작업 디렉토리 이름을 명시하는 것임.
WORKDIR /test
# 3. npm install express명령으로 의존성을 패치한다.
RUN npm install express
# 4. 로컬 컴퓨터의 작업 디렉토리에 있는 app.js를 생성될 이미지의 작업 디렉토리 /test에 app.js라고 붙여넣는다.
COPY app.js app.js
#5. 3000번 포트를 사용한다는 것을 명시.
EXPOSE 3000
#6. 이미지가 실행될때 자동으로 실행될 명령어들을 입력한다.
ENTRYPOINT ["node","app.js"]

위의 작업들을 끝내면 test디렉토리에 다음과 같이 2개의 파일이 만들어진다.

vagrant@vagrant:~/test$ ls
app.js  dockerfile

빌드 실행

이제 빌드하는데 필요한 것들은 모두 준비가 끝났다. 빌드를 해보자.

docker build -t b00gyman/my-nodejs-express-app . -f dockerfile
  • -t : 실제 도커에 올라갈 이미지의 이름이다. 이때 원격(도커 허브)에 저장하려고 한다면 꼭 [저장소명]/이미지이름:[태그] 이렇게 작성해야한다. 하지만 로컬이나 그룹이 프라이밋 레포지를 갖고있다면 해당하는 경로로 작성하면 된다.

  • . : 현재 경로에 있는 파일들을 이미지로 만들겠다는 의미임.

  • -f : 빌드할때 사용되는 도커파일을 지정하는 옵션이다.

도커허브에 푸시

이미지로 만들어졌다면 이제 도커 허브에 push할 차례다. 다음과 같이 명령어를 입력하면 도커허브에 원격으로 올라간다.

docker push b00gyman/my-nodejs-express-app

-> 위의 과정을 모두 마치면 도커 허브에 이미지가 성공적으로 올라간다.

profile
앵맹!

0개의 댓글