Dockerfile 및 env-file 을 사용한 컨테이너 구성 방법

DockerBeginner
지금 연습하기

소개

이 튜토리얼에서는 강력한 Dockerfile 과 env-file 의 조합을 사용하여 Docker 컨테이너를 구축하고 구성하는 방법을 안내합니다. 컨테이너를 생성하고 사용자 지정하는 방법과 구성 및 환경 변수를 효과적으로 관리하는 방법을 배울 것입니다.

Docker 컨테이너 소개

Docker 는 개발자가 일관되고 격리된 환경 (컨테이너) 에서 애플리케이션을 구축, 배포 및 실행할 수 있도록 지원하는 인기 있는 오픈소스 플랫폼입니다. 컨테이너는 애플리케이션의 코드, 종속성 및 런타임을 단일 패키지로 포장하는 경량, 휴대 가능하고 자체 포함된 단위로서, 어떤 환경에서도 애플리케이션이 안정적으로 실행되도록 보장합니다.

Docker 컨테이너란 무엇인가요?

Docker 컨테이너는 애플리케이션의 코드, 종속성 및 구성을 단일, 휴대 가능하고 자체 포함된 단위로 패키징하는 표준화된 소프트웨어 단위입니다. 컨테이너는 개발자의 로컬 머신, 데이터 센터 또는 클라우드와 같은 다양한 컴퓨팅 환경에서 일관되게 실행되도록 설계되었습니다.

Docker 컨테이너의 장점

  1. 일관성: 컨테이너는 기본 인프라에 관계없이 애플리케이션이 동일한 방식으로 실행되도록 보장합니다.
  2. 확장성: 컨테이너는 변화하는 요구 사항에 맞춰 쉽게 확장하거나 축소할 수 있으므로 애플리케이션 관리 및 배포를 용이하게 합니다.
  3. 효율성: 컨테이너는 경량이며 호스트 운영 체제를 공유하므로 기존 가상 머신보다 효율적입니다.
  4. 이식성: 컨테이너는 다양한 컴퓨팅 환경 간에 쉽게 이동할 수 있으므로 애플리케이션 개발, 테스트 및 배포를 용이하게 합니다.

Docker 아키텍처

Docker 는 Docker 클라이언트가 Docker 데몬과 통신하는 클라이언트 - 서버 아키텍처를 사용합니다. Docker 데몬은 Docker 컨테이너를 구축, 실행 및 관리하는 역할을 합니다. Docker 데몬은 Docker 클라이언트와 동일한 머신 또는 원격 머신에서 실행될 수 있습니다.

graph LR A[Docker Client] -- 통신 --> B[Docker Daemon] B -- 관리 --> C[Docker Containers] B -- 구축 --> D[Docker Images]

Docker 시작하기

