Docker CLI 효과적으로 사용하는 방법

DockerBeginner
지금 연습하기

소개

Docker CLI 는 개발자가 명령줄 인터페이스를 통해 Docker 컨테이너, 이미지 및 네트워크와 상호 작용할 수 있도록 하는 강력한 도구입니다. 이 포괄적인 튜토리얼에서는 필수적인 Docker CLI 기술을 안내하여 컨테이너를 효율적으로 관리 및 조작하고, 견고한 개발 환경을 구축하고, 컨테이너화 워크플로우를 최적화하는 방법을 이해하는 데 도움을 드립니다.

Docker CLI 기본 사항

Docker CLI 란 무엇인가?

Docker 명령줄 인터페이스 (CLI) 는 Docker 데몬과 상호 작용하고 컨테이너, 이미지, 네트워크 및 볼륨을 관리할 수 있는 강력한 도구입니다. 텍스트 기반 인터페이스를 제공하여 Docker 명령을 실행하고 다양한 작업을 수행합니다.

설치 및 설정

Docker CLI 를 사용하기 전에 Ubuntu 22.04 시스템에 Docker 가 설치되어 있는지 확인하십시오.

## 패키지 인덱스 업데이트
sudo apt update

## Docker 설치
sudo apt install docker.io

## 설치 확인
docker --version

기본 Docker CLI 구조

Docker CLI 명령은 표준 구문을 따릅니다.

docker <객체> <명령> <옵션>

명령 카테고리

카테고리 목적
관리 명령 Docker 객체 관리
이미지 명령 이미지 가져오기, 빌드 및 관리
컨테이너 명령 컨테이너 생성, 실행 및 제어
네트워크 명령 Docker 네트워크 구성
볼륨 명령 지속적인 데이터 저장소 관리

인증 및 권한

graph TD A[사용자] --> B{Docker CLI} B --> |sudo 필요| C[루트 권한] B --> |사용자 그룹| D[Docker 그룹 접근]

모든 명령에 sudo 를 사용하지 않으려면 사용자를 docker 그룹에 추가하십시오.

## 현재 사용자를 docker 그룹에 추가
sudo usermod -aG docker $USER

## 세션 재시작
newgrp docker

Docker CLI 구성

구성 파일은 일반적으로 다음 위치에 있습니다.

  • /etc/docker/daemon.json (전역)
  • ~/.docker/config.json (사용자별)

주요 개념

  1. Docker 데몬: Docker 객체를 관리하는 백그라운드 서비스
  2. Docker 클라이언트: 데몬과 상호 작용하는 CLI 도구
  3. Docker 객체: 이미지, 컨테이너, 네트워크, 볼륨

이러한 기본 사항을 이해함으로써 사용자는 컨테이너화 작업에 Docker CLI 를 효과적으로 활용할 수 있습니다. LabEx 는 Docker 관리에 대한 강력한 기반을 구축하기 위해 이러한 기본 명령을 연습할 것을 권장합니다.

일반적인 Docker 명령어

이미지 관리 명령어

이미지 가져오기

## Docker Hub에서 이미지 가져오기
docker pull ubuntu:latest
docker pull nginx:1.21

이미지 목록

## 모든 로컬 이미지 목록
docker images
docker image ls

이미지 빌드

## Dockerfile에서 이미지 빌드
docker build -t myapp:v1 .

컨테이너 작업

컨테이너 실행

## 새 컨테이너 실행
docker run -d --name web-server nginx
docker run -it ubuntu:latest /bin/bash

컨테이너 관리 명령어

명령어 설명 예시
docker ps 실행 중인 컨테이너 목록 docker ps
docker ps -a 모든 컨테이너 목록 docker ps -a
docker start 중지된 컨테이너 시작 docker start web-server
docker stop 실행 중인 컨테이너 중지 docker stop web-server
docker rm 컨테이너 제거 docker rm web-server

네트워크 명령어

graph TD A[Docker 네트워크 명령어] A --> B[네트워크 생성] A --> C[네트워크 목록] A --> D[네트워크 검사]

네트워크 작업

## 사용자 정의 네트워크 생성
docker network create mynetwork

## 네트워크 목록
docker network ls

