이미지(Image) 다운로드 / 조회 / 삭제
컨테이너를 실행시키기 위해서는 이미지가 필요하다. 최신 버전의 이미지를 다운 받는 명령어는 아래와 같다.
# docker pull 이미지명
$ docker pull nginx # docker pull nginx:latest와 동일하게 작동
docker image ls
를 통해 이미지가 다운 받아졌는지를 조회할 수 있다.
그렇다면 과연 이러한 이미지는 어디서 다운 받아진 것일까? 이미지를 다운로드 할 때 Dockerhub에서 이미지를 다운 받는다. Dockerhub은 Github처럼 이미지를 저장 및 다운 받을 수 있는 저장소 역할을 하고 있다.
# docker pull 이미지명:태그명
$ docker pull nginx:stable-perl
이러한 이미지는 버전별로 접근 가능한데 이 특정 버전을 나타내는 이름을 태그명이라고 한다. 태그명을 통해 특정 버전의 이미지를 다운할 수 있다. 태그명을 붙이지 않으면 디폴트로 latest
가 붙는다.
다운한 이미지는 아래 명령어를 통해 삭제할 수 있다.
$ docker image rm [이미지 ID 또는 이미지명]
이미지 ID
를 입력해도 일부만 입력해도 삭제 가능(그 일부를 가지고 있는 이미지가 하나일 경우에만 해당)- 컨테이너에서 사용하고 있지 않아야 삭제 가능
중단된 컨테이너에서 사용하고 있는 이미지는 docker image rm -f [이미지 ID 또는 이미지명]
으로 강제 삭제할 수 있다. 실행 중인 컨테이너에서 사용하고 있다면 강제로 삭제하는 것 역시 불가능하다. 해당 이미지를 삭제하고 싶다면 컨테이너 중단 후 삭제해야 한다.
전체 이미지 삭제는 아래와 같이 진행한다.
# 컨테이너에서 사용하고 있지 않은 이미지만 전체 삭제
$ docker image rm $(docker images -q)
# 컨테이너에서 사용하고 있는 이미지를 포함해서 전체 이미지 삭제
$ docker image rm -f $(docker images -q)
컨테이너(Container) 생성 / 실행
컨테이너 생성
이미지를 바탕으로 컨테이너를 생성하는 명령어로, 실행은 하지 않기 때문에 잘 사용하지 않는다
# docker create 이미지명[:태그명]
$ docker create nginx
$ docker ps -a # 모든 컨테이너 조회
만약 로컬 환경에 다운 받은 이미지가 없다면 Dockerhub으로부터 이미지를 다운(docker pull
)받아서 컨테이너를 생성한다.
컨테이너 실행
정지되어 있는 컨테이너를 실행한다. create를 쓸 일이 별로 없으므로 이것도 잘 사용하지 않는다.
# docker start 컨테이너명[또는 컨테이너 ID]
$ docker start 컨테이너명[또는 컨테이너 ID]
$ docker ps # 실행중인 컨테이너 조회
# Nginx 컨테이너 중단 후 삭제하기
$ docker ps # 실행 중인 컨테이너 조회
$ docker stop {nginx를 실행시킨 Contnainer ID} # 컨테이너 중단
$ docker rm {nginx를 실행시킨 Contnainer ID} # 컨테이너 삭제
$ docker image rm nginx # Nginx 이미지 삭제
컨테이너 생성 + 실행
이미지를 바탕으로 컨테이너를 생성한 뒤 실행까지 하는 명령어로, 이 명령어를 가장 많이 사용한다.
# docker run 이미지명[:태그명]
$ docker run nginx # 포그라운드에서 실행 (추가적인 명령어 조작을 할 수가 없음)
# Ctrl + C로 종료할 수 있음
만약 백그라운드로 실행시키고 싶다면 아래와 같이 사용한다. 백그라운드로 실행하게 되면 프로그램의 실행 정보를 실시간으로 확인할 수는 없지만 다른 명령어를 추가로 입력할 수 있고, 새로운 프로그램을 조작할 수도 있다.
# docker run -d 이미지명[:태그명]
$ docker run -d nginx
# Nginx 컨테이너 중단 후 삭제하기
$ docker ps # 실행 중인 컨테이너 조회
$ docker stop {nginx를 실행시킨 Contnainer ID} # 컨테이너 중단
$ docker rm {nginx를 실행시킨 Contnainer ID} # 컨테이너 삭제
$ docker image rm nginx # Nginx 이미지 삭제
컨테이너에 이름을 붙일 수도 있다.
# docker run -d --name [컨테이너 이름] 이미지명[:태그명]
$ docker run -d --name my-web-server nginx
# Nginx 컨테이너 중단 후 삭제하기
$ docker ps # 실행 중인 컨테이너 조회
$ docker stop {nginx를 실행시킨 Contnainer ID} # 컨테이너 중단
$ docker rm {nginx를 실행시킨 Contnainer ID} # 컨테이너 삭제
$ docker image rm nginx # Nginx 이미지 삭제
호스트의 포트와 컨테이너의 포트를 연결하고 싶다면 아래와 같이 한다.
# docker run -d -p [호스트 포트]:[컨테이너 포트] 이미지명[:태그명]
$ docker run -d -p 4000:80 nginx # localhost:4000에서 확인 가능
컨테이너 환경은 독립적이므로 호스트 컴퓨터의 네트워크와 컨테이너의 네트워크는 분리되어 있다. 따라서 그냥 실행시켰을 때 외부에서 접근이 불가능하다. 따라서 포트를 연결해주는 것이다!
컨테이너(Container) 조회 / 중지 / 삭제
컨테이너 조회
# 실행 중인 컨테이너들만 조회
$ docker ps # process status
# 모든 컨테이너 조회(작동 중인 컨테이너 + 작동을 멈춘 컨테이너)
$ docker ps -a # all
컨테이너 중지
$ docker stop 컨테이너명[또는 컨테이너 ID] # 정상종료
$ docker kill 컨테이너명[또는 컨테이너 ID] # 강제종료
컨테이너 삭제
# 중지되어 있는 컨테이너 삭제
$ docker rm 컨테이너명[또는 컨테이너 ID]
# 실행되고 있는 특정 컨테이너 삭제
$ docker rm -f 컨테이너명[또는 컨테이너 ID]
# 중지되어 있는 모든 컨테이너 삭제
$ docker rm $(docker ps -qa)
# 실행되고 있는 모든 컨테이너 삭제
$ docker rm -f $(docker ps -qa)
컨테이너(Container) 로그 조회
특정 컨테이너의 모든 로그 조회
# docker logs [컨테이너 ID 또는 컨테이너명]
$ docker run -d nginx
$ docker logs [nginx가 실행되고 있는 컨테이너 ID]
최근 로그 10줄만 조회
# dokcer logs --tail [로그 끝부터 표시할 줄 수] [컨테이너 ID 또는 컨테이너명]
$ dokcer logs --tail 10 [컨테이너 ID 또는 컨테이너명]
기존 로그 조회 + 생성되는 로그를 실시간으로 보고 싶은 경우
# docker logs -f [컨테이너 ID 또는 컨테이너명]
# Nginx의 컨테이너에 실시간으로 쌓이는 로그 확인하기
$ docker run -d -p 80:80 nginx
$ docker logs -f
기존 로그는 조회 X + 생성되는 로그를 실시간으로 보고 싶은 경우
$ docker logs --tail 0 -f [컨테이너 ID 또는 컨테이너명]
실행 중인 컨테이너 내부에 접속(exec -it)
실행 중인 컨테이너 내부에 접속하는 방법에 대해 알아보자. 호스트 컴퓨터에서는 조회 같은 걸 마음대로 할 수 있지만 호스트 컴퓨터 내부의 컨테이너에 접근하기 위해서는 다른 방법이 필요하다.(컨테이너에 특정 파일이 있는지 같은 걸 보고 싶을 수 있으므로 접근 방법 역시 필요)
# docker exec -it 컨테이너명[또는 컨테이너 ID] bash
$ docker run -d nginx
$ docker exec -it [Nginx가 실행되고 있는 컨테이너 ID] bash
$ ls # 컨테이너 내부 파일 조회
$ cd /etc/nginx
$ cat nginx.conf
- 컨테이너 내부에서 나오려면
Ctrl + D
또는exit
을 입력하면 된다. -it
:-it
옵션을 사용해야 명령어를 입력하고 결과를 확인할 수 있다.-it
옵션을 적지 않으면 명령어를 1번만 실행시키고 종료되어 버린다. 즉,-it
옵션을 적어야 계속해서 명령어를 입력할 수 있다.
'INFRA > Docker' 카테고리의 다른 글
[Docker] Docker Compose - 2 (2) | 2025.06.17 |
---|---|
[Docker] Docker Compose - 1 (4) | 2025.06.16 |
[Docker] Dockerfile (8) | 2025.06.09 |
[Docker] Docker Volume(도커 볼륨) (7) | 2025.06.04 |
[Docker] Docker 기본 개념 (2) | 2025.06.01 |