Docker & Docker-compose

duckbill413·2023년 11월 10일
0

CICD

목록 보기
2/5
post-thumbnail

Docker

도커(Docker)는 소프트웨어 컨테이너 기술을 제공하는 플랫폼으로, 애플리케이션과 그 의존성들을 격리된 환경에서 실행할 수 있게 해줍니다. 이를 통해 애플리케이션을 효율적으로 개발, 배포, 및 실행할 수 있습니다. 도커는 다양한 운영 체제 및 클라우드 환경에서 동일한 방식으로 동작하므로 개발 환경과 프로덕션 환경 간의 일관성을 제공합니다.

도커의 주요 개념 및 구성 요소

  1. 이미지(Image): 도커 이미지는 애플리케이션과 그 실행에 필요한 모든 것을 포함하는 가볍고 독립적인 패키지입니다. 이미지는 파일 시스템, 라이브러리, 실행 환경 및 애플리케이션 코드 등을 포함하고 있습니다.
  2. 컨테이너(Container): 도커 컨테이너는 이미지의 실행 가능한 인스턴스입니다. 컨테이너는 격리된 환경에서 동작하며, 호스트 시스템과는 독립적으로 실행됩니다. 각 컨테이너는 자체 파일 시스템, 프로세스, 네트워크를 가지며, 호스트 및 다른 컨테이너와 격리되어 있습니다.
  3. 도커 레지스트리(Docker Registry): 도커 이미지를 저장하고 관리하는 서비스입니다. 대표적인 레지스트리로는 도커 허브(Docker Hub)가 있습니다. 사용자는 이미지를 레지스트리에서 가져와서 사용할 수 있습니다.
  4. 도커 컴포즈(Docker Compose): 여러 개의 컨테이너로 이루어진 애플리케이션을 정의하고 실행하기 위한 도구입니다. docker-compose.yml 파일을 사용하여 애플리케이션의 서비스, 네트워크, 볼륨 등을 정의하고 관리할 수 있습니다.

도커의 장점

  • 일관성: 개발 환경과 프로덕션 환경 간의 일관성을 유지할 수 있습니다.
  • 효율성: 가상화보다 가볍고 빠르게 애플리케이션을 배포할 수 있습니다.
  • 확장성: 애플리케이션을 더 쉽게 확장하고 관리할 수 있습니다.
  • 격리: 각 컨테이너는 독립적으로 실행되므로 한 컨테이너의 변경이 다른 컨테이너에 영향을 미치지 않습니다.

도커와 가상머신의 차이

도커(Docker)와 가상머신(Virtual Machine, VM)은 둘 다 애플리케이션을 격리된 환경에서 실행하고 관리하는 기술이지만, 그 구현 방식과 특징에서 차이가 있다.

1. 가상화 수준:

  • 도커: 컨테이너라고 불리는 경량화된 가상 환경을 사용합니다. 도커 컨테이너는 호스트 운영 체제의 커널을 공유하며, 애플리케이션 및 의존성을 격리된 환경에서 실행합니다.
  • 가상머신: 가상 머신은 하이퍼바이저를 통해 호스트 운영 체제 위에서 게스트 운영 체제를 실행합니다. 각 가상 머신은 독립적인 운영 체제와 커널을 가지고 있습니다.

2. 자원 소비:

  • 도커: 가볍고 빠른 실행이 가능하며, 호스트 운영 체제의 자원을 효율적으로 공유하여 소비합니다.
  • 가상머신: 각 가상 머신은 전체 운영 체제를 포함하므로 더 많은 자원을 소비합니다. 물리적인 가상화로 인해 오버헤드가 발생할 수 있습니다.

3. 시작 시간:

  • 도커: 컨테이너는 빠르게 시작되고 중지될 수 있어 개발 및 배포 과정에서 빠른 반응이 가능합니다.
  • 가상머신: 가상 머신은 부팅 시간이 더 길고 무겁습니다. 가상 머신을 시작하고 중지하는 데에는 상대적으로 더 많은 시간이 소요됩니다.

4. 이식성:

  • 도커: 이미지를 통한 패키징으로, 어떤 환경에서든 동일한 실행 환경을 보장하며 이식성이 뛰어납니다.
  • 가상머신: 가상 머신 이미지는 종종 특정 가상화 솔루션에 종속적이기 때문에 다양한 환경으로 이동하기 어려울 수 있습니다.

5. 용도:

  • 도커: 마이크로서비스 아키텍처와 연계하여 사용되며, 빠른 배포와 스케일링이 필요한 환경에 적합합니다.
  • 가상머신: 전체 운영 체제를 가상화하기 때문에 다양한 운영 체제를 실행하거나 각각의 가상 머신에 독립적인 환경이 필요한 경우에 적합합니다.

6. 가상머신의 구조


Docker 설치

  1. 우분투 시스템 패키지 업데이트
