Docker란 무엇인가?

2024. 10. 1. 10:02·Docker

□ CI / CD에 대해

  • CI : Continuous Integration의 약자로 지속적인 통합을 의미
    1. 각 개발자들이 github등의 관리시스템에 코드를 통합
    2. 통합된 코드를 빌드 및 테스트 진행
    3. 버그 발생 시 버그를 해결
      → 빌드 및 테스트를 사람이 매번 할 필요없이 프로그램이 실행하고, 발생한 버그를 사람이 수정
  • CD : Continuous Deployment(Delivery)의 약자로 지속적인 제공을 의미
  • 기본 개념
    1. 지속적인 통합
      • 자동화된 빌드와 자동화된 테스트를 제공
      • 안정적인 코드를 빠르게 제공할 수 있는 밑거름
    2. 지속적인 서비스 제공
    3. 지속적인 베포
      • 베포를 자동화하여 베포 시간을 단축하고 코드 결과물을 빠르게 지속적으로 제공
  • 단계
    1. 코드 작성 : 개발자들은 소스 코드를 작성하고 저장소에 업로드
    2. 빌드 : 저장소에서 최신 소스 코드를 가져와 빌드를 수행, 빌드는 소스코드를 컴파일하고, 라이브러리를 추가하고, 필요한 파일을 생성하는 과정
    3. 테스트 : 빌드된 결과물을 대상으로 테스트를 수행, 테스트는 기능이 정상적으로 작동하는지 확인하고, 버그를 발견하고 수정화는 과정
    4. 베포 : 테스트를 통과한 결과물을 베포, 베포는 서버에 업로드하거나, 사용자에게 제공하는 과정

□ Docker Image

  • Docker Container 서비스를 위한 이미지는 Container 런타임에 필요한 바이너리, 라이브러리 및 설정 값 등을 포함하고, 변경되는 상태값을 보유하지 않고(stateless) 변하지 않음(Immutable, Read-Only)
  • 상태 저장 없음(Stateless) : 애플리케이션과 관련된 모든 파일과 라이브러리를 포함하고 있기 때문에, 다른 환경에서도 동일한 애플리케이션을 실행 가능
  • 불변성(Immutable) : 이미지가 한번 생성되면 변경할 수 없는 것을 의미
  • 도커 이미지가 필요한 파일만 포함하고 있기 때문에 용량이 작으며, 이미지를 변경할 필요가 있을 경우에는 새로운 이미지 생성 필요

□ Docker Container

  • Docker 컨테이너는 애플리케이션을 가상 환경에서 격리하여 실행할 수 있는 경량화된 실행 단위이다.
  • 이를 통해 개발자는 애플리케이션과 그에 필요한 모든 라이브러리, 종속성, 설정 파일 등을 하나의 컨테이너 이미지에 패키징하여 어디서든 동일하게 실행할 수 있다.
  • Docker 컨테이너는 가상 머신과 비슷해 보이지만, 더 가볍고 빠르며, 호스트 운영체제의 커널을 공유하면서 그 위에서 격리된 환경을 제공한다.
  • Docker 컨테이너의 주요 특징
    1. 격리된 환경 : 컨테이너는 애플리케이션을 격리된 공간에서 실행하여, 다른 애플리케이션과의 충돌을 방지한다.
    2. 경량화 : 컨테이너는 호스트 운영체제의 커널을 공유하므로, 가상 머신보다 적은 리소스를 사용
    3. 이식성 : 컨테이너 이미지를 사용하면 애플리케이션을 어느 환경에서든 동일하게 실행할 수 있다. 로컬 개발 환경, 테스트 환경, 프로덕션 서버 등에서 일관된 실행 환경을 보장
    4. 빠른 시작 : 가상 머신과 달리 컨테이너는 빠르게 시작하고 중지할 수 있다.
    5. 배포 자동화 : 컨테이너는 CI/CD 파이프라인에서 쉽게 배포할 수 있다.
  • Docker 컨테이너 관리 주요 명령어
    • `docker run`: 새로운 컨테이너를 실행할 때 사용.
    • `docker ps`: 현재 실행 중인 컨테이너 목록을 확인.
    • `docker stop`: 실행 중인 컨테이너를 중지.
    • `docker rm`: 컨테이너를 삭제.
    • `docker exec`: 실행 중인 컨테이너에 명령을 실행.
    • `docker logs`: 컨테이너의 로그를 확인.

 

