Just Do IT!

Docker와 Docker Compose 본문

개발 공부/DevOps

Docker와 Docker Compose

MOON달 2024. 9. 27. 16:46
728x90
반응형

 

Docker

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

 

Docker의 주요 개념, 구성 요소

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

 

Docker의 장점

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

 

 

 

 

 

Docker 설치하기

https://docs.docker.com/engine/install/ubuntu/

 

Ubuntu

Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.

docs.docker.com

 

1. Docker's apt repository setting

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
  • ca-certificates : 인증서 관리 패키지
  • curl : command line 용 data transfer tool
  • download / upload 모두 가능하다
  • HTTP / HTTPS / FTP / LDAP / SCP / TELNET / SMTP / POP3 등 주요 프로토콜을 지원한다.
  • LINUX / UNIX 계열 및 Windows 등 주요한 OS에서 구동되므로 여러 플랫폼과 OS에서 유용하게 사용할 수 있다.
  • libcurl 이라는 C 기반의 library가 제공되므로 C / C++ 프로 그램 개발시 위의 protocol과 연계가 필요하다면 libcurl을 손쉽게 연계할 수 있다.
  • libcurl은 PHP, RUBY, PERL 및 여러 언어에 바인딩 되어 있으므로 사용하는 언어나 개발 환경에 맞게 libcurl을 사용할 수 있다.
  • /etc/apt/keyrings 폴더 생성 후 0755 권한 설정
  • 0755 : 접근 권한 설정
    • 7 : rwx (소유자 접근 권한)
    • 5 : r-x (그룹 소유자 접근 권한)
    • 5 : r-x (기타 사용자 접근 권한)
  • chmod a+r /etc/apt/keyrings/docker.asc
    • a : 모든 사용자
    • + : 기존 권한에 권한 추가
    • r : 읽기 권한
# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
  • Docker의 APT 저장소 정보를 포함한 문자열 출력
  • deb [...] https://download.docker.com/linux/ubuntu [...] stable
    • deb : APT 패키지 형식을 나타냅니다.
    • [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc]: 현재 시스템의 아키텍처를 가져오고, Docker의 서명키가 저장된 위치를 지정합니다.
    • https://download.docker.com/linux/ubuntu: Docker의 Ubuntu용 패키지 저장소 URL입니다.
    • $(. /etc/os-release && echo "$VERSION_CODENAME"): 현재 Ubuntu 버전의 코드네임(예: focal, jammy)을 가져옵니다.
    • stable: 안정된 버전의 패키지를 설치하도록 설정합니다.
  • | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null:
    • |: 파이프 연산자로, 앞의 출력 결과를 뒤의 명령어로 전달합니다.
    • sudo tee /etc/apt/sources.list.d/docker.list: 위에서 생성한 저장소 정보를 /etc/apt/sources.list.d/docker.list 파일에 기록합니다. sudo는 관리자 권한으로 실행합니다.
    • > /dev/null: 출력 결과를 화면에 보이지 않게 합니다.

2. Docker package 설치

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

 

  • docker-ce:
    • Docker Community Edition의 약자로, Docker의 오픈 소스 버전
    • 컨테이너를 생성하고 관리하는 데 필요한 기본적인 기능을 제공
  • docker-ce-cli:
    • Docker Command Line Interface의 약자
    • Docker와 상호작용하기 위한 명령줄 도구로, 컨테이너를 관리하고 작업을 수행하는 데 사용
  • containerd.io:
    • Containerd는 컨테이너 실행을 관리하는 데 필요한 고수준 API를 제공하는 데몬
    • 컨테이너의 생명주기 관리(생성, 실행, 중지, 삭제 등)를 처리
    • Docker의 핵심 구성 요소 중 하나로, 컨테이너 런타임을 지원
  • docker-buildx-plugin:
    • Docker 이미지의 빌드를 위한 고급 기능을 제공하는 플러그인
    • 멀티 아키텍처 빌드와 같은 고급 기능을 지원하여 다양한 플랫폼에서 이미지를 쉽게 빌드할 수 있다
  • docker-compose-plugin:
    • Docker Compose의 CLI 플러그인
    • 여러 컨테이너를 정의하고 실행하기 위한 YAML 파일을 사용하여 애플리케이션 스택을 구성하고 관리하는 데 도움을 준다.

3. 도커 권한 수정

sudo usermod -aG docker $USER
  • root 권한 없이도 docker를 사용할 수 있도록 권한 수정
  • aG : 사용자를 그룹에 추가하되 기존 그룹은 제거하지 않도록 설정
  • $USER : 현재 사용자의 이름을 자동으로 가져오기

 

 

 

Docker 명령어

컨테이너 실행

docker run -d --name my-nginx -p 8080:80 nginx
  • docker run: 새로운 컨테이너를 생성하고 실행하는 명령어
  • -d:
    • 컨테이너를 백그라운드(detached) 모드로 실행
    • 터미널을 계속 사용할 수 있다.
  • --name my-nginx
    • 컨테이너 이름을 my-nginx로 지정.
    • 이 이름으로 컨테이너를 관리할 수 있다.
  • -p 8080:80
    • 호스트의 8080 포트를 컨테이너의 80 포트로 매핑.
    • localhost:8080으로 Nginx 서버에 접근할 수 있게 된다.
  • nginx: 사용할 이미지를 지정.

시작 및 정지

docker start my-nginx
docker stop my-nginx

컨테이너 확인

docker ps
docker ps -a
  • docker ps는 항상 실행되는 컨테이너만 보여준다
  • -a 옵션을 추가하면 모든 컨테이너를 확인할 수 있다.

컨테이너 로그 확인

docker logs my-nginx

  • docker logs -f : 실시간으로 로그 확인 가능
  • docker logs --tail 10 my-nginx2 : 로그 끝의 10줄 확인 가능

컨테이너 내부 접속

docker exec -it {{container-name}} /bin/sh
docker exec -it {{container-name}} /bin/bash

 

컨테이너 삭제

docker rm [컨테이너ID]
  • ID는 다 쓰지 않고 네 자리만 적어도 삭제가 가능하다.
  • 컨테이너명으로 삭제해도 된다.

이미지 확인

docker images

이미지 삭제

docker rmi [이미지ID]
  • 이미지명이나 ID로 삭제 가능하다.

이미지 검색

docker search nginx

이미지 다운로드

docker pull nginx

 

 

 

 

 

 

Docker Compose 설치

  • Docker Compose는 여러 개의 도커 컨테이너를 정의하고 실행하기 위한 도구
  • 단일 파일에 애플리케이션의 서비스, 네트워크, 볼륨 등을 설정할 수 있다.
  • docker-compose.yml 파일을 사용하여 여러 컨테니터 간의 관계와 설정을 정의하고 한번에 여러 컨테이너를 실행하거나 관리할 수 있다.

docker-compose.yml에 설정할 수 있는 것들

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

Docker compose 명령어

빌드

docker-compose build

 

실행

docker-compose up
docker-compose up -d
  • -d 옵션을 통해 백그라운드에서 실행할 수 있다.

중지 및 컨테이너 삭제

docker-compose down

프로젝트를 수정한 경우

docker-compose up --build -d
  • 삭제하고 다시 빌드하는 일 없이 그냥 위 명령어를 입력하면 된다.

실제 사용 예시

https://daydream-sy.tistory.com/342

 

Docker, Docker-compose 이용해서 가상머신에서 프로젝트 빌드하기

요즘 docker 실습을 가상머신에서 하고 있다.가상머신 설치 관련은 TIL 레파지토리에 이미 정리해서 블로그에도 정리해야 하나 고민 중이라,우선은 내가 진행했던 프로젝트를 빌드해보는 걸 정리

daydream-sy.tistory.com

 

 

 

 

 

 

 

 

 

 


조금 헷갈렸던 개념들을 TIL에 이곳저곳 작성햇었는데 그걸 모아서 작성해봤다.

한번 정리한다고 다 이해가 되는 건 아니지만...그래도 여러번 반복하면서 내걸로 만들어야겠다.

728x90