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

2024. 10. 8. 12:00·Docker/Docker 강의
목차
  1. 1. 도커로 서버 배포하는 이유
  2. 주요 장점
  3. 2. 도커 서버 배포 준비
  4. 서버에 도커 설치
  5. 3. 도커를 이용한 애플리케이션 배포
  6. 3-1. 도커 이미지 준비
  7. Dockerfile 작성
  8. 3-2. 도커 이미지 빌드 및 푸시
  9. 4. 서버에 도커 컨테이너 배포
  10. 4-1. 도커 컨테이너 실행
  11. 4-2. 도커 컴포즈로 다중 컨테이너 배포
  12. 5. 도커로 자동화된 배포 파이프라인 구축
  13. 5-1. GitHub Actions 예시
  14. 마무리
  15. 다른 강의 더보기
728x90
반응형

 

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

 

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

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

 

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


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

 

 

728x90
반응형

'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
  1. 1. 도커로 서버 배포하는 이유
  2. 주요 장점
  3. 2. 도커 서버 배포 준비
  4. 서버에 도커 설치
  5. 3. 도커를 이용한 애플리케이션 배포
  6. 3-1. 도커 이미지 준비
  7. Dockerfile 작성
  8. 3-2. 도커 이미지 빌드 및 푸시
  9. 4. 서버에 도커 컨테이너 배포
  10. 4-1. 도커 컨테이너 실행
  11. 4-2. 도커 컴포즈로 다중 컨테이너 배포
  12. 5. 도커로 자동화된 배포 파이프라인 구축
  13. 5-1. GitHub Actions 예시
  14. 마무리
  15. 다른 강의 더보기
'Docker/Docker 강의' 카테고리의 다른 글
  • [Docker 강의 24편] 도커로 서버리스 환경 구축하기
  • [Docker 강의 23편] 도커 스웜(Docker Swarm) 개념
  • [Docker 강의 22편] 도커 컨테이너 백업과 복원
  • [Docker 강의 21편] 도커 이미지 보안 관리
Dev.Poinguinie
Dev.Poinguinie
게임, 코딩 블로그 입니다. 여러 일상적인 글도 올려요! 많이 봐주세요! 감사합니다.
    250x250
  • 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편(마지막)] 도커와 서버 배포

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.