728x90

명령어 사용법 

* docker 를 사용을 위해  설치 부터 시작 해야한다

1. 우분투 시스템 패키지 업데이트
sudo apt-get update
2. 필요한 패키지 설치
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
 
3. Docker의 공식 GPG키를 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
 
4. Docker의 공식 apt 저장소를 추가
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
 
5. 시스템 패키지 업데이트
sudo apt-get update
6. Docker 설치
sudo apt-get install docker-ce docker-ce-cli containerd.io
 
7. Docker가 설치 확인
7-1 도커 실행상태 확인
sudo systemctl status docker
7-2 도커 실행
sudo docker run hello-world

 

 

 

1. Docker 이미지 (Image) 관리

  • docker images: 로컬 시스템에 저장된 Docker 이미지 목록을 보여줍니다.
    • 옵션:
      • -a 또는 --all: 중간 레이어 이미지까지 모두 표시합니다.
      • -q 또는 --quiet: 이미지 ID만 표시합니다.
      • --filter <key>=<value>: 특정 조건에 맞는 이미지만 필터링합니다 (예: --filter "label=com.example.version=1.0").
      • --format <template>: 원하는 형식으로 출력합니다 (Go template 사용).
  • docker search <term>: Docker Hub에서 특정 키워드로 이미지를 검색합니다.
    • 옵션:
      • --limit <count>: 검색 결과 개수를 제한합니다.
      • --filter <key>=<value>: 검색 결과를 필터링합니다 (예: --filter is-official=true).
  • docker pull <image_name>[:<tag>]: Docker Hub 또는 설정된 레지스트리에서 이미지를 다운로드합니다. 태그를 지정하지 않으면 latest 태그가 기본으로 사용됩니다.
  • docker push <image_name>[:<tag>]: 로컬 이미지를 Docker Hub 또는 설정된 레지스트리에 업로드합니다.
  • docker rmi <image_id_or_name> [...]: 로컬 이미지를 삭제합니다. 실행 중인 컨테이너에서 사용 중인 이미지는 삭제할 수 없습니다.
    • 옵션:
      • -f 또는 --force: 실행 중인 컨테이너가 있더라도 강제로 삭제합니다 (주의해서 사용).
      • --no-prune: 태그가 없는 (dangling) 이미지는 삭제하지 않습니다.

