-
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