## 컨테이너를 네트워크에 연결
docker network connect mynetwork web-server

볼륨 관리

## 볼륨 생성
docker volume create mydata

## 볼륨 목록
docker volume ls

## 컨테이너에 볼륨 마운트
docker run -v mydata:/app nginx

디버깅 및 검사

## 컨테이너 로그 보기
docker logs web-server

## 실행 중인 컨테이너에서 명령 실행
docker exec -it web-server bash

## 컨테이너 세부 정보 검사
docker inspect web-server

고급 명령어

정리

## 사용되지 않는 이미지 제거
docker image prune

## 중지된 모든 컨테이너 제거
docker container prune

권장 사항

  1. 항상 특정 이미지 태그 사용
  2. 불필요한 컨테이너 및 이미지 제거
  3. 지속적인 데이터를 위해 볼륨 사용
  4. 네트워크 분리 활용

LabEx 는 이러한 일반적인 Docker CLI 명령어를 숙달하여 컨테이너화된 환경을 효율적으로 관리할 것을 권장합니다.

CLI 워크플로 패턴

개발 워크플로

graph TD A[코드 개발] --> B[Docker 이미지 빌드] B --> C[컨테이너 테스트] C --> D[레지스트리에 푸시] D --> E[컨테이너 배포]

일반적인 개발 사이클

## 프로젝트 복제
git clone https://github.com/example/project

## Dockerfile 생성
touch Dockerfile

## 이미지 빌드
docker build -t myapp:dev .

## 테스트용 컨테이너 실행
docker run -d --name test-container myapp:dev

지속적 통합 워크플로

빌드 및 테스트

## 빌드 인수를 사용하여 이미지 빌드
docker build --build-arg ENV=development -t myapp:ci .

## 자동화된 테스트 실행
docker run --rm myapp:ci npm test

컨테이너 수명주기 관리

워크플로 단계

단계 Docker 명령어 목적
빌드 docker build 이미지 생성
테스트 docker run 컨테이너 유효성 검사
푸시 docker push 이미지 공유
배포 docker run 프로덕션에서 실행

다중 컨테이너 배포

Docker Compose 워크플로

## docker-compose.yml에서 서비스 정의
version: '3'
services:
web:
build: .
ports:
- "8000:80"
database:
image: postgres:latest

## 다중 컨테이너 환경 시작
docker-compose up -d

마이크로서비스 패턴

graph TD A[API 서비스] --> B[데이터베이스 서비스] A --> C[캐시 서비스] A --> D[인증 서비스]

서비스 관리

## 마이크로서비스용 네트워크 생성
docker network create microservices-net

## 네트워크 연결로 서비스 실행
docker run -d --name api --network microservices-net myapi
docker run -d --name database --network microservices-net mydb

디버깅 워크플로

문제 해결 단계

## 컨테이너 로그 검사
docker logs api-service

## 대화형 쉘 실행
docker exec -it api-service /bin/bash

## 컨테이너 리소스 사용량 확인
docker stats api-service

프로덕션 배포 워크플로

이미지 태깅 전략

## 프로덕션용 이미지 태깅
docker tag myapp:latest myregistry.com/myapp:v1.0

## 개인 레지스트리에 푸시
docker push myregistry.com/myapp:v1.0

## 프로덕션에서 풀 및 실행
docker pull myregistry.com/myapp:v1.0
docker run -d myregistry.com/myapp:v1.0

권장 사항

  1. 특정 이미지 태그 사용
  2. 다단계 빌드 구현
  3. 이미지 크기 최소화
  4. 복잡한 설정에 Docker Compose 사용

LabEx 는 이러한 워크플로 패턴을 연습하여 Docker 컨테이너 관리 및 배포 프로세스를 간소화할 것을 권장합니다.

요약

Docker CLI 명령어와 워크플로 패턴을 숙달함으로써 개발자는 컨테이너 관리 기술을 크게 향상시킬 수 있습니다. 이 튜토리얼은 Docker 컨테이너를 탐색, 생성, 관리 및 최적화하는 기본적인 기술을 제공하여, 현대 소프트웨어 개발 및 배포 시나리오에서 Docker 의 전체적인 잠재력을 활용할 수 있도록 지원합니다.