Docker는 애플리케이션을 컨테이너(Container) 라는 단위로 격리하여 실행할 수 있게 해주는 오픈소스 플랫폼입니다
이를 통해 개발자는 어떤 환경에서도 동일하게 동작하는 소프트웨어를 만들 수 있습니다
일관성: Docker 컨테이너는 운영체제, 라이브러리, 설정 파일 등 모든 실행 환경을 패키징합니다빠른 배포 및 확장: Docker 이미지는 버전별로 관리할 수 있어 특정 버전의 컨테이너를 빠르게 배포하거나 문제가 생겼을 때 이전 버전으로 빠르게 롤백할 수 있습니다자원 효율성: Docker는 기존의 가상 머신(VM)과 달리 호스트 OS 위에서 직접 실행되며 하이퍼바이저가 필요하지 않아 자원 사용량이 적고 실행 속도도 빠릅니다웹 서버에 대해 공부하기 위해 DVWA 웹 서버를 구축하고자 합니다
Docker를 활용하여 구축할 예정이며 방법은 아래와 같습니다
준비물: Docker Desktop, Terminal
사전 조건: Docker 회원가입 및 로그인 필수!
Window: cmd, powershell (관리자 권한 실행)
Mac: Terminal ( 관리자 권한 막히면 sudo 앞에 sudo 입력)
아래의 명령어를 통해 Docker Image에 vulnerables를 생성합니다
$ docker pull vulnerables/web-dvwa
위 사진과 같이 뜨면 성공적으로 pull이 완료된 것입니다
Docker Desktop에서 Images에 들어가면 위와 같이 추가된 것을 볼 수 있습니다
만약 위 그림같이 401 Unauthorized 에러가 나타나면 다음 명령어를 사용하도록 합니다
$ docker login -u <username>
-u: --username의 줄임말로, 로그인 시 로그인할 사용자 이름을 지정할 때 사용합니다
위 명령어를 통해 터미널에서 로그인을 합시다
이제 이미지 pull이 완료되었고 이미지를 사용할 준비가 되었습니다!
다음으로는 아래의 명령어를 통해 컨테이너를 실행해주도록 합니다
$ docker run -d -p 80:80 vulnerables/web-dvwa
-d: detached의 약자로 컨테이너가 백그라운드에서 실행이 됩니다 즉 터미널을 점유하지 않으며 터미널을 계속 사용할 수 있습니다-p 80:80: 이 부분은 포트 매핑을 해주는 것이며 다음과 같습니다
- 앞의 80: 호스트 포트로 브라우저에서 접속 시 사용할 포트입니다
- 뒤의 80: 컨테이너 포트로 Docker 컨테이너 내부에서 DVWA가 실행되는 포트입니다
그럼 Docker Desktop에서 위 사진과 같이 왼쪽에 불이 들어오는 것을 확인할 수 있습니다
또한 Containers에 들어가면 저렇게 80:80이 되어있는 것을 볼 수 있습니다
Name은 지정하지 않았기 때문에 랜덤으로 생성될 것입니다
--name <Name>
위 코드를 추가적으로 -p 앞에 넣어주면 Name 지정도 가능합니다
다음으로는 브라우저에서 입력창에 localhost:80 혹은 127.0.0.1:80을 입력하고 들어갑니다
접속 시 아래와 같은 화면이 확인 가능할 것입니다
localhost는 로컬 디바이스에서 사용되는 도메인 이름이며,127.0.0.1은 현재 기기의 로컬 IP 주소를 의미합니다

그럼 아래의 정보로 로그인을 하도록 하면 아래와 같은 사진처럼 나타납니다
Username: admin
Password: password
위 사진이 나타났으면 아래에 Create / Reset Database 버튼을 눌러줍니다
다시 로그인 창으로 돌아가 위의 정보로 재로그인 하면 아래와 같은 화면이 나타납니다

마지막으로 DVWA Security를 눌러 보안 레벨을 설정해줍시다
Low: 가장 취약한 상태이며 기본적인 악용 기법을 배우거나 학습할 수 있습니다
Medium: 잘못된 보안 관행이 적용된 상태로 사용자는 부분적으로 보안이 적용된 상태에서 발생할 수 있는 취약점을 이해하고 악용 기법을 다듬을 수 있습니다
High: 중간 보안 수준을 확장한 것으로 CTF 대회와 같은 환경에서 나타날 수 있는 더 복잡한 문제와 유사한 문제를 제공합니다
Impossible: 모든 취약점으로부터 안전한 상태이며 보안이 완벽하게 적용된 상태입니다
이제 가상 환경 구축을 완료했습니다!
작업이 끝났을 경우 Containers에 들어가 꼭 Stop을 해주도록 합시다
Start 버튼을 눌러 언제든지 웹 서버로 다시 접속이 가능합니다
알아두면 도움되는 Docker, 열심히 활용해보도록 합시다!