[태그:] 기본명령

  • 도커(Docker)란?, 핵심개념, 장단점, 기본명령어

    🐳 도커(Docker)란?

    • Docker는 애플리케이션을 컨테이너(container)라는 단위로 실행할 수 있도록 도와주는 가상화 기술입니다.
    • 컨테이너를 사용하면 애플리케이션과 필요한 모든 환경(라이브러리, 설정 파일 등)을 하나로 묶어 어디서든 동일한 환경에서 실행할 수 있습니다.

     
     
     


    💡 Docker의 핵심 개념

     

    1️⃣ 컨테이너(Container)

    • 애플리케이션과 실행에 필요한 모든 요소(코드, 라이브러리, 설정 등)를 포함한 독립적인 환경
    • 가상 머신(VM)과 달리 OS 전체를 포함하지 않고, 경량화된 실행 방식을 가짐
    • 어디서 실행해도 동일한 환경 보장 (Windows, Mac, Linux 상관없이 실행 가능)

     

    2️⃣ 이미지(Image)

    • 컨테이너를 실행하기 위한 설정된 파일 시스템과 애플리케이션을 포함한 패키지
    • 여러 개의 레이어(layer)로 구성되며, 변경이 필요할 경우 새 레이어를 추가하는 방식
    • Docker Hub 또는 개인 저장소에 업로드 가능

     

    3️⃣ Dockerfile

    • 컨테이너를 만들기 위한 설정 파일
    • 컨테이너를 생성할 때 실행할 명령어, 환경 변수, 설치 – 패키지, 실행 프로그램 등을 지정
    • docker build 명령어를 통해 이미지 생성 가능

     

    4️⃣ Docker Hub

    • 공식적으로 Docker 이미지를 공유하는 클라우드 기반 저장소
    • 다양한 운영 체제, 개발 프레임워크, 데이터베이스 등의 공식 Docker 이미지를 제공
    • 웹사이트 URL: https://hub.docker.com

     

    5️⃣ Docker Compose

    • 여러 개의 컨테이너를 한 번에 실행하기 위한 오케스트레이션 도구
    • docker-compose.yml 파일을 이용해 웹 서버, 데이터베이스, 캐시 서버 등을 한꺼번에 실행 가능

     
     
     


    💎 Docker의 장점

     

    1️⃣ 환경 일관성 유지

    • 개발 환경, 테스트 환경, 배포 환경이 모두 동일하게 유지됨 (더 이상 “내 로컬에서는 잘 되는데?” 없음!)
    • 개발자가 코드를 실행하는 환경과 실제 서버 환경이 동일하므로 예측 가능한 동작 가능

     

    2️⃣ 가벼운 컨테이너 (vs 가상 머신)

    • 가상 머신(VM)은 각각 별도의 OS를 설치해야 하지만, Docker 컨테이너는 호스트 OS의 커널을 공유하기 때문에 훨씬 가볍고 빠름
    • VM보다 메모리 사용량이 적고, 실행 속도가 빠름

     

    3️⃣ 빠른 배포 및 확장

    • 컨테이너 기반의 애플리케이션을 손쉽게 복사하고 여러 서버에서 실행 가능
    • 마이크로서비스 아키텍처(MSA)와 궁합이 잘 맞음

     

    4️⃣ 의존성 문제 해결

    • 특정 애플리케이션이 요구하는 라이브러리, 패키지, 설정 값을 컨테이너 안에서 완전히 독립적으로 유지 가능
    • 예: Python 3.7 기반 프로젝트와 Python 3.9 기반 프로젝트를 동시에 실행 가능

     

    5️⃣ 다양한 운영 체제 지원

    • Docker 이미지를 만들면 Linux, Windows, Mac 어디에서든 실행 가능
    • 클라우드, 로컬, 서버 어디서든 배포 가능

     
     
     


    ⚠️ Docker의 단점

     

    1️⃣ GUI 애플리케이션 지원이 어려움

    • Docker는 CLI(Command Line Interface) 환경에서 실행되므로, GUI 기반의 프로그램 실행은 어려움

     

    2️⃣ 성능 저하 가능성

    • 네이티브 실행보다는 약간의 성능 저하가 발생할 수 있음
    • 특히 디스크 I/O, 네트워크 속도가 중요한 애플리케이션에서는 성능 문제를 고려해야 함

     

    3️⃣ 초기 학습 필요

    • Docker를 처음 접하는 개발자에게는 Dockerfile, Compose, 네트워크 설정 등이 어렵게 느껴질 수 있음
    • 컨테이너 간의 네트워크 연결, 데이터 볼륨 관리 등을 익히는 데 시간이 걸림

     
     
     


    🖥️ Docker 기본 명령어

     

    1. Docker 설치 확인

    docker --version

     

    2. Docker 컨테이너 실행

    • hello-world 컨테이너를 실행하여 정상적으로 설치되었는지 확인
    docker run hello-world

     

    3. 실행 중인 컨테이너 확인

    • 현재 실행 중인 컨테이너 목록 조회
    docker ps

     

    4. 종료된 컨테이너 포함한 전체 목록 확인

    docker ps -a

     

    5. 컨테이너 중지

    docker stop [컨테이너 ID]
    

     

    6. 컨테이너 삭제

    docker rm [컨테이너 ID]

     

    7. 모든 컨테이너 강제 삭제

    docker rm -f $(docker ps -aq)

     

    8. Docker 이미지 목록 확인

    docker images

     

    9. Docker 이미지 삭제

    docker rmi [이미지 ID]

     

    10. Docker Compose 실행

    • docker-compose.yml 파일을 기반으로 여러 개의 컨테이너를 실행
    docker-compose up -d

     

    11. Docker 컨테이너내부로 파일복사

    docker cp 로컬경로 아이디:컨테이너내부경로
    • 예시 (로컬의 run.sh파일을 컨테이너내부의 /tmp로 복사):
    $ docker ps                     # 컨테이너 아이디 확인
    CONTAINER ID   IMAGE      COMMAND                ...
    1060abab28f6   server     "bash -c 'server…"     ...
    $ docker cp run.sh 1060:/tmp    # 파일 복사
    Successfully copied 337kB to 1060:/tmp

     

     

     


    🏁 결론

    • Docker는 애플리케이션을 쉽고 빠르게 배포할 수 있도록 도와주는 컨테이너 기술입니다.
    • 가벼우면서도 환경 일관성을 유지할 수 있어 개발, 테스트, 운영 환경에서 매우 유용하게 활용됩니다.

    ✅ Docker가 필요한 경우

    • 여러 개발 환경(Windows, Mac, Linux)에서 동일한 환경을 유지해야 할 때
    • 배포 자동화를 원할 때
    • 여러 개의 애플리케이션을 컨테이너로 관리하고 싶을 때
    • 마이크로서비스 아키텍처(MSA) 기반의 애플리케이션을 구축할 때

    💡 Docker는 현대 소프트웨어 개발에서 필수적인 도구 중 하나이며, DevOps, CI/CD(지속적 통합/배포)에도 자주 사용됩니다! 🚀

     
     
     

    참고자료