소개
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(사용자별)
주요 개념
- Docker 데몬: Docker 객체를 관리하는 백그라운드 서비스
- Docker 클라이언트: 데몬과 상호 작용하는 CLI 도구
- 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
권장 사항
- 항상 특정 이미지 태그 사용
- 불필요한 컨테이너 및 이미지 제거
- 지속적인 데이터를 위해 볼륨 사용
- 네트워크 분리 활용
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
권장 사항
- 특정 이미지 태그 사용
- 다단계 빌드 구현
- 이미지 크기 최소화
- 복잡한 설정에 Docker Compose 사용
LabEx 는 이러한 워크플로 패턴을 연습하여 Docker 컨테이너 관리 및 배포 프로세스를 간소화할 것을 권장합니다.
요약
Docker CLI 명령어와 워크플로 패턴을 숙달함으로써 개발자는 컨테이너 관리 기술을 크게 향상시킬 수 있습니다. 이 튜토리얼은 Docker 컨테이너를 탐색, 생성, 관리 및 최적화하는 기본적인 기술을 제공하여, 현대 소프트웨어 개발 및 배포 시나리오에서 Docker 의 전체적인 잠재력을 활용할 수 있도록 지원합니다.