2. Docker 컨테이너 (Container) 관리

  • docker ps: 현재 실행 중인 컨테이너 목록을 보여줍니다.
    • 옵션:
      • -a 또는 --all: 모든 컨테이너 (실행 중, 중지됨)를 표시합니다.
      • -q 또는 --quiet: 컨테이너 ID만 표시합니다.
      • --filter <key>=<value>: 특정 조건에 맞는 컨테이너만 필터링합니다 (예: --filter "status=running").
      • --format <template>: 원하는 형식으로 출력합니다.
      • -n <last>: 최근 생성된 n개의 컨테이너만 표시합니다.
  • docker run [OPTIONS] <image_name>[:<tag>] [COMMAND] [ARG...]: 새로운 컨테이너를 생성하고 실행합니다.
    • 주요 옵션:
      • -d 또는 --detach: 백그라운드에서 컨테이너를 실행합니다.
      • --name <container_name>: 컨테이너 이름을 지정합니다.
      • -p <host_port>:<container_port>: 호스트와 컨테이너의 포트를 연결합니다 (포트 포워딩).
      • -v <host_path>:<container_path>[:<options>]: 호스트 디렉토리 또는 명명된 볼륨을 컨테이너에 마운트합니다 (데이터 영속성). 옵션으로는 ro (읽기 전용), rw (읽기/쓰기) 등이 있습니다.
      • -e <VARIABLE>=<value>: 컨테이너 내 환경 변수를 설정합니다.
      • --env-file <path>: 환경 변수 파일에서 환경 변수를 설정합니다.
      • --link <container_name>[:<alias>]: 다른 컨테이너와 링크합니다 (레거시 기능, 네트워크 사용 권장).
      • --network <network_name>: 컨테이너를 특정 네트워크에 연결합니다.
      • --rm: 컨테이너가 종료되면 자동으로 삭제합니다.
      • --restart <policy>: 컨테이너 종료 시 재시작 정책을 설정합니다 (no, on-failure, always, unless-stopped).
  • docker start <container_id_or_name> [...]: 중지된 컨테이너를 다시 시작합니다.
  • docker stop <container_id_or_name> [...]: 실행 중인 컨테이너를 정상적으로 종료합니다 (SIGTERM 후 유예 시간 후 SIGKILL).
  • docker kill <container_id_or_name> [...]: 실행 중인 컨테이너를 강제로 종료합니다 (SIGKILL).
  • docker restart <container_id_or_name> [...]: 실행 중인 컨테이너를 재시작합니다 (stop 후 start).
  • docker rm <container_id_or_name> [...]: 중지된 컨테이너를 삭제합니다. 실행 중인 컨테이너는 삭제할 수 없습니다.
    • 옵션:
      • -f 또는 --force: 실행 중인 컨테이너를 강제로 종료 후 삭제합니다 (주의해서 사용).
  • docker logs <container_id_or_name>: 컨테이너의 로그를 확인합니다.
    • 옵션:
      • -f 또는 --follow: 실시간으로 로그를 따라갑니다.
      • --since <time>: 특정 시간 이후의 로그만 표시합니다.
      • --until <time>: 특정 시간 이전의 로그만 표시합니다.
      • --tail <n>: 마지막 n개의 로그 라인만 표시합니다.
  • docker exec [OPTIONS] <container_id_or_name> <COMMAND> [ARG...]: 실행 중인 컨테이너 내부에서 명령을 실행합니다.
    • 옵션:
      • -it: 터미널을 할당하고 상호 작용 모드로 실행합니다 (쉘 접속 시 유용).
      • -u <user>: 특정 사용자로 명령을 실행합니다.
  • docker stats [<container_id_or_name>...]: 실행 중인 컨테이너의 자원 사용량 (CPU, 메모리, 네트워크 I/O 등)을 실시간으로 보여줍니다.
    • 옵션:
      • --no-stream: 한 번만 통계를 표시하고 종료합니다.
  • docker top <container_id_or_name>: 실행 중인 컨테이너 내부의 프로세스를 보여줍니다.
  • docker diff <container_id_or_name>: 컨테이너의 파일 시스템 변경 사항을 보여줍니다.

3. Docker 네트워크 (Network) 관리

  • docker network ls: Docker 네트워크 목록을 보여줍니다.
  • docker network create [OPTIONS] <network_name>: 새로운 Docker 네트워크를 생성합니다.
    • 주요 옵션:
      • -d 또는 --driver <driver>: 네트워크 드라이버를 지정합니다 (bridge, host, overlay 등). 기본은 bridge입니다.
      • --subnet <subnet>: 서브넷을 지정합니다.
      • --gateway <gateway>: 게이트웨이를 지정합니다.
  • docker network connect <network_name> <container_id_or_name>: 실행 중인 컨테이너를 네트워크에 연결합니다.
  • docker network disconnect <network_name> <container_id_or_name>: 컨테이너를 네트워크에서 분리합니다.
  • docker network inspect <network_id_or_name>: Docker 네트워크의 상세 정보를 확인합니다.
  • docker network rm <network_id_or_name> [...]: Docker 네트워크를 삭제합니다. 사용 중인 네트워크는 삭제할 수 없습니다.

4. Docker 볼륨 (Volume) 관리

  • docker volume ls: Docker 볼륨 목록을 보여줍니다.
  • docker volume create [OPTIONS] [<volume_name>]: 새로운 Docker 볼륨을 생성합니다.
    • 주요 옵션:
      • -d 또는 --driver <driver>: 볼륨 드라이버를 지정합니다 (local 등).
      • --opt <key>=<value>: 드라이버별 옵션을 설정합니다.
  • docker volume inspect <volume_name>: Docker 볼륨의 상세 정보를 확인합니다.
  • docker volume rm <volume_name> [...]: Docker 볼륨을 삭제합니다. 사용 중인 볼륨은 삭제할 수 없습니다.
  • docker volume prune: 사용하지 않는 로컬 볼륨을 모두 삭제합니다.

5. Docker Compose (Compose) 관련 명령어

