ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker 이미지 생성
    Tools/Docker 2022. 8. 5. 17:27

     이미지는 읽기 전용과 쓰기 가능 전용이 따로 나뉜다. 예로 들어서 Ubuntu를 설치했다고 생각해보자.

     

     Ubuntu 이미지 자체는 수정할 수 없다. 이미지를 바꿀 수도 없고 안에 내용들을 추가하거나 삭제하는 것은 가능하다. 내용이라고 한다면 프로그램 설치를 말할 수 있을 것 같다. 그 프로그램 설치는 쓰기 가능한 이미지가 되는 것이다.

     

     한 번 예시로 Ubuntu 18.04에 Git을 깔아본다면

    docker run -it --name git ubuntu:18.04 bash

     

      root으로 접근한 것을 볼 수 있고 git init 명령어를 치면 git이 없는 것을 확인할 수 있다. ls를 입력해 git을 찾아보려고 해도 보이지는 않는다. 설치한 명령어와 화면 로그는 아래와 같다.

     

     

     그리고 내가 만든 Dockerfile의 내용을 보여주자면 아래와 같은데, 이렇게 작성하면 최초부터 어떻게 프로그램이 설치되었는지 확인할 수 있다. 그냥 쉽게 말하면 히스토리를 볼 수 있기 때문에 나름의 매뉴얼이 된다.

    FROM ubuntu:18.04
    
    RUN apt-get update
    RUN apt-get install -y git

     

    1️⃣ nodejs 이미지 배포

     

     흔히 많이 쓰는 nodejs를 설치해서 실행해보려고 한다. 프레임워크는 fastify를 사용했다. webs라는 파일을 생성해 npm 설치를 진행했다.

    npm init
    npm i fastify --save

      그리고 간단한 코드를 실행시키기 위해 app.js 파일을 따로 생성해주었다. 해당 코드는 fastify 사이트에 접속하면 받을 수 있다.

     

    const fastify = require('fastify')({
        logger: true
      })
      
      fastify.get('/', function (request, reply) {
        reply.send({ hello: 'world' })
      })
      
      fastify.listen(3000, '0.0.0.0', function (err, address) {
        if (err) {
          fastify.log.error(err)
          process.exit(1)
        }
        fastify.log.info(`server listening on ${address}`)
      })

     

    코드를 작성하고 흔히 우리가 node app.js 명령어를 쳐서 실행할 수 있지만, Dockerfile에 모든 명령어를 입력해 실행하여 사용할 수 있다는 점을 알게 되었다. 위 코드를 실행하기 위해 만든 Dockerfile은 아래와 같다.

     

    • Dockerfile
    FROM ubuntu:18.04
    RUN apt-get update
    RUN DEBIAN_FRONTEND=noninteractive apt-get install -y curl
    RUN curl -sL https://deb.nodesource.com/setup_16.x | bash -
    RUN DEBIAN_FRONTEND=noninteractive apt-get install -y nodejs
    
    COPY . /usr/src/app
    
    WORKDIR /usr/src/app
    RUN npm install
    
    EXPOSE 3000
    CMD node app.js

     

     webs에 들어있는 node_modules 파일은 필요하지 않기 때문에 .dockerignore 파일을 생성해 파일을 무시해주도록 한다.

     

    • .dockerignore
    node_modules/*

     

     그렇게 만들고 난 파일을 실행시키기 위해 명령어를 입력해준다.

     

    docker build -t web .

     

     입력하고 나면 내가 생성한 Dockerfile이 실행되는 것을 볼 수 있고 이미지 파일에도 보인다. 참고로 위에 web은 내가 생성한 이미지의 파일 이름을 지정한 것이다. 결과는 아래와 같다.

     

     

    Dockerfile을 통해 설치된 것들이 잘 실행됐는지 확인했다.

     

    잘 된다.. 역시 돈은 돈값을 한다

     

     

    'Tools > Docker' 카테고리의 다른 글

    docker-compose  (0) 2022.08.05
    Docker 설치 및 기본 명령어  (1) 2022.08.04
Designed by Tistory.