소개
Docker 는 애플리케이션 배포 및 관리를 간소화하는 널리 사용되는 컨테이너화 플랫폼입니다. 이 튜토리얼에서는 컨테이너화의 이점을 탐색하고 Docker 개발 환경을 설정하는 방법을 배우면서 Docker 를 사용하여 웹 서버를 배포하는 방법을 배웁니다.
Docker 는 애플리케이션 배포 및 관리를 간소화하는 널리 사용되는 컨테이너화 플랫폼입니다. 이 튜토리얼에서는 컨테이너화의 이점을 탐색하고 Docker 개발 환경을 설정하는 방법을 배우면서 Docker 를 사용하여 웹 서버를 배포하는 방법을 배웁니다.
Docker 는 개발자가 컨테이너 환경에서 애플리케이션을 구축, 배포 및 실행할 수 있도록 하는 오픈소스 플랫폼입니다. 컨테이너는 애플리케이션 실행에 필요한 코드, 런타임, 시스템 도구 및 라이브러리 등 모든 것을 포함하는 경량의 독립 실행형 실행 가능 패키지입니다. Docker 는 애플리케이션을 패키징하고 배포하는 일관되고 안정적인 방법을 제공하여 소프트웨어 개발, 테스트 및 배포를 더욱 용이하게 합니다.
Docker 아키텍처는 다음과 같은 주요 구성 요소로 구성됩니다.
Docker 를 시작하려면 시스템에 Docker 엔진을 설치해야 합니다. 설치 과정은 운영 체제에 따라 다르지만 일반적으로 공식 Docker 웹사이트에서 지침을 찾을 수 있습니다.
Docker 를 설치한 후에는 애플리케이션을 구축하고 실행하는 데 사용할 수 있습니다. 여기에는 Docker 를 사용하여 Nginx 웹 서버를 실행하는 간단한 예가 있습니다.
## Docker 레지스트리에서 Nginx 이미지를 가져옵니다.
docker pull nginx
## Nginx 컨테이너를 실행합니다.
docker run -d -p 80:80 --name my-nginx nginx
이 명령은 Docker 레지스트리에서 Nginx 이미지를 가져온 다음 해당 이미지를 기반으로 새 컨테이너를 실행하고 호스트의 포트 80 을 컨테이너의 포트 80 으로 노출합니다.
Docker 개발 환경을 설정하려면 먼저 시스템에 Docker 엔진을 설치해야 합니다. Ubuntu 22.04 에서 설치하는 방법은 다음과 같습니다.
## 패키지 인덱스 업데이트
sudo apt-get update
## apt가 HTTPS를 통해 리포지토리를 사용할 수 있도록 패키지 설치
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
## Docker 공식 GPG 키 추가
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
## Docker 리포지토리 설정
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
## Docker Engine, containerd 및 Docker Compose 설치
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Docker 설치 후 개발 환경에 맞게 설정할 수 있습니다. 일반적인 설정은 다음과 같습니다.
다음은 이러한 설정을 보여주는 Docker Compose 파일의 예입니다.
version: "3"
services:
web:
build:
context: .
args:
- ENV=development
ports:
- 8080:80
volumes:
- ./app:/var/www/html
environment:
- DB_HOST=database
database:
image: mysql:5.7
volumes:
- db-data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=secret
volumes:
db-data:
이 Docker Compose 파일은 웹 서비스와 데이터베이스 서비스를 설정하며 다음과 같은 구성을 갖습니다.
ENV=development라는 빌드 타임 인수를 사용하여 구축됩니다../app 디렉토리를 컨테이너의 /var/www/html 디렉토리에 마운팅하여 호스트에서 애플리케이션 코드를 직접 편집할 수 있도록 합니다.DB_HOST 환경 변수를 사용하여 데이터베이스에 접근할 수 있습니다.db-data를 사용하여 데이터베이스 데이터를 유지합니다.개발 환경을 설정한 후에는 Docker 명령어를 사용하여 컨테이너를 관리할 수 있습니다. 일반적인 명령어는 다음과 같습니다.
docker run: 새 컨테이너 시작docker stop: 실행 중인 컨테이너 중지docker rm: 컨테이너 제거docker logs: 컨테이너 로그 보기docker exec: 실행 중인 컨테이너 내에서 명령 실행예를 들어, 위의 Docker Compose 파일에서 웹 서비스를 시작하려면 다음을 실행할 수 있습니다.
docker-compose up -d web
이렇게 하면 웹 서비스가 분리된 모드로 시작되어 터미널을 계속 사용할 수 있습니다.
Docker 를 사용하여 웹 서버를 배포하려면 먼저 Dockerfile 을 생성해야 합니다. Dockerfile 은 Docker 이미지를 빌드하는 지침이 포함된 텍스트 파일입니다. 간단한 Nginx 웹 서버를 위한 Dockerfile 예제는 다음과 같습니다.
## 공식 Nginx 이미지를 기본 이미지로 사용
FROM nginx:latest
## 기본 Nginx 구성 파일 복사
COPY default.conf /etc/nginx/conf.d/default.conf
## 웹 애플리케이션 코드 컨테이너로 복사
COPY app/ /usr/share/nginx/html/
## HTTP 트래픽을 위해 포트 80 노출
EXPOSE 80
## Nginx 서버 시작
CMD ["nginx", "-g", "daemon off;"]
이 Dockerfile 은 다음과 같이 작동합니다.
Dockerfile 이 준비되면 docker build 명령을 사용하여 Docker 이미지를 빌드할 수 있습니다.
## Docker 이미지 빌드
docker build -t my-nginx-server .
이 명령은 현재 디렉토리의 Dockerfile 을 사용하여 태그 my-nginx-server가 있는 Docker 이미지를 빌드합니다.
이미지 빌드 후 docker run 명령을 사용하여 이미지 기반의 컨테이너를 실행할 수 있습니다.
## Docker 컨테이너 실행
docker run -d -p 80:80 --name my-nginx-server my-nginx-server
이 명령은 다음과 같이 작동합니다.
-d) 로 실행합니다.-p 80:80).my-nginx-server를 할당합니다.my-nginx-server 이미지를 사용하여 컨테이너를 생성합니다.웹 서버를 확장하려면 Docker 컨테이너의 여러 인스턴스를 실행하고 로드 밸런서를 사용하여 트래픽을 인스턴스 간에 분산할 수 있습니다. Docker Compose 를 사용하는 예는 다음과 같습니다.
version: "3"
services:
web:
build: .
ports:
- 80:80
deploy:
replicas: 3
load-balancer:
image: nginx:latest
ports:
- 8080:80
depends_on:
- web
configs:
- source: nginx-config
target: /etc/nginx/conf.d/default.conf
configs:
nginx-config:
file: ./nginx.conf
이 Docker Compose 파일은 다음과 같이 작동합니다.
web 서비스를 빌드합니다.web 서비스의 3 개 레플리카를 배포합니다.web 서비스 인스턴스로 트래픽을 전달하는 Nginx 로드 밸런서 서비스를 실행합니다.Docker Compose 와 로드 밸런싱을 사용하면 웹 서버를 쉽게 확장하고 고가용성 및 장애 허용성을 보장할 수 있습니다.
이 튜토리얼을 마치면 Docker 에 대한 확실한 이해와 웹 서버 배포에 Docker 를 활용하는 방법을 익히게 될 것입니다. Docker 개발 환경을 설정하고 웹 서버를 위한 Docker 컨테이너를 생성하며 배포 프로세스를 관리하는 방법을 배울 것입니다. 이 지식은 웹 애플리케이션 개발 및 배포에 Docker 의 강력한 기능을 활용할 수 있도록 돕습니다.