[Docker 강의 25편(마지막)] 도커와 서버 배포

2024. 10. 8. 12:00·Docker/Docker 강의
반응형

 

안녕하세요 펭귄 교수입니다.

 

도커는 서버 배포 과정을 단순화하고, 일관된 환경에서 애플리케이션을 실행할 수 있도록 도와주는 강력한 도구입니다.

서버 배포는 전통적으로 복잡하고 많은 수작업이 필요한 과정이었지만, 도커를 사용하면 그 과정이 크게 간소화됩니다.

 

이번 글에서는 도커를 사용하여 애플리케이션을 서버에 배포하는 방법과 주요 개념들에 대해 알아보겠습니다.


1. 도커로 서버 배포하는 이유

도커를 사용하여 서버에 애플리케이션을 배포하는 가장 큰 장점은 일관성과 이식성입니다. 도커는 애플리케이션과 그에 필요한 모든 종속성을 하나의 컨테이너로 묶어 배포할 수 있습니다. 이 컨테이너는 어디서나 동일하게 실행될 수 있어, 로컬 환경, 테스트 환경, 프로덕션 환경에서 모두 일관된 결과를 얻을 수 있습니다.

주요 장점

  • 이식성: 컨테이너 이미지는 어디서든 동일하게 동작합니다.
  • 격리: 컨테이너는 서로 독립적이므로, 서로의 종속성이나 환경에 영향을 주지 않습니다.
  • 자동화: 도커는 배포 파이프라인을 자동화하기 쉽습니다.
  • 확장성: 컨테이너는 쉽게 복제되고 확장 가능합니다.

2. 도커 서버 배포 준비

도커로 서버에 애플리케이션을 배포하려면 먼저 서버 환경에 도커를 설치해야 합니다. AWS, Google Cloud, Azure와 같은 클라우드 서버나 로컬 서버를 사용할 수 있으며, 도커 설치는 매우 간단합니다.

서버에 도커 설치

  1. 우분투 서버에 도커 설치하기:
# 패키지 업데이트
sudo apt-get update

# 도커 설치를 위한 필수 패키지 설치
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

# Docker GPG 키 추가
curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo apt-key add -

# Docker 저장소 추가
sudo add-apt-repository "deb [arch=amd64] <https://download.docker.com/linux/ubuntu> $(lsb_release -cs) stable"

# 도커 설치
sudo apt-get update
sudo apt-get install docker-ce

# 도커 실행 확인
sudo systemctl status docker
  1. AWS EC2에 도커 설치하기:
  2. AWS EC2 인스턴스에 접속한 후, 위와 동일한 명령어로 도커를 설치할 수 있습니다. AWS는 도커를 사용하기에 적합한 클라우드 플랫폼 중 하나입니다.
  3. 도커 컴포즈(Docker Compose) 설치: 여러 컨테이너를 쉽게 관리하려면 도커 컴포즈를 설치하는 것이 좋습니다.
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

3. 도커를 이용한 애플리케이션 배포

3-1. 도커 이미지 준비

애플리케이션을 도커 컨테이너로 배포하려면 먼저 도커 이미지를 만들어야 합니다. 이 이미지는 애플리케이션 코드, 실행 환경, 라이브러리 등을 포함합니다.

Dockerfile 작성

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

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

# 종속성 복사
COPY package*.json ./

# 종속성 설치
RUN npm install

# 소스 코드 복사
COPY . .

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

# 실행 명령어
CMD ["npm", "start"]

위 예시는 Node.js 애플리케이션을 위한 Dockerfile입니다. 도커 이미지는 각 애플리케이션에 맞게 커스터마이징할 수 있습니다.

3-2. 도커 이미지 빌드 및 푸시

이제 작성한 Dockerfile을 기반으로 도커 이미지를 빌드하고, 레지스트리에 푸시할 수 있습니다.

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

# 도커 허브나 ECR에 로그인 후 푸시
docker login
docker tag my-app:latest my-dockerhub-username/my-app:latest
docker push my-dockerhub-username/my-app:latest

도커 이미지를 도커 허브(Docker Hub)나 AWS ECR과 같은 컨테이너 레지스트리에 푸시하면, 어디서든 해당 이미지를 사용할 수 있습니다.


4. 서버에 도커 컨테이너 배포

도커 이미지를 준비하고 레지스트리에 푸시한 후, 서버에서 해당 이미지를 사용해 컨테이너를 실행할 수 있습니다.

4-1. 도커 컨테이너 실행

# 서버에서 도커 허브에서 이미지 가져오기
docker pull my-dockerhub-username/my-app:latest

# 도커 컨테이너 실행
docker run -d -p 80:3000 --name my-running-app my-dockerhub-username/my-app:latest

위 명령어는 my-app 이미지를 80번 포트에서 실행하고, 도커 컨테이너는 백그라운드에서 동작하도록 설정합니다.

4-2. 도커 컴포즈로 다중 컨테이너 배포

도커 컴포즈를 사용하면 여러 개의 컨테이너를 손쉽게 관리할 수 있습니다. 예를 들어, 웹 서버, 데이터베이스 등을 함께 배포하려면 docker-compose.yml 파일을 작성해야 합니다.

version: '3'
services:
  web:
    image: my-dockerhub-username/my-app:latest
    ports:
      - "80:3000"
  db:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: example

이후 다음 명령어를 사용하여 여러 컨테이너를 동시에 배포할 수 있습니다.

docker-compose up -d

5. 도커로 자동화된 배포 파이프라인 구축

