https://docs.docker.com/engine/reference/commandline/docker/
를 바탕으로 정리하는 도커 명령어입니다.
도커에서는 도커 이미지를 이용하여 컨테이너를 생성할 수 있는데,
도커 이미지를 이용하면 이미지에 설정해둔 대로 컨테이너의 구성환경을 적용할 수 있다.
Dockerfile
이든 docker-compose.yml
파일이든 명령어를 작성하는 경로는 그 파일이 있는 위치
에서다. 그렇지 않으면 명령어가 적용이 안되니 주의하자.
# -a : 모든 container 출력, -q : ID만 출력
docker ps -aq
# 컨테이너 삭제
# -f : force
docker rm -f $(docker ps -aq)
# 이미지 삭제
docker rmi -f $(docker images -aq)
# 안쓰는 네트워크 삭제
docker network prune -f
# 안쓰는 볼륨 삭제
docker volume prune -f
# 도커 프로젝트 삭제
sudo rm -rf /docker/projects
sudo rm -rf /docker/_projects
# exited 된 컨테이너 삭제
docker rm $(docker ps --filter status=exited -q)
# none 처리된 이미지들만 삭제 -> tag 없는 이미지
docker rmi $(docker images -f "dangling=true" -q)
## docker 프로그램 에러 확인
$ sudo docker -f logs [container ID]
f
: 프로그램 로그가 끝까지 출력$ sudo docker images
$ sudo docker search [이미지 이름]
# Dockerfile 있어야됨
$ sudo docker build -t [dockerID]/[이미지 이름]:[버전] [경로]
# Dockerhub registry에 등록
$ sudo docker push [dockerID]/[이미지 이름]:[버전]
# Dockerhub registry에서 image 가져옴
$ sudo docker pull [dockerID]/[이미지 이름]:[버전]
:latest
를 쓰면 최신 버전으로 받을수 있다. 안써도 암묵적으로 latest이다.$ sudo docker rmi -f [이미지 id]
-f
: 이미지 강제 삭제사용하지 않는 컨테이너, 이미지 삭제
container에서 중지 또는 삭제를 해야 image도 삭제가 된다.
# 중지된 지 1시간 이상 지난 이미지만 삭제
sudo docker container prune --filter until=1h
# 사용하지 않는(dangling) image 삭제
sudo docker image prune -a
💥Docker error : no space left on device
: 컨테이너들 용량이 도커의 용량을 초과해서 생기는 오류
# 안쓰는 파일들(실행중이 아닌 것들)을 삭제
sudo docker system prune
# 위 prune 명령어를 써도 space가 부족하면 안쓰는 images들도 삭제하자!
sudo docker rmi -f [이미지 id]
다양한 프로그램(nginx, database, WAS 등)을 컨테이너 라는 격리된 환경을 이용하여 실행시킬수 있다.
$ sudo docker start [컨테이너 id 또는 name]
$ sudo docker restart [컨테이너 id 또는 name]
Bash Shell에서 exit 또는 Ctrl + D
를 입력하면 컨테이너가 정지된다.
Ctrl + P
, Ctrl + Q
를 차례대로 입력하여 컨테이너를 정지하지 않고, 컨테이너에서 빠져나온다.
$ sudo docker ps [OPTION]
옵션
-a
: 모든 컨테이너 목록 출력# docker run [이미지 이름]
$ sudo docker run [options] image[:TAG|@DIGEST] [COMMAND] [ARG...]
예) ex) $ sudo docker run -p [외부port]:[도커port] -it --name server ubuntu:latest /bin/bash
✅run은 자동으로 pull
도 해준다.
# mysql 환경 설정 -e
sudo docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=1234 -d -p 9876:3306 mysql:8.0.22 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
# jenkins 실행 -v
sudo docker run -d -p 9090:8080 -p 50000:50000 --name=jenkinscicd -v /jenkinsDir:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock mooh2jj/myjenkins
$ sudo docker exec -it [컨테이너 id 또는 name] /bin/bash
or
$ sudo docker exec -it [컨테이너 id 또는 name] bash
: 외부에서 컨테이너 진입할 때 사용한다.
$ sudo docker attach [컨테이너 id 또는 name]
: container 실행시 사용한다.
$ sudo docker inspect [컨테이너 id 또는 name]
: 보통 container ip주소를 확인할 때 많이 사용한다.
$ sudo docker stop [컨테이너 id 또는 name]
$ sudo docker rm -f [컨테이너 id 또는 name]
# 아예 실행되는 것을 가져올 수 있음
$ sudo docker rm -f $(sudo docker ps -aq)
docker-compose ps
# build + run
docker-compose up -d
# Dockerfile 이미지까지 build + run
docker-compose up -d --build
# build한 image + container 삭제
docker-compose down
# build + run 했던 list
docker-compose ls (x)
docker compose ls (o)
docker-compose images
docker-compose -f logs