나만의 도커파일 & 이미지 생성 (도커 컨테이너 만들기)
EC2 환경에서 나만의 도커파일 & 이미지를 생성해보고, Container Registry인 도커 허브에 PUSH하고 다른 EC2에서 만든 이미지를 받아서 구동시키는 연습을 해보겠다. 간단하게 텍스트를 출력해주는 Nodejs 어플리케이션을 만들어보려고 한다.
우선 전체적인 순서 흐름을 보면 다음과 같다.
1. Build
보통 로컬 환경에서 진행하면되는데, 나는 현재 EC2에서 개발을 하고 있기 때문에 EC2에서진행하려고 한다. 개인 Pemkey로 EC2에 접속해서 Dockerfile을 생성할 폴더를 하나 만들어 준다. 나는 docker-node-application 로 만들었다.
npm init -y
npm i express
express 프레임워크를 설치해주고 간단하게 텍스트를 출력해주는 server.js 를 만들어준다.
server.js
const express = require('express');
const app = express();
app.get('/', (req,res) => {
res.send('Make Docker Image in Nodejs.')
})
app.listen(8888, () => {
console.log('서버 실행')
})
해당 파일을 실행시켜보면 텍스트가 잘 출력되는 것을 확인할 수 있다. (node server.js) - PORT는 8888로 설정했다.
그럼 이제 Image를 만들기 위해서 Dockerfile를 생성해보자.
Dockerfile
FROM node:14-alpine
WORKDIR /docker-node-application
COPY package.json package-lock.json ./
RUN npm ci
COPY server.js .
ENTRYPOINT [ "node", "server.js" ]
build 명령어를 이용해서 이미지를 만들어 보자
docker build -f Dockerfile -t docker-node-application .
이미지 생성 중
이미지 생성 확인
해당 EC2에서 만들어진 이미지를 호스트 포트와 컨테이너 포트를 맵핑해주고(8888 → 8888), 컨테이너를 백그라운드로 실행시켜본다.
docker run -d -p 8888:8888 docker-node-application
잘 실행되는 것을 확인할 수 있다.
2. PUSH
만든 이미지를 Container Registry인 도커 허브에 PUSH를 해보겠다. 도커 허브에서 레파지토리를 생성해준다.
도커 허브에서 이미지 이름은 어카운트이름/레파지토리 이름 형식으로 작성이 되어야 한다.
tag 명령어를 이용해서 이전에 만들었던 이미지이름을 변경해준다.
docker tag docker-node-application:latest jhlee2729/docker-node-application:latest
도커 이미지를 실행하면 2개의 이름이 태그되어있는 것을 확인할 수 있다.
PUSH 하기전에 docker 로그인을 한다.
docker login
그리고 PUSH를 한다.
docker push jhlee2729/docker-node-application:latest
도커허브에 접속하면 방금 push한 도커 이미지가 잘 등록되어 있는 것을 확인할 수 있다.
3. PULL
다른 EC2에 접속해서 도커 허브에 올린 이미지를 받는다.
docker pull jhlee2729/docker-node-application
4. RUN
docker run -d -p 8888:8888 jhlee2729/docker-node-application
다른 EC2에서 실행시켰을 때 이상없이 잘 동작하는 것을 확인할 수 있다.
'Docker' 카테고리의 다른 글
[Docker] 도커를 활용하는 클라우드 서비스 (0) | 2023.04.13 |
---|---|
[Docker] Docker Compose & 실습 (2) | 2023.04.11 |
[Docker] Docker에 대한 이해 및 실습 - httpd (0) | 2023.04.11 |
[Docker] Docker 설치 방법, Docker CLI 정리 (0) | 2023.04.10 |
[Docker] Docker 기본 개념 및 구조 & 컨테이너 기술 (0) | 2023.04.09 |
댓글