Docker Compose는 여러 컨테이너로 이루어진 애플리케이션을 정의하고 실행하는 도구입니다. docker-compose.yml 파일을 기반으로 동작합니다. (별도 설치 필요)

  • docker-compose up [OPTIONS] [--scale <service>=<num>...] [SERVICE...]: Compose 파일을 기반으로 서비스를 생성하고 시작합니다.
    • 옵션:
      • -d 또는 --detach: 백그라운드에서 실행합니다.
      • --build: Dockerfile이 변경되었거나 이미지가 없는 경우 이미지를 빌드합니다.
      • --force-recreate: 컨테이너를 강제로 다시 생성합니다.
      • --scale <service>=<num>: 특정 서비스의 컨테이너 개수를 조정합니다.
  • docker-compose down [OPTIONS]: Compose 파일에 정의된 모든 서비스를 중지하고 삭제합니다.
    • 옵션:
      • --rmi <type>: 관련 이미지를 삭제합니다 (all, local).
      • -v 또는 --volumes: 명명된 볼륨까지 삭제합니다.
  • docker-compose ps [OPTIONS] [SERVICE...]: Compose 파일에 정의된 서비스의 상태를 보여줍니다.
  • docker-compose logs [OPTIONS] [SERVICE...]: 서비스의 로그를 확인합니다.
    • 옵션은 docker logs와 유사합니다 (-f, --since, --tail 등).
  • docker-compose exec [OPTIONS] <service> <command> [ARGS...]: 실행 중인 서비스의 컨테이너 내부에서 명령을 실행합니다.
    • 옵션은 docker exec와 유사합니다 (-it, -u).
  • docker-compose stop [SERVICE...]: 특정 서비스 또는 모든 서비스를 중지합니다.
  • docker-compose start [SERVICE...]: 중지된 특정 서비스 또는 모든 서비스를 시작합니다.
  • docker-compose restart [SERVICE...]: 특정 서비스 또는 모든 서비스를 재시작합니다.
  • docker-compose build [OPTIONS] [SERVICE...]: Compose 파일에 정의된 이미지를 빌드합니다.
  • docker-compose pull [SERVICE...]: 서비스가 사용하는 이미지를 다운로드합니다.
  • docker-compose config [OPTIONS]: Compose 파일의 유효성을 검사하고 설정 내용을 보여줍니다.

6. 기타 유용한 명령어

  • docker info: Docker 시스템의 전반적인 정보를 보여줍니다 (컨테이너 수, 이미지 수, 커널 버전 등).
  • docker version: Docker 클라이언트 및 서버 버전을 보여줍니다.
  • docker system df: Docker 관련 디스크 사용량을 보여줍니다 (이미지, 컨테이너, 볼륨, 빌드 캐시).
  • docker system prune [OPTIONS]: 사용하지 않는 Docker 리소스 (중지된 컨테이너, 사용하지 않는 네트워크, dangling 이미지, 빌드 캐시)를 삭제하여 디스크 공간을 확보합니다.
    • 옵션:
      • -a 또는 --all: 사용하지 않는 이미지뿐만 아니라 사용하지 않는 모든 이미지를 삭제합니다.
      • --volumes: 사용하지 않는 익명 볼륨도 삭제합니다.

이 명령어들은 Docker를 사용하는 데 있어 가장 기본적인 부분이며, 익숙해질수록 Docker를 더욱 효율적으로 관리하고 활용할 수 있습니다. 필요에 따라 각 명령어의 옵션을 참고하여 사용하시면 됩니다.

 
 
 
728x90

'코드 > dev' 카테고리의 다른 글

Redis 큐와 다양한 동시성 제어 방식 정리  (1) 2025.06.24
DDL 작업 중 복제지연 원인과 해결 방안  (3) 2025.05.22
도커(Docker) 컨테이너(Container)  (1) 2025.04.21
Bastion  (0) 2025.04.13
처리율 제한 알고리즘  (0) 2025.04.04
728x90

Docker Container는 애플리케이션과 그 실행에 필요한 모든 것(코드, 라이브러리, 설정 등)을 담고 있는, 격리된 실행 환경이다.

 

도커 컨테이너는 프로세스의 라이프 사이클을 관리한다.

