Docker 환경 설정 및 관리를 위한 완벽 초보 가이드

0

도커(Docker)란 무엇일까요?

도커(Docker)는 애플리케이션을 컨테이너화하여 배포, 관리, 실행할 수 있게 도와주는 오픈소스 플랫폼입니다. 도커를 사용하면 애플리케이션과 그 종속성을 하나의 단위로 묶어, 어느 환경에서든 일관되게 실행할 수 있습니다. 이 글에서는 도커 환경을 구축하는 방법을 단계별로 자세히 알아보겠습니다.

1. 도커 설치

도커 설치는 운영체제에 따라 조금씩 다릅니다. 각 운영체제에 맞는 설치 방법을 소개합니다.

Windows

  • Docker Desktop for Windows 다운로드 페이지로 이동합니다.
  • 설치 파일을 다운로드하여 실행합니다.
  • 설치 도중에 Hyper-V를 활성화하라는 메시지가 나타나면 활성화합니다.
  • 설치가 완료되면 Docker Desktop을 실행하고 기본 설정을 완료합니다.

macOS

  • Docker Desktop for Mac 다운로드 페이지로 이동합니다.
  • 설치 파일을 다운로드하여 실행합니다.
  • 응용 프로그램 폴더에 Docker를 드래그하여 설치합니다.
  • 설치가 완료되면 Docker Desktop을 실행하고 기본 설정을 완료합니다.

Linux

1. 패키지 업데이트
sudo apt-get update
2. 필수 패키지 설치
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
3. Docker GPG 키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
4. Docker 저장소 추가
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
5. Docker 설치
sudo apt-get update
sudo apt-get install docker-ce
6. 도커 서비스 시작 및 확인
sudo systemctl start docker
sudo systemctl enable docker
sudo systemctl status docker

2. 도커 기본 명령어

도커가 설치되었다면, 기본 명령어를 통해 도커를 사용할 수 있습니다.

도커 버전 확인

docker --version

도커 이미지 목록 보기

docker images

도커 컨테이너 목록 보기

docker ps

3. 도커 이미지와 컨테이너

이미지(Image)는 컨테이너(Container)를 생성하는 템플릿 역할을 합니다. 컨테이너는 이미지로부터 생성된 실행 가능한 단위입니다.

이미지 다운로드 및 실행

1. 이미지 다운로드 및 실행

도커 허브(Docker Hub)에서 이미지를 다운로드하고 컨테이너를 실행합니다. 예를 들어, Nginx 이미지를 다운로드하고 실행하려면 다음 명령어를 사용합니다:

docker run -d -p 80:80 --name mynginx nginx

이 명령어는 Nginx 컨테이너를 백그라운드에서 실행하고, 호스트의 80번 포트를 컨테이너의 80번 포트에 매핑합니다.

컨테이너 관리

실행 중인 컨테이너 목록 보기
docker ps
모든 컨테이너 목록 보기
docker ps -a
컨테이너 중지
docker stop <컨테이너 ID 또는 이름>
컨테이너 시작
docker start <컨테이너 ID 또는 이름>
컨테이너 삭제
docker rm <컨테이너 ID 또는 이름>

4. Dockerfile 작성

Dockerfile은 이미지를 생성하기 위한 스크립트입니다. 예를 들어, 간단한 Node.js 애플리케이션을 위한 Dockerfile을 작성해 보겠습니다.

1. 프로젝트 디렉토리 생성하기

프로젝트 디렉토리를 생성하고, 해당 디렉토리로 이동합니다:

mkdir mynodeapp
cd mynodeapp

2. `app.js` 파일 생성하기

const http = require('http');

   const hostname = '0.0.0.0';
   const port = 3000;

   const server = http.createServer((req, res) => {
     res.statusCode = 200;
     res.setHeader('Content-Type', 'text/plain');
     res.end('Hello World\n');
   });

   server.listen(port, hostname, () => {
     console.log(`Server running at http://${hostname}:${port}/`);
   });

3. `package.json` 파일 생성하기

{
     "name": "mynodeapp",
     "version": "1.0.0",
     "description": "My Node.js Docker App",
     "main": "app.js",
     "scripts": {
       "start": "node app.js"
     },
     "dependencies": {
       "express": "^4.17.1"
     }
   }

4. Dockerfile 작성하기

# 베이스 이미지 설정
   FROM node:14

   # 작업 디렉토리 설정
   WORKDIR /usr/src/app

   # 패키지 파일 복사
   COPY package*.json ./

   # 종속성 설치
   RUN npm install

   # 소스 코드 복사
   COPY . .

   # 애플리케이션 포트 설정
   EXPOSE 3000

   # 애플리케이션 실행 명령어
   CMD ["node", "app.js"]

5. 도커 이미지 빌드

docker build -t mynodeapp .

6. 도커 컨테이너 실행

docker run -d -p 3000:3000 --name mynodeapp-container mynodeapp

이제 `http://localhost:3000`에서 “Hello World” 메시지를 확인할 수 있습니다.

5. Docker Compose

Docker Compose는 여러 컨테이너를 정의하고 실행할 수 있는 도구입니다. `docker-compose.yml` 파일을 작성하여 여러 서비스를 구성할 수 있습니다.

Docker Compose 설치

  • Windows와 macOS에서는 Docker Desktop에 Docker Compose가 포함되어 있습니다.
  • Linux에서는 별도로 설치해야 합니다:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

docker-compose.yml 예제

version: '3'
services:
  web:
    image: mynodeapp
    build: .
    ports:
      - "3000:3000"
    volumes:
      - .:/usr/src/app
    depends_on:
      - db
  db:
    image: mongo
    ports:
      - "27017:27017"

이 예제에서는 Node.js 애플리케이션과 MongoDB 데이터베이스를 정의합니다.

6. 요약

  • 도커 설치: 운영체제에 맞게 Docker Desktop 또는 Docker Engine을 설치합니다.
  • 도커 기본 명령어: 도커 명령어를 사용하여 이미지를 다운로드하고, 컨테이너를 실행하고 관리합니다.
  • Dockerfile 작성: 이미지를 생성하기 위한 스크립트를 작성합니다.
  • Docker Compose: 여러 컨테이너를 정의하고 실행할 수 있는 도구를 사용합니다.

이 과정들을 통해 도커 환경을 성공적으로 구축하고 애플리케이션을 컨테이너화할 수 있습니다. 도커를 활용하면 개발 환경의 일관성을 유지하고, 배포 과정을 단순화할 수 있습니다.

답글 남기기