도커(Docker) 명령어 정리

1. Ubuntu 환경 Docker 최신 설치 방법

# 1. 필수 패키지 업데이트 및 설치
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release

# 2. Docker 공식 GPG 키 추가 (최신 keyrings 방식)
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL [https://download.docker.com/linux/ubuntu/gpg](https://download.docker.com/linux/ubuntu/gpg) | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 3. Docker 레포지토리 설정
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] [https://download.docker.com/linux/ubuntu](https://download.docker.com/linux/ubuntu) \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 4. Docker 엔진 설치
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

권한 추가 및 편의 기능

# sudo 없이 docker 명령어를 사용하기 위해 현재 계정을 docker 그룹에 추가
sudo usermod -aG docker $USER

# 도커 서비스 재시작
sudo systemctl restart docker.service

# (재부팅 또는 로그아웃 후 다시 로그인해야 권한이 적용됩니다)

# 도커 명령어 자동완성 기능 설치
sudo apt install bash-completion

2. 도커 컨테이너 실행 및 관리

기본 실행 (Run) 옵션

docker run -d --name my_container -p 8080:80 -v /host_data:/container_data nginx
옵션 설명
-d Detached mode (백그라운드에서 컨테이너 실행)
-p 포트 포워딩 [호스트포트]:[컨테이너포트]
-v 볼륨 마운트 [호스트경로]:[컨테이너경로] (작업 환경은 컨테이너에, 데이터는 호스트에 저장)
-e 컨테이너 내에서 사용할 환경변수 설정
--name 컨테이너 이름 설정
--rm 프로세스 종료 시 컨테이너 자동 제거 (일회용 컨테이너에 유용)
-it 터미널 입력을 위한 옵션 (i: 상호입출력, t: tty 활성화)
--restart=always 서버 재부팅 시 컨테이너 자동 시작
--gpus all 호스트의 모든 GPU 사용 (nvidia-container-toolkit 설치 필수)
--shm-size=8g 컨테이너의 공유 메모리 크기 지정 (딥러닝 학습 시 필수)
--link (Deprecated) 컨테이너 간 연결. (현재는 docker network 사용을 권장합니다)

컨테이너 이름 변경

docker rename [기존이름] [새이름]

3. 이미지 저장 및 백업 (Save / Load / Commit)

컨테이너 상태를 이미지로 굽기 (Commit)

docker commit {컨테이너_이름} {생성할_이미지_이름}

이미지를 압축 파일(tar)로 저장 (Save)

docker save {이미지_이름} -o {저장할_파일명.tar}

압축 파일(tar)을 도커 이미지로 불러오기 (Load)

docker load -i {파일명.tar}

4. Dockerfile 기본 문법

Dockerfile이 있는 경로에서 빌드 명령어를 실행합니다. .dockerignore 파일을 활용하면 빌드 시 불필요한 파일이 데몬으로 전송되는 것을 막아 속도를 높일 수 있습니다.

docker build -t {생성할_이미지명} -f {Dockerfile_이름} .
명령어 설명
FROM 베이스로 사용할 이미지 지정
LABEL 이미지 메타데이터 설정 (기존 MAINTAINER를 대체함)
RUN 빌드 과정에서 실행할 리눅스 명령어 (apt install 등)
EXPOSE 컨테이너가 사용할 포트 명시 (실제 포트 개방은 run 옵션에서 함)
ENV 컨테이너 내부에서 사용할 환경 변수 설정
ARG 빌드 시점(docker build)에만 사용할 변수
ADD / COPY 호스트의 파일을 컨테이너 내부로 복사
CMD 컨테이너가 시작될 때 실행할 기본 명령어
ENTRYPOINT 컨테이너 시작 시 강제로 실행할 프로세스 (CMD보다 우선)
WORKDIR 명령어(RUN, CMD 등)가 실행될 작업 디렉토리 설정
USER 명령을 실행할 사용자 계정 설정

Dockerfile 예시 (한글 언어팩 및 타임존 설정)

FROM ubuntu:20.04

# 작성자 명시 (최신 방식)
LABEL maintainer="your_email@domain.com"

EXPOSE 8080

# 언어 설정
RUN apt-get update && apt-get install -y locales
RUN locale-gen ko_KR.UTF-8
ENV LANG ko_KR.UTF-8
ENV LANGUAGE ko_KR.UTF-8
ENV LC_ALL ko_KR.UTF-8
 
# TimeZone 설정 (Seoul)
ENV TZ Asia/Seoul
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

5. 유용한 도커 활용 팁

호스트 GUI 환경을 도커에서 사용하기 (X11)

# 호스트에서 xhost 권한 허용
xhost +local:docker

# 컨테이너 실행 시 디스플레이 소켓 공유
docker run -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY ubuntu /bin/bash

도커 자원 일괄 정리 (Prune)

# 1. 중지된 컨테이너 및 이름 없는(dangling) 이미지 삭제
docker system prune -f

# 2. 어떤 컨테이너도 사용하지 않는 잉여 볼륨 삭제
docker volume prune -f

# 3. 사용하지 않는 도커 네트워크 삭제
docker network prune -f

# 4. <none> 태그를 가진 잉여 이미지 강제 일괄 삭제
docker rmi $(docker images -f "dangling=true" -q)

도커 컨테이너 포트 강제 변경

컨테이너를 지우지 않고 강제로 포트를 바꾸는 편법입니다. 설정 파일을 직접 건드리는 방식이므로 도커 데몬 구동에 에러가 발생할 수 있어 권장하지 않습니다. (가능한 한 docker run을 다시 하는 것이 안전합니다.)

# 1. 컨테이너 및 도커 서비스 중지
docker container stop [컨테이너_ID]
sudo systemctl stop docker

# 2. config 파일 수정 (ExposedPorts, Ports 변경)
sudo vi /var/lib/docker/containers/[컨테이너_ID]/config.v2.json

# 3. hostconfig 파일 수정 (PortBindings 변경)
sudo vi /var/lib/docker/containers/[컨테이너_ID]/hostconfig.json

# 4. 서비스 및 컨테이너 재시작
sudo systemctl start docker
docker start [컨테이너_ID]