도커(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]