$ sudo apt-get update
  1. 도커 설치에 필요한 패키지 설치
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  1. Docker 공식 GPG 설치
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  1. Docker의 공식 apt 저장소를 추가
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  1. 시스템 패키지 업데이트
$ sudo apt-get update
  1. Docker 설치
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
  1. Docker 설치 확인
$ sudo systemctl status docker
$ docker -v
  • docker 24.0.7 설치 완료 (23.11.09) 기준

Docker 명령어

  • 설치된 도커 이미지 확인
$ sudo docker images
  • 실행 중 컨테이너 확인
$ sudo docker ps
$ sudo docker container ls
  • 전체 컨테이너 확인
$ sudo docker ps -a
  • 도커 이미지 다운로드
$ sudo docker pull {{docker-image-name}}
  • 도커 컨테이너 로그 확인
$ sudo docker logs {{container_id}}
  • 도커 이미지 빌드
$ sudo docker build -t {{docker-image-name]}:{{tag-name}} .
# ex) sudo docker build -t duckbill413/enjoytrip:lastest .
  • 도커 이미지 이름 변경
$ sudo docker rename <old_name> <new_name>
  • 도커 이미지 실행
$ sudo docker run -d -p {{in-port}}:{{out-port}} --name={{container-name}} {{image-name}}
# ex) docker run -d -p 6379:6379 --name=redis redis:alpine
  • 실행중인 도커 컨테이너 내부 접속
$ sudo docker exec -it {{container-name}} /bin/sh
or
$ sudo docker exec -it {{container-name}} /bin/bash

Docker hub

  • Docker hub repository 생성 및 사용을 위해서는 Docker 가입 및 이메일 인증필요

Docker-compose

Docker Compose는 여러 개의 도커 컨테이너를 정의하고 실행하기 위한 도구로, 단일 파일에 애플리케이션의 서비스, 네트워크, 볼륨 등을 설정할 수 있습니다.

docker-compose.yml 파일을 사용하여 여러 컨테이너 간의 관계와 설정을 정의하고, 한 번에 여러 컨테이너를 실행하거나 관리할 수 있습니다.

Docker Compose를 사용하면 복잡한 애플리케이션을 쉽게 정의하고 관리할 수 있으며, 개발 환경에서부터 프로덕션 배포까지 일관된 환경을 유지할 수 있습니다.

  • 서비스(Services):
    • docker-compose.yml 파일 내에서 각 서비스는 하나의 도커 컨테이너를 나타냅니다. 서비스 정의에는 이미지, 포트 매핑, 환경 변수, 볼륨 마운트 등이 포함될 수 있습니다.
  • 네트워크(Networks):
    • 서비스 간 통신을 위한 도커 네트워크를 정의할 수 있습니다. 서비스는 동일한 네트워크에 속하면 서로 통신할 수 있습니다.
  • 볼륨(Volumes):
    • 데이터를 저장하거나 컨테이너 간에 데이터를 공유하기 위해 도커 볼륨을 정의할 수 있습니다.
  • 환경 변수(Environment Variables):
    • 서비스에 환경 변수를 설정하여 동적으로 컨테이너의 동작을 구성할 수 있습니다.

Docker compose 명령어

  • docker-compose 빌드
$ sudo docker-compose build
  • docker-compose 실행
$ sudo docker-compose up
$ sudo docker-compose up -d *# docker-compose 백그라운드 실행*
  • docker-compose 중지 및 컨테이너 삭제
$ sudo docker-compose down
  • 현재 실행 중인 서비스의 상태를 확인
$ sudo docker-compose ps
  • docker-compose 이미지 다운로드
$ sudo docker-compose pull
  • 사용되지 않는 컨테이너 및 이미지 삭제 + 볼륨 정리
docker volume prune -f

Docker-compose 설치

설치 가능한 버전 확인

docker-compose 버전 정보 링크

  1. Docker-compose 설치
$ sudo curl -SL "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  • docker-compose yml 3.0 이상을 사용할 경우 2.0.0 이상의 docker-compose를 설치해야 한다.
  1. Docker-compose 권한 부여
$ sudo chmod +x /usr/local/bin/docker-compose
  1. Docker-compose 심볼릭 링크 지정
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
  1. docker-compose 버전 확인
$ docker-compose --version

Docker-compose.yml 작성

프로젝트 최상단에 docker-compose.yml 파일 생성

version: "4"
services:
  springboot:
    image: {{docker-id}}/{{spring-repository-name}} # ex) duckbill413/test-spring:latest
    container_name: {{spring-container-name}} # ex) test-spring
    ports:
      - "8080:8080"
    networks:
      - {{network-name}} # ex) test_net
    restart: "always"

  nginx:
    image: {{docker-id}}/{nginx-repository-name}} # ex) duckbill413/test-nginx:latest
    container_name: {{nginx-container-name}} # ex) test-nginx
    ports:
      - "80:80"
    depends_on:
      - {{nginx-upstream-address}} # ex) springboot
    networks:
      - {{network-name}}
    restart: "always"

networks:
  {{network-name}}:
    driver: bridge
profile
같이 공부합시다~

0개의 댓글

관련 채용 정보