본문 바로가기
해킹 기초지식

도커(Docker)와 명령어

by whiteTommy 2023. 11. 20.

도커

컨테이너를 만들고, 실행하고, 배포할 수 있는 가상화 플랫폼이다. 여기서 컨테이너는 가상의 환경이 구축되어 있는 하나의 박스를 말한다.

 

virtual machine으로 하나의 OS 위에 다른 OS 환경을 구축하는 것과 유사한 개념이지만, 도커 컨테이너는 새로운 OS 환경을 구축할 필요 없이 하나의 분리된 프로세스처럼 작동하여 가볍다.

 

  • 도커 이미지(Docket Image) : 도커 컨테이너의 전 단계, 컨테이너를 생성하고 실행하기 위한 모든 것이다. 예를 들어 컨테이너 생성에 필요한 파일, 환경 변수, 명령어 등과 파일 시스템 등이 있다. 직접 본인만의 이미지를 만들거나 다른 사람이 만든 이미지를 사용할 수 있다.
    • 생성법 : Dockerfile 을 작성하고 빌드한다. 여기서, 태그(Tag)를 붙일 수 있다.
  • 도커 컨테이너(Docket Container): 도커 이미지로부터 만들어진 실행 가능한 인스턴스이다. 즉, 실행 중인 이미지이다. 도커 이미지와 사용자가 컨테이너를 시작할 때 작성하는 옵션에 의해 정의된다. 분리된 파일 시스템을 사용한다.
  • 도커 레지스트리(Docker Registry) : 도커 이미지를 저장하는 저장소이다. 

 

그렇다면, 해킹에서 도커를 쓰는 이유는 무엇일까?

 

도커가 없으면 VirtualBox 또는 VMware와 같은 virtual machine 을 설치하여 직접 문제 환경을 구축해야 한다. 설치 시간도 오래 걸리고, 용량이 무겁기 때문에 가벼운 도커를 사용한다. 서버에서 여러 문제를 제공하면 공격 과정에서 다른 문제에 영향을 미칠 수 있는데, 도커는 분리된 환경을 제공하기 때문에 이를 막을 수 있다.

 

또한, CTF(cature the flag) 또는 wargame 문제에 Dockerfile이 제공되는 경우가 있다. 이때, Dockerfile을 빌드하고 컨테이너를 실행하면 문제 환경을 똑같이 재현하여 풀 수 있다. 정교한 공격을 위해 똑같은 환경에서 바이너리를 디버깅하여 익스플로잇 하는 것이 중요하다. 

 

 

 도커 명령어

1. docker build 

도커 컨테이너를 실행하기 전에 도커 이미지를 생성하기 위해서는 Dockerfile 을 build 하는 과정이 필요하다고 하였다. 다음과 같이 Dockerfile을 이용하여 이미지를 생성한다.

  • docker build [옵션] [Dockerfile 경로]
  • docker build -t  [이미지명 : 태그]  [Dockerfile 경로]

여기서, -t 옵션으로 이미지의 이름과 태그를 지정할 수 있다. 태그 디폴트값은 'latest' 이다.

 

 2. docker images

: 도커 이미지 목록을 출력한다.

user@user-VirtualBox:~/Desktop/ex-docker$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
<none>       <none>    9d201c4de2b6   2 minutes ago   122MB
user@user-VirtualBox:~/Desktop/ex-docker$ docker build -t my-image:1 .
[+] Building 0.8s (17/17) FINISHED                                              
 => ...생략...
 => exporting to image                                                     0.0s
 => => exporting layers                                                    0.0s
 => => writing image sha256:9d201c4de2b62519383058265e31669b167c422502643  0.0s
 => => naming to docker.io/library/my-image:1                              0.0s
user@user-VirtualBox:~/Desktop/ex-docker$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
my-image     1         9d201c4de2b6   4 minutes ago   122MB

 

 3. docker run

: 도커 이미지로 컨테이너를 생성하고 실행한다.

  • docker run [옵션]  [이미지명 | ID ]  [명령어]
  • docker run -p  [호스트 PORT] : [컨테이너 PORT]  [이미지명 | ID]
  • docker run -it  [이미지명 | ID]  [명령어]

-p 옵션은 도커 컨테이너의 포트와 호스트의 포트를 매핑한다.

-it 옵션으로 컨테이너에서 bash 셸을 사용할 수 있다. -i (--interactive)는 표준 입력을 활성화하여 사용자가 명령어를 입력할 수 있도록 하고, -t  (--tty)는 가상 터미널(tty)을 사용할 수 있도록 한다.

 

 4. docker ps 

: 실행 중인 컨테이너 목록을 출력한다.

  • docker ps -a : 종료된 컨테이너까지 모두 출력한다.

 

5. docker create

:  도커 이미지로 컨테이너를 생성한다. 

 docker create [옵션]  [이미지명 | ID ]  [명령어]

 

 

6. docker start

: 중단된 컨테이너를 시작한다.

docker start [옵션] [컨테이너명 | ID]

 

 

7. docker exec 

: 실행 중인 컨테이너에 접속하여 명령을 수행한다.

docker exec [옵션]  [컨테이너명| ID] [명령어]
  • docker exec -it [컨테이너명|  ID] / bin / bash : 실행 중인 컨테이너에서 bash 셸 열기

8. docker stop

: 실행 중인 컨테이너를 중단한다. 

docker stop [옵션] [컨테이너명 | ID]

 

9. docker pull

레지스트리(Docker Hub)에 존재하는 도커 이미지를 다운로드한다.

docker pull [옵션] [이미지명]

 

10. docker rm

: 도커 컨테이너를 삭제한다.

docker rm [옵션] [컨테이너명 | ID]

 

11. docker rmi

: 도커 이미지를 삭제한다.

docker rmi [옵션] [이미지명 | ID]

 

12. docker inspect

: 도커 이미지 혹은 컨테이너의 자세한 정보를 출력한다.

docker inspect [옵션]  [이미지 혹은 컨테이너 명 | ID]