프로세스가 생성되고 운영되고 제거되기까지 생애주기를 관리를 하기 위해 필요한 것이 격리이다.

 

 

컨테이너 안의 프로세스는 제한된 자원내에서 제한된 사용자만 접근 가능하다. 

컨테이너는 Host OS 시스템 커널을 사용한다.

 

가상머신과 컨테이너의 차이

 

Hypervisor란 단일 물리적 머신에서 여러개의 가산 머신을 실행할 수 있게 해주는 소프트웨어이다.

 

HostOS 에서는 직접 실행하거나 컨테이너 안에서 실행되나 동일한 시스템으로 인식된다.

 

위와 같이 독립적인 파일시스템이 생성된다.

 

 

 

특징

 

 

  • 독립적인 실행 환경: 컨테이너 안에는 애플리케이션을 실행하는 데 필요한 모든 것(코드, 라이브러리, 시스템 도구, 런타임 등)이 담겨 있습니다. 마치 캡슐처럼 외부 환경과는 완전히 분리되어 있어서, 어떤 환경에서든 동일하게 실행될 수 있습니다.
  • 가볍고 빠름: 가상 머신(VM)과는 달리, 컨테이너는 운영체제(OS) 커널을 공유하기 때문에 훨씬 가볍고 빠르게 실행됩니다. 새로운 컨테이너를 시작하거나 중지하는 데 몇 초밖에 걸리지 않아요.
  • 이식성: 개발 환경에서 만든 컨테이너 이미지를 그대로 테스트 환경, 운영 환경 등 어떤 Docker 환경에서도 실행할 수 있습니다. 마치 포장된 제품처럼 어디든 쉽게 옮겨갈 수 있죠.
  • 확장성: 필요에 따라 컨테이너를 쉽게 복제하고 확장할 수 있습니다. 트래픽이 증가하면 컨테이너 수를 늘리고, 줄어들면 줄이는 방식으로 유연하게 대처할 수 있습니다.
  • 자원 효율성: 하나의 호스트 OS 위에서 여러 개의 컨테이너가 독립적으로 실행되므로, 시스템 자원을 효율적으로 사용할 수 있습니다.

 

 

사용하는 이유 

  • 개발과 배포의 일관성 유지: 개발 환경과 운영 환경의 차이로 인해 발생하는 문제를 줄여줍니다.
  • 빠른 배포 및 롤백: 애플리케이션 배포와 이전 버전으로의 롤백이 간편하고 빠르게 이루어집니다.
  • 애플리케이션 격리 및 보안 강화: 각 컨테이너는 독립적으로 실행되므로, 하나의 컨테이너에 문제가 발생해도 다른 컨테이너에 영향을 주지 않습니다.
  • 마이크로서비스 아키텍처 구현 용이: 작은 기능 단위로 분리된 마이크로서비스들을 각각의 컨테이너로 관리하고 배포하기에 용이합니다.

 

도커 컨테이너 네트워크

컨테이너 생성시 독자적인 파일시스템이 생성되는데  컨테이너 안에 맥 주소와 IP 주소가 할당된다. 

 

도커 컨테이너 실행 시 파일시스템

 

 

 

1.컨테이너를 생성하면, veth가 생성되고 컨테이너 내의 eth0과 연결됩니다.

2.컨테이너들의 veth들은 docker0를 통해 컨테이너들간에 통신이 가능합니다.

3.컨테이너는 gateway인 docker0를 거쳐 외부와 통신합니다.

 

 

컨테이너 IP를 일일이 확인하기 어렵고, 외부로 오는 요청은 Host NIC로 온다 이 2문제를 해결하기 위해 포트포워딩을 활용.

 

Host OS의 80 포트번호를 사용하는 소켓 파일과 컨테이너 내의 80 포트번호를 사용하는 소켓 파일을 연결.

728x90

'코드 > dev' 카테고리의 다른 글

DDL 작업 중 복제지연 원인과 해결 방안  (3) 2025.05.22
도커(Docker) 명령어  (0) 2025.04.22
Bastion  (0) 2025.04.13
처리율 제한 알고리즘  (0) 2025.04.04
Nginx  (0) 2025.04.04

+ Recent posts