Docker 설치와 기본 명령어 정리 (run, ps, logs, compose)
개발 환경과 서버 환경이 달라서 “내 컴퓨터에서는 되는데”라는 말을 해 본 적이 있다면 Docker를 써 볼 때다. Docker는 애플리케이션과 실행 환경을 컨테이너 하나로 묶어 어디서나 똑같이 실행되게 해 준다. 이 글에서는 리눅스 서버에 Docker를 설치하고, 실무에서 매일 쓰는 Docker 기본 명령어 목록과 docker compose까지 정리한다. 새 서버라면 리눅스 서버 초기 세팅 체크리스트부터 마치고 시작하자.

이미지와 컨테이너
- 이미지(image): 실행에 필요한 파일과 설정을 묶은 읽기 전용 템플릿. nginx, mysql 같은 공식 이미지를 내려받아 쓴다.
- 컨테이너(container): 이미지를 실행한 것. 같은 이미지로 여러 개를 띄울 수 있고, 지워도 이미지는 남는다.
- 볼륨(volume): 컨테이너를 지워도 남겨야 하는 데이터(DB 파일 등)를 저장하는 공간.
Docker 설치 (Ubuntu 기준)
배포판 기본 저장소의 docker.io보다 Docker 공식 저장소 버전이 최신이다. 가장 간단한 방법은 공식 설치 스크립트다. 운영 서버라면 Docker 공식 설치 문서의 저장소 등록 방식을 권장한다.
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo systemctl enable --now docker
docker --version
docker compose versionsudo 없이 쓰기
sudo usermod -aG docker $USER
# 다시 로그인해야 적용된다
newgrp docker
docker run hello-worlddocker 그룹에 속한 사용자는 사실상 root와 같은 권한을 갖는다. 신뢰하는 계정에만 추가하자.
Docker 기본 명령어 정리
| 명령어 | 설명 |
|---|---|
docker pull nginx | 이미지 내려받기 |
docker images | 내려받은 이미지 목록 |
docker run -d --name web -p 8080:80 nginx | 컨테이너를 백그라운드로 실행 |
docker ps | 실행 중인 컨테이너 목록(-a는 정지된 것까지) |
docker logs -f web | 컨테이너 로그 실시간 보기 |
docker exec -it web sh | 실행 중인 컨테이너 안으로 들어가기 |
docker stop web / docker start web | 정지 / 다시 시작 |
docker rm web | 컨테이너 삭제(정지 후) |
docker rmi nginx | 이미지 삭제 |
Docker 기본 명령어 docker run 옵션
docker run -d \
--name web \
-p 127.0.0.1:8080:80 \
-v /srv/web/html:/usr/share/nginx/html:ro \
-e TZ=Asia/Seoul \
--restart unless-stopped \
nginx:latest| 옵션 | 뜻 |
|---|---|
-d | 백그라운드 실행 |
-p 호스트:컨테이너 | 포트 연결 |
-v 호스트경로:컨테이너경로 | 디렉터리 연결(데이터 보존) |
-e KEY=값 | 환경 변수 전달 |
--restart unless-stopped | 서버 재부팅 후 자동 시작 |
방화벽을 우회하는 포트 주의
-p 8080:80처럼 쓰면 Docker가 iptables에 직접 규칙을 넣기 때문에 ufw에서 막아 둔 포트도 외부에 열린다. 외부에 직접 노출할 필요가 없다면 -p 127.0.0.1:8080:80처럼 로컬에만 묶고, 앞단의 Nginx 리버스 프록시로 연결하자. 이 문제는 리눅스 방화벽 설정 글에서도 다뤘다.
docker compose로 여러 컨테이너 관리
웹과 DB처럼 여러 컨테이너를 함께 띄울 때는 compose 파일 하나에 적어 두고 한 번에 관리한다. 아래는 워드프레스와 MySQL 예시다.
# compose.yaml
services:
db:
image: mysql:8.0
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wp
MYSQL_PASSWORD: change_me
MYSQL_ROOT_PASSWORD: change_me_root
volumes:
- db_data:/var/lib/mysql
restart: unless-stopped
wordpress:
image: wordpress:latest
depends_on:
- db
ports:
- "127.0.0.1:8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wp
WORDPRESS_DB_PASSWORD: change_me
WORDPRESS_DB_NAME: wordpress
restart: unless-stopped
volumes:
db_data:docker compose up -d # 백그라운드로 모두 시작
docker compose ps # 상태 확인
docker compose logs -f # 전체 로그
docker compose down # 정지 및 컨테이너 삭제 (볼륨은 유지)컨테이너 안 DB도 백업이 필요하다. docker compose exec db mysqldump … 형태로 mysqldump 백업을 그대로 쓸 수 있다. compose 문법은 Docker Compose 공식 문서에 있다.
Docker 기본 명령어 정리 팁: 디스크 공간 확보
Docker 외에 로그, 패키지 캐시, 백업 파일까지 함께 정리하는 방법은 리눅스 디스크 용량 부족 해결에 있다.
docker system df # 이미지, 컨테이너, 볼륨이 쓰는 용량
docker system prune # 정지된 컨테이너와 쓰지 않는 이미지 정리이미지가 쌓이면 디스크가 금방 찬다. 정기적으로 용량을 확인하고, 볼륨까지 지우는 –volumes 옵션은 데이터가 사라지니 신중하게 쓰자. 디스크 확인 방법은 df와 du 사용법에 있다.
공식 이미지를 실행하는 단계에서 내 애플리케이션 이미지 제작으로 넘어가려면 Dockerfile 작성법과 전체 실행 예제를 이어서 보자. FROM, COPY, RUN과 빌드 캐시, 멀티 스테이지 빌드를 연결해 설명했다.
첫 댓글을 남겨보세요