도커 파일이란?
도커 이미지를 빌드하기 위한 설정 파일이다.
Dockerfile은 일련의 명령어로 구성되어 있으며, 이 명령어들을 사용해 컨테이너 환경을 정의한다.
애플리케이션을 실행하는 데 필요한 모든 구성 요소(예: 베이스 이미지, 파일 복사, 패키지 설치, 명령 실행 등)를
포함하는 텍스트 파일이다.
도커 파일의 구성 요소
- FROM: Dockerfile에서 사용할 베이스 이미지를 지정한다.
사용 예시: FROM ubuntu:20.04 - ubuntu:20.04 이미지를 베이스로 사용할 것을 지정 - WORKDIR: 명령어가 실행될 작업 디렉토리를 설정
사용 예시: WORKDIR /usr/src/app - COPY: 로컬 시스템에서 파일을 컨테이너로 복사
사용 예시: COPY . /usr/src/app - 현재 위치에서 도커파일의 /usr/src/app로 복사 - RUN: 이미지를 빌드하는 동안 실행할 명령어를 정의. 일반적으로 패키지 설치나 파일 구성을 위해 사용한다.
사용 예시: RUN apt-get update && apt-get install -y python3 - CMD: 컨테이너가 실행될 때 실행할 기본 명령을 지정. 애플리케이션을 실행하는 데 사용한다.
사용 예시: CMD ["python3", "app.py"] - EXPOSE: 컨테이너가 사용할 포트 번호를 명시
사용 예시: EXPOSE 8080 - ENV: 환경 변수 설정
사용 예시: ENV NODE_ENV=production
도커 파일로 이미지 만들기
1. 도커 파일 생성 - 도커 파일은 무조건 Dockerfile 으로 명명해야한다.
sudo vi Dockerfile
실습을 진행하기 위한 파일들
# sudo vi Dockerfile로 편집
# 베이스 이미지로 Node.js 사용
FROM node:14
# 작업 디렉토리 설정
WORKDIR /usr/src/app
# 애플리케이션 의존성 설치
COPY package*.json ./
RUN npm install
# 소스 코드 복사
COPY . .
# 컨테이너에서 사용할 포트 설정
EXPOSE 8080
# 컨테이너 시작 시 실행할 명령어 설정
CMD ["node", "app.js"]
// sudo vi app.js 로 편집
// Express 모듈 불러오기
const express = require('express');
const app = express();
// 포트 설정
const PORT = process.env.PORT || 8080;
// 간단한 GET 요청 처리
app.get('/', (req, res) => {
res.send('Hello, World! This is running inside a Docker container.');
});
// 서버 실행
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
# sudo vi package.json 파일
{
"name": "docker-node-app",
"version": "1.0.0",
"description": "A simple Node.js app running in Docker",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "^4.17.1"
}
}
위와 같은 세개의 파일을 각각 생성하면 현재 폴더에서는 아래와 같은 구조일 것이다.
/현재 폴더
├── Dockerfile
├── app.js
└── package.json
2. 도커 파일 빌드하기
현재 폴더 위치에서 바로 도커 파일을 빌드하면 해당 도커파일을 통해 이미지가 생성된다.
docker build -t <원하는-이미지-이름> .
만약 my-image로 빌드를 했다면, 아래와 같은 결과를 볼 수 있을 것이다.
3. 도커 컨테이너 실행하기
여기서 주의 할 점은 애플리케이션이 8080포트로 실행된다는 것이다.
도커파일에서 먼저 8080 포트를 명시를 했지만 만약 도커를 실행할때
해당 포트를 직접 지정하지 않으면 포트가 열리지 않기 때문에 항상 도커 컨테이너를 시작할 때 조심하자.
docker run -d -p 8080:8080 my-image
잠깐 도커 실행 명령어의 요소에 대해 설명하겠다.
- -d : 백그라운드로 실행
- -p [호스트 포트]:[컨테이너 포트]
해당 컨테이너가 정상적으로 실행된다면, 아래처럼 보여질 것이다.
image는 실행 이미지명
CREATED는 생성된 경과 시간
STATUS는 상태 Up~ 이라면 실행중이라는 뜻이고, Exited ~ 라면 종료되었다는 뜻이다.
PORTS는 지정된 포트에 대해 나타나고, 만약 아무것도 보이지 않는다면 아무런 포트가 지정되지 않은 것이다.
4. 실행된 컨테이너 안 애플리케이션에 요청 해보기
실행지점은 도커 명령어를 친 곳에서 실행하면 된다.
curl localhost:8080
아래와 같이 결과가 Hello, World! 문구가 보인다면 성공적으로 실행 한 것이다.
+ 퍼블릭 인스턴스나 UTM과 같은 가상머신에서 했을때 외부에서 테스트해도 된다.
대신 인스턴스의 경우 보안그룹에서 8080을 해줘야 할 것이다.
Tip. Localhost의 개념
호스트의 아이피가 172.31.7.147일때
호스트 내부에서 해당 내부의 애플리케이션에 요청을 보낼땐 localhost 주소와 172.31.7.147 주소는 같은 주소이다.
호스트 바깥에서 해당 애플리케이션에 요청을 보낼 땐 localhost 주소와 172.31.7.147 주소는 다르다.
'Docker' 카테고리의 다른 글
[Docker] 5. Overlay FS & Storage (0) | 2024.09.14 |
---|---|
[Docker] 4. 도커 이미지 레이어(Image Layer) (1) | 2024.09.13 |
[Docker] 3. 도커 파일 멀티스테이지 빌드(Multi-stage build) (1) | 2024.09.13 |
[Docker] 2.도커 허브 (0) | 2024.09.13 |
[Docker] 0. 도커 알아보기 (0) | 2024.09.12 |