본문 바로가기

About my life/Development Studies

[Docker] 도커 초보자를 위한 실전 튜토리얼: 애플리케이션 컨테이너화와 배포

728x90
반응형
이 튜토리얼은 도커를 처음 사용하는 초보자를 대상으로, 간단한 애플리케이션을 컨테이너화하고 도커를 통해 배포하는 과정을 안내합니다.

1. 도커 설치:

 

먼저 도커를 설치해야 합니다. 다양한 운영체제에 대한 설치 방법을 안내합니다.

  • 리눅스:
  • sudo apt-get update sudo apt-get install docker-ce
  • 맥:
    도커 공식 사이트에서 Docker Desktop을 다운로드하여 설치합니다.
  • 윈도우:
    도커 공식 사이트에서 Docker Desktop을 다운로드하여 설치합니다.

2. 간단한 웹 애플리케이션 컨테이너화:

 

간단한 Node.js 웹 애플리케이션을 컨테이너화하여 이미지를 빌드합니다.

  • 프로젝트 디렉토리 구성:
  • my-web-app/ ├── Dockerfile ├── app/ │ ├── index.js │ ├── package.json │ └── ... └── ...
  • Dockerfile 작성:
  • FROM node:14 WORKDIR /usr/src/app COPY package*.json ./ RUN npm install COPY . . EXPOSE 8080 CMD ["node", "index.js"]
  • 이미지 빌드:
  • docker build -t my-web-app .

3. 컨테이너 실행과 웹 애플리케이션 확인:

 

이제 빌드한 이미지로 컨테이너를 실행하고 웹 애플리케이션을 확인합니다.

  • 컨테이너 실행:
  • docker run -p 8080:8080 -d my-web-app
  • 웹 브라우저에서 확인:
    http://localhost:8080로 접속하여 웹 애플리케이션을 확인합니다.

 


4. 도커 컴포즈를 이용한 다중 컨테이너 관리:

 

도커 컴포즈를 사용하여 데이터베이스와 연동된 애플리케이션을 다중 컨테이너로 실행합니다.

  • 도커 컴포즈 파일 작성:
  • version: '3' services: web: build: . ports: - "8080:8080" db: image: "postgres:latest" environment: POSTGRES_PASSWORD: example
  • 도커 컴포즈 실행:
  • docker-compose up -d

5. 네트워크와 데이터 관리:

 

도커 네트워크를 생성하고 데이터 볼륨을 사용하여 애플리케이션의 데이터를 관리합니다.

  • 도커 네트워크 생성:
  • docker network create my-network
  • 컨테이너 실행 시 네트워크 지정:
  • docker run -d --network my-network --name my-container my-web-app
  • 데이터 볼륨 사용:
  • docker run -v /host/path:/container/path -d my-web-app

6. 도커 보안 및 최적화:

 

도커 컨테이너를 실행할 때의 보안적인 측면과 최적화에 대해 학습합니다.

  • 보안 관련 명령어:
  • docker scan my-web-app
  • 최적화 관련 명령어:
  • docker image prune

아직 잘 이해가 안가시는 분들을 위해서 몇 가지 예제를 가져와봤습니다.

 

아래는 파이썬으로 현재 날짜를 출력하는 간단한 프로그램을 만들고, 이를 도커 이미지로 빌드하는 Dockerfile 예제입니다.

 

1. 파이썬 프로그램 (app.py):

import time
from datetime import datetime

current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"현재 날짜 및 시간: {current_time}")

 

2. Dockerfile:

# 베이스 이미지로 Python 3 사용
FROM python:3

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

# 현재 디렉토리의 모든 파일을 컨테이너의 /app/ 디렉토리에 복사
COPY . /app/

# 필요한 패키지 설치
RUN pip install --no-cache-dir -r requirements.txt

# 컨테이너 실행 시 실행될 명령어 설정
CMD ["python", "./app.py"]

 

 

3. 도커 이미지 빌드 및 실행:

위의 Dockerfile이 있는 디렉토리에서 다음 명령어를 실행하여 도커 이미지를 빌드하고 컨테이너를 실행할 수 있습니다.

# 도커 이미지 빌드
docker build -t my-python-app .

# 도커 컨테이너 실행
docker run my-python-app

이렇게 하면 현재 날짜와 시간이 출력되는 간단한 파이썬 프로그램이 도커 컨테이너에서 실행됩니다. 위의 예제에서 requirements.txt 파일이 필요 없으므로 제거했습니다. 만약 추가적인 패키지가 필요하다면 해당 파일을 작성하고 Dockerfile에 추가해주시면 됩니다.


셀레니움을 사용하여 네이버에 접속하는 도커 이미지를 만들기 위해서는 다음과 같은 단계를 따를 수 있습니다. 이 예제에서는 파이썬과 셀레니움을 사용하며, 크롬 드라이버를 이용하여 웹 브라우저를 자동으로 제어합니다.

 

1. Dockerfile 작성:

# 베이스 이미지로 Python 3 사용
FROM python:3

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

# 필요한 패키지 설치
RUN apt-get update \
    && apt-get install -y chromium \
    && rm -rf /var/lib/apt/lists/* \
    && pip install selenium

# 크롬 드라이버 다운로드 및 설치
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
    && echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list \
    && apt-get update \
    && apt-get install -y google-chrome-stable

# 크롬 드라이버를 사용하기 위한 환경 변수 설정
ENV CHROME_DRIVER /usr/lib/chromium/chromedriver
ENV PATH $CHROME_DRIVER:$PATH

# 소스 코드 복사
COPY . /app/

# 실행 시 필요한 명령어
CMD ["python", "./naver_enter.py"]

 

2. 셀레니움을 사용한 네이버 접속 스크립트 (naver_enter.py):

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

# 크롬 드라이버 옵션 설정
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless")  # GUI 없이 실행
chrome_options.add_argument("--disable-gpu")  # GPU 가속 비활성화
chrome_options.add_argument("--no-sandbox")  # 더 이상 필요하지 않음

# 셀레니움 웹 드라이버 생성
driver = webdriver.Chrome(executable_path="/usr/lib/chromium/chromedriver", options=chrome_options)

# 네이버 접속
driver.get("https://www.naver.com")

# 스크린샷 찍기 (테스트를 위해)
driver.save_screenshot("naver_enter.png")

# 브라우저 닫기
driver.quit()

 

3. 도커 이미지 빌드 및 실행:

# 도커 이미지 빌드
docker build -t naver-enter .

# 도커 컨테이너 실행
docker run naver-enter

 

 


이 튜토리얼을 통해 도커의 기초를 이해하고, 간단한 애플리케이션을 컨테이너로 만들고 배포하는 과정을 익힐 수 있습니다. 앞으로 더 복잡한 환경에서의 도커 활용을 위한 기술들을 추가로 학습해 나갈 수 있습니다.

 

728x90
반응형