Docker 를 시작하려면 시스템에 Docker 엔진을 설치해야 합니다. 공식 Docker 웹사이트 (https://www.docker.com/get-started) 에서 Docker 를 다운로드하여 설치할 수 있습니다. 설치 후 docker 명령줄 도구를 사용하여 Docker 데몬과 상호 작용하고 컨테이너를 관리할 수 있습니다.

Dockerfile 을 이용한 컨테이너 구축

Dockerfile 은 Docker 컨테이너를 실행하는 기반이 되는 Docker 이미지를 생성하는 설계도입니다. Dockerfile 은 Docker 이미지를 구축하기 위한 일련의 명령어를 포함하는 텍스트 파일입니다.

Dockerfile 구문

Dockerfile 은 일반적으로 다음과 같은 명령어로 구성됩니다.

명령어 설명
FROM 빌드에 사용할 기본 이미지를 지정합니다.
COPY 호스트에서 컨테이너로 파일 또는 디렉터리를 복사합니다.
ADD COPY와 유사하지만 원격 파일을 추출하고 아카이브를 압축 해제할 수도 있습니다.
RUN 빌드 프로세스 중 컨테이너 내에서 명령을 실행합니다.
CMD 컨테이너가 시작될 때 기본적으로 실행할 명령을 지정합니다.
EXPOSE 컨테이너가 지정된 네트워크 포트에서 수신을 기다린다는 것을 Docker 에 알립니다.
ENV 환경 변수를 설정합니다.
WORKDIR 이후에 수행되는 RUN, CMD, ENTRYPOINT, COPY, 및 ADD 명령어에 대한 작업 디렉터리를 설정합니다.

Nginx 를 사용하여 간단한 웹 서버를 구축하는 예제 Dockerfile 은 다음과 같습니다.

FROM nginx:latest
COPY index.html /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Docker 이미지 구축

Dockerfile 에서 Docker 이미지를 구축하려면 docker build 명령어를 사용할 수 있습니다.

docker build -t my-web-server .

이 명령은 현재 디렉터리의 Dockerfile 을 사용하여 태그가 my-web-server인 새로운 Docker 이미지를 구축합니다.

Docker 이미지 태깅 및 푸시

Docker 이미지를 구축한 후 특정 버전 또는 레포지토리 이름으로 태그를 지정하고 Docker Hub 와 같은 Docker 레지스트리에 푸시하여 다른 사용자와 공유할 수 있습니다.

docker tag my-web-server username/my-web-server:v1.0
docker push username/my-web-server:v1.0

이렇게 하면 my-web-server 이미지에 버전 v1.0이라는 태그가 지정되고 username 계정 아래의 Docker Hub 레포지토리에 푸시됩니다.

env-file 을 이용한 컨테이너 구성 관리

Docker 컨테이너를 사용할 때, 컨테이너가 실행되는 환경에 특정한 구성 설정을 관리해야 하는 경우가 많습니다. 이때 --env-file 옵션이 유용하게 사용됩니다.

env-file 이란 무엇인가요?

env-file 은 환경 변수와 해당 값의 목록을 포함하는 간단한 텍스트 파일입니다. 이러한 환경 변수는 Docker 컨테이너의 실행 시 동작을 구성하는 데 사용될 수 있습니다.

env-file 의 예는 다음과 같습니다.

DB_HOST=mysql.example.com
DB_USER=myapp
DB_PASSWORD=secret123

Docker 에서 env-file 사용하기

Docker 컨테이너에서 env-file 을 사용하려면 docker run 명령을 실행할 때 --env-file 옵션을 전달하면 됩니다.

docker run --env-file ./env-file my-web-server

이렇게 하면 env-file에 정의된 환경 변수가 로드되어 컨테이너에서 사용할 수 있게 됩니다.

env-file 사용의 장점

env-file 을 사용하면 다음과 같은 여러 가지 장점이 있습니다.

  1. 관심사 분리: 구성을 애플리케이션 코드에서 분리함으로써 애플리케이션 자체를 수정하지 않고도 구성을 더 쉽게 관리하고 업데이트할 수 있습니다.
  2. 이식성: 동일한 Docker 이미지를 다른 환경에서 사용하려면 다른 env-file 만 사용하면 됩니다.
  3. 보안: 데이터베이스 자격 증명과 같은 민감한 정보는 Dockerfile 이나 애플리케이션 코드에 하드코딩하는 대신 env-file 에 저장할 수 있습니다.
  4. 유지 관리: env-file 을 사용하면 여러 컨테이너 또는 애플리케이션의 구성을 더 쉽게 관리하고 업데이트할 수 있습니다.

예제: Node.js 애플리케이션에서 env-file 사용하기

데이터베이스에 연결하는 Node.js 애플리케이션이 있다고 가정합니다. 데이터베이스 연결 세부 정보를 env-file 에 생성하고, 컨테이너를 실행할 때 --env-file 옵션을 사용할 수 있습니다.

## env-file
DB_HOST=mysql.example.com
DB_USER=myapp
DB_PASSWORD=secret123

## Dockerfile
FROM node:14
COPY . /app
WORKDIR /app
RUN npm install
CMD ["node", "server.js"]

## 컨테이너 실행
docker run --env-file ./env-file my-node-app

이 예제에서는 데이터베이스 연결 세부 정보가 env-file 에 저장되어 Dockerfile 이나 애플리케이션 코드를 수정하지 않고도 쉽게 업데이트할 수 있습니다.

요약

이 튜토리얼을 마치면 Dockerfile 과 env-file 을 사용하여 Docker 컨테이너를 구축하고 구성하는 방법에 대한 확실한 이해를 얻게 될 것입니다. 컨테이너 설정 및 환경 변수를 손쉽게 관리하여 애플리케이션이 다양한 환경에서 일관되고 안정적으로 실행되도록 할 수 있을 것입니다.