CI/CD 파이프라인을 사용하면 도커를 활용한 자동화된 배포 프로세스를 구축할 수 있습니다. Jenkins, GitLab CI, GitHub Actions 등을 사용하여 코드를 푸시하면 도커 이미지가 자동으로 빌드되고, 배포되는 파이프라인을 구성할 수 있습니다.

5-1. GitHub Actions 예시

GitHub Actions는 도커 이미지를 자동으로 빌드하고 푸시하는 데 유용한 도구입니다. 예를 들어, .github/workflows/docker-publish.yml 파일을 작성하여 도커 허브로 이미지를 푸시하는 파이프라인을 만들 수 있습니다.

name: Docker Build and Push

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1

      - name: Log in to Docker Hub
        run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin

      - name: Build and push
        run: |
          docker build -t my-dockerhub-username/my-app:latest .
          docker push my-dockerhub-username/my-app:latest

이 설정은 main 브랜치에 코드를 푸시할 때마다 자동으로 도커 이미지를 빌드하고, 도커 허브에 푸시하는 작업을 수행합니다.


마무리

도커는 서버 배포의 복잡성을 줄여주고, 일관된 환경에서 애플리케이션을 실행할 수 있도록 도와줍니다.

도커 이미지를 빌드하고 서버에 배포하는 과정이 매우 간단해지며, 이를 통해 개발부터 배포까지의 시간을 단축할 수 있습니다.

또한, 도커 컴포즈나 CI/CD 파이프라인을 통해 자동화된 배포 프로세스를 구축하면 더욱 효율적으로 애플리케이션을 관리할 수 있습니다.

 

이렇게 총 25편의 도커 강의가 마무리되었습니다. 강의를 진행하면서 저도 새롭게 배우는 것도 많았습니다. 좋은 경험이 되었고 앞으로도 다른 강의를 더 진행하고 싶은 욕심도 생겼습니다. 여기서 머물지 않고 앞으로 더 나아가는 펭귄 교수가 되어보겠습니다.

감사합니다.

 

다른 강의 더보기

 

[파이썬 코딩 강의] 웹과 파이썬 (Beautiful Soup 편)

안녕하세요 펭귄 교수입니다. 저번 시간, 웹과 파이썬 requests 편에 이어서 Beautiful soup 강의를 시작하겠습니다. 이전에 requests 편을 보시지 않았다면 보시는 것을 추천드립니다. [파이썬 코딩 강

csexy-1365.tistory.com

 

 

[파이썬 코딩 강의] 클래스와 메서드

안녕하세요 펭귄 교수입니다. 잊혀져 있던 파이썬 코딩 강의를 이어 해보고자 합니다. 이번에야 말로 끝까지 다 써보도록 하겠습니다. 이 커리큘럼을 마친 후에는 심화버전으로 찾아오겠습니

csexy-1365.tistory.com

 

 

[Docker 프로젝트] React+Flask+MySQL 설계

안녕하세요 펭귄 교수입니다. 이번에는 Docker를 이용하여 React, Flask, MySQL을 이용해서 웹 서비스 개발에 전체적인 플로우를 소개하고자 합니다. 제가 개인적으로 만들어본 프로젝트에서 다음과

csexy-1365.tistory.com

 

 

반응형

'Docker > Docker 강의' 카테고리의 다른 글

[Docker 강의 24편] 도커로 서버리스 환경 구축하기  (0) 2024.10.08
[Docker 강의 23편] 도커 스웜(Docker Swarm) 개념  (1) 2024.10.06
[Docker 강의 22편] 도커 컨테이너 백업과 복원  (0) 2024.10.06
[Docker 강의 21편] 도커 이미지 보안 관리  (0) 2024.10.06
[Docker 강의 20편] 도커와 마이크로서비스 아키텍처  (0) 2024.10.05
'Docker/Docker 강의' 카테고리의 다른 글
  • [Docker 강의 24편] 도커로 서버리스 환경 구축하기
  • [Docker 강의 23편] 도커 스웜(Docker Swarm) 개념
  • [Docker 강의 22편] 도커 컨테이너 백업과 복원
  • [Docker 강의 21편] 도커 이미지 보안 관리
Dev.Poinguinie
Dev.Poinguinie
게임, 코딩 블로그 입니다. 여러 일상적인 글도 올려요! 많이 봐주세요! 감사합니다.
  • Dev.Poinguinie
    펭귄교수
    Dev.Poinguinie
    • 분류 전체보기
      • 새티스팩토리
        • 정보
        • 모드
        • 리뷰
      • 펠월드
        • 정보
        • 패치노트
      • 게임
        • 스팀 세일
        • 테라리아
        • 디펜서바이버
      • App
        • Kotlin
        • Flutter
      • Front End
        • HTML
        • JavaScript
        • React
      • Back End
        • Node.js
      • Docker
        • Docker 강의
        • Docker Project
      • 프로그래밍
        • AI
        • Chrome Extension
        • Markdown
        • Python
        • C++
        • Linux
        • Error
        • Tool
      • Computer Science
        • Algorithm
        • Network
      • 게임 프로그래밍
        • 유니티
      • 제작
        • 웹사이트
        • 기타 프로그램
      • 일상
        • 자작시
        • 노래 추천 및 정보
        • 블로그 운영
        • 내일의 모든 것
        • 오블완 챌린지
      • 리뷰
        • 식당 리뷰
        • IT 리뷰
  • 최근 글

  • 링크

    • 새티스 팩토리 모드
    • 깃허브 블로그
    • 깃허브 프로필
  • 공지사항

    • 티스토리 스킨 변경
    • 파이썬 코딩 강의 공지사항
  • hELLO· Designed By정상우.v4.10.3
Dev.Poinguinie
[Docker 강의 25편(마지막)] 도커와 서버 배포
상단으로

티스토리툴바