□ Docker File

컴퓨터에서 돌아가는 앱을 만들기 위한 레서피같은 것, 이 file을 토대로 Docker Image를 만들 수 있음

  • Docker File을 사용하는 이유
    1. 앱을 컨테이너로 만들 때 이미지를 만드는 용도로 사용, 이렇게 하면 앱이 필요한 모든 것을 한 곳에 담을 수 있음
    2. 누구나 똑같은 앱 환경을 쉽게 만들 수 있음
    3. 앱을 만드는 과정을 자동화 할 수 있음

 

□ Docker Compose

  • Docker Compose 를 사용하는 이유는?
    1. 편하게 설정하기: Docker Compose는 여러 컨테이너를 한 파일에 적어서 설정할 수 있다, 이 파일에는 컨테이너가 무슨 이미지를 쓸지, 어떤 포트를 사용할지, 환경 변수는 뭐가 필요한지 등을 작성 이렇게 하면 여러 컨테이너를 한 번에 쉽게 설정 가능.
    2. 자동으로 배포하기: 설정 파일이 있으면, Docker Compose가 알아서 컨테이너들을 만들어 주고 실행,. 개발자가 일일이 명령어를 입력할 필요가 없어짐.
    3. 의존성 관리: 컨테이너들이 서로 의존하는 관계가 있으면, Docker Compose가 이를 관리, 예를 들어, A 컨테이너가 B 컨테이너를 필요로 하면, A를 먼저 켜고 나서 B를 실행하는 방식.
    4. 모니터링과 로깅: Docker Compose는 컨테이너들이 어떻게 돌아가는지 지켜보고, 로그도 모아줌, 이렇게 하면 문제가 생겼을 때 빨리 찾아서 고칠 수 있음.
    5. 확장성: 여러 컨테이너를 하나의 그룹으로 관리할 수 있음, 예를 들어 웹 앱을 만드는 여러 컨테이너를 한꺼번에 관리하고 확장하기 쉬워짐.
    6. 유연성: Docker Compose는 개발 환경, 테스트 환경, 실제 운영 환경에서도 같은 설정 파일을 써서 일관성을 유지
    7. 보안 강화: 컨테이너들의 네트워크를 분리해서 외부로부터의 접근을 제한할 수도 있음
    8. 유지보수 용이: 설정 파일 하나로 컨테이너들을 관리하기 때문에, 뭔가 바꿀 일이 있으면 파일만 수정됨, 그러면 Docker Compose가 알아서 변경사항을 적용해줌.
  • Docker Compose의 특장점
    1. 한 번에 여러 컨테이너 설정하기 : Docker Compose는 여러 컨테이너의 설정을 하나의 YAML 파일에 넣어서 관리, 이 파일 하나로 여러 컨테이너의 모든 환경을 설정하고, 그걸로 여러 컨테이너를 한 번에 실행가능
    2. 빠른 서비스 실행 : 설정 값들을 저장해 두고 다시 쓸 수 있음, 만약 설정이 바뀌지 않았다면, Docker Compose는 이전에 저장해둔 정보를 다시 사용해서 서비스를 더 빨리 시작할 수 있다.
    3. 같은 네트워크에서 쉽게 연결 : docker-compose.yaml 파일에 있는 애플리케이션들은 모두 같은 네트워크에 자동으로 연결, 이렇게 하면 복잡한 네트워크 설정 없이도 여러 컨테이너가 서로 쉽게 통신할 수 있다.

'Docker' 카테고리의 다른 글

Dockerfile Instuction  (1) 2025.03.11
'Docker' 카테고리의 다른 글
  • Dockerfile Instuction
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • DB
      • AWS
      • CI-CD
      • 웹
      • git & github
      • 구인공고분석
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java arrays.copyofrnage()
    프로그래머스 java 기초트레이닝
    java 유클리드 호제법
    데이터 타입
    java two-pointer
    Java this
    java
    java 멤버
    개발로드맵
    프로그래머스 java 기초 트레이닝
    java super
    java 메서드
    Java 생성자
    java 세수의합
    java enhance switch
    java기초
    데이터 크기
    자료구조
    java 제어자
    java 에라토스테네스의 체
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
Docker란 무엇인가?
상단으로

티스토리툴바