[DevOps] Docker

Ryong·2024년 4월 30일

DevOps

목록 보기
1/4
post-thumbnail

Docker는 컨테이너 기반의 오픈 소스 가상화 플랫폼으로, 애플리케이션을 컨테이너라는 격리된 환경에서 실행할 수 있게 해준다. 컨테이너는 가상 머신과 유사하지만, 더 가벼우며 시스템 자원을 효율적으로 사용한다. Docker의 핵심 목표는 “어디서나 동일하게 실행되는 소프트웨어”를 제공하는 것이며, 이를 통해 개발, 테스트, 프로덕션 환경 간의 격차를 줄이고 DevOps 및 CI/CD(지속적 통합 및 지속적 배포) 워크플로우를 용이하게 한다.

Docker의 주요 개념

1. 이미지 (Image)

Docker 이미지는 애플리케이션과 그 의존성, 라이브러리, 도구 등이 포함된 읽기 전용 템플릿이다. 이미지는 컨테이너 실행의 기반이 되며, Dockerfile이라는 스크립트를 통해 생성된다. Dockerfile은 이미지를 어떻게 구축할지에 대한 지침을 담고 있다.

2. 컨테이너 (Container)

컨테이너는 Docker 이미지를 기반으로 실행되는 가벼운, 실행 가능한 패키지다. 각 컨테이너는 서로 격리되어 있으며, 자체 파일시스템을 가지고 독립적으로 실행된다. 이는 컨테이너가 호스트 OS를 공유하면서도 서로 영향을 주지 않는다는 것을 의미한다.

3. Docker Hub

Docker Hub는 Docker 이미지를 저장하고 공유할 수 있는 클라우드 기반 저장소 서비스다. 개발자는 자신의 이미지를 Docker Hub에 업로드하고 다른 사용자와 공유할 수 있으며, 또한 다른 사람이 만든 이미지를 다운로드하여 사용할 수 있다.

Docker의 작동 방식

  1. Dockerfile 작성: 애플리케이션 및 필요한 모든 설정을 포함하는 Dockerfile을 작성합니다.
  2. 이미지 빌드: docker build 명령을 사용하여 Dockerfile로부터 이미지를 생성합니다.
  3. 컨테이너 실행: docker run 명령을 사용하여 이미지로부터 컨테이너를 생성하고 실행합니다.

Docker의 이점

  1. 효율성과 속도: 컨테이너는 빠르게 시작되며, 가상 머신보다 적은 자원을 사용한다.

  2. 이식성: 어떤 환경에서도 동일한 동작을 보장한다. 로컬에서 작동하는 것은 프로덕션에서도 작동한다.

  3. 버전 관리와 재현성: 이미지는 버전 관리가 가능하며, 같은 이미지를 사용함으로써 어디서든 동일한 환경을 재현할 수 있다.

  4. 개발과 운영의 일관성: 모든 환경에서 동일한 도커 이미지를 사용함으로써, 개발에서 발생할 수 있는 "작동하지 않습니다" 문제를 줄일 수 있다.

  5. 마이크로서비스 아키텍처 지원: 각 컨테이너는 하나의 서비스를 실행할 수 있어, 마이크로서비스 아키텍처를 쉽게 구현할 수 있다.

기본 도커 명령어

1. 이미지 관련 명령어

  • docker pull [OPTIONS] NAME[:TAG|@DIGEST]

    • 도커 허브 또는 다른 이미지 저장소에서 이미지를 다운로드.
    • 예: docker pull ubuntu:18.04
  • docker build [OPTIONS] PATH | URL | -

    • Dockerfile의 지시에 따라 이미지를 빌드.
    • 예: docker build -t myapp . (현재 디렉토리의 Dockerfile 사용)
  • docker images

    • 로컬 시스템에 저장된 모든 이미지를 리스트업.
  • docker rmi [OPTIONS] IMAGE [IMAGE...]

    • 하나 이상의 도커 이미지를 삭제.
    • 예: docker rmi myapp

2. 컨테이너 관련 명령어

  • docker run [OPTIONS] IMAGE [COMMAND][ARG...]

    • 새 컨테이너를 생성하고 실행.
    • 예: docker run -d -p 8080:80 --name webserver nginx (백그라운드 실행, 포트 매핑)
  • docker ps [OPTIONS]

    • 실행 중인 컨테이너를 보여준다. -a 옵션을 사용하면 중지된 컨테이너도 보여준다.
    • 예: docker ps -a
  • docker stop [OPTIONS] CONTAINER [CONTAINER...]

    • 하나 이상의 실행 중인 컨테이너를 중지.
    • 예: docker stop webserver
  • docker start [OPTIONS] CONTAINER [CONTAINER...]

    • 중지된 컨테이너를 다시 시작.
    • 예: docker start webserver
  • docker restart [OPTIONS] CONTAINER [CONTAINER...]

    • 실행 중인 컨테이너를 재시작.
    • 예: docker restart webserver
  • docker rm [OPTIONS] CONTAINER [CONTAINER...]

    • 하나 이상의 컨테이너를 삭제.
    • 예: docker rm webserver

3. 네트워크 관련 명령어

  • docker network create [OPTIONS] NETWORK

    • 새로운 네트워크를 생성.
    • 예: docker network create my-net
  • docker network ls

    • 생성된 모든 네트워크를 리스트업.
  • docker network rm NETWORK [NETWORK...]

    • 하나 이상의 네트워크를 삭제.
    • 예: docker network rm my-net

4. 볼륨 관련 명령어

  • docker volume create [OPTIONS][VOLUME]

    • 새로운 볼륨을 생성.
    • 예: docker volume create my-volume
  • docker volume ls

    • 모든 도커 볼륨을 리스트업.
  • docker volume rm VOLUME [VOLUME...]

    • 하나 이상의 볼륨을 삭제.
    • 예: docker volume rm my-volume

고급 도커 명령어

  • docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

    • 실행 중인 컨테이너 내부에서 명령을 실행.
    • 예: docker exec -it webserver bash (컨테이너 내부에서 bash 쉘 실행)
  • docker logs [OPTIONS] CONTAINER

    • 컨테이너의 로그를 보여준다.
    • 예: docker logs webserver
  • docker inspect [OPTIONS] NAME|ID [NAME|ID...]

    • 컨테이너나 이미지의 상세한 정보를 JSON 형식으로 보여준다.
    • 예: docker inspect webserver
profile
새로운 시작. 그리고 도약

0개의 댓글