이 프로젝트는 Bash ShellScript 실전편 실습용으로 가상 기업 Virtual Web Service Company의 인프라 실습 환경을 Docker 기반으로 구현한 것입니다. 기존 Vagrant 환경의 복잡함을 제거하고, 누구나 쉽게 실습할 수 있도록 구성했습니다.
| 컨테이너 | 역할 | 서비스 | DMZ IP | Local IP |
|---|---|---|---|---|
| cent1 | 웹 서버 | Nginx | 172.18.1.91 | 10.18.1.91 |
| cent2 | 데이터베이스 | MariaDB 11.7 | 172.18.1.92 | 10.18.1.92 |
| cent3 | NFS 스토리지 | NFS 서버 | 172.18.1.93 | 10.18.1.93 |
각 컨테이너는 실습 편의를 위해 DMZ 영역 IP와 내부망 IP를 모두 갖고 있습니다.
- DMZ IP(172.18.x.x): 웹 브라우저 접속 등 외부 서비스용
- Local IP(10.18.x.x): 컨테이너 간 SSH, DB 접속, NFS 마운트 등에 사용
- Docker 설치 (https://www.docker.com/products/docker-desktop)
- Docker Compose 설치 (Docker Desktop을 설치하면 같이 설치됨)
- Git 설치 (https://git-scm.com)
※ 각 소프트웨어의 설치 방법은 해당 링크의 공식 문서를 참고해 주세요.
(Windows, macOS, Linux 환경 모두 지원됩니다.)
git clone https://github.com/bashbomb/vws-docker-environment.gitexport DOCKER_DEFAULT_PLATFORM=linux/amd64# 저장소를 복사한 디렉터리로 이동
cd vws-docker-environment
# 컨테이너 빌드
docker-compose builddocker-compose up -d컨테이너 별로 실행을 하려면 -d 뒤에 서버이름을 붙여주세요.
# cent1 컨테이너만 실행할 경우
docker-compose up -d cent1컨테이너가 정상적으로 기동되었는지 확인하려면 다음 명령어를 사용하세요:
docker ps -a정상적으로 실행되면 아래와 같이 cent1, cent2, cent3 컨테이너가 모두 Up 상태로 표시됩니다.
CONTAINER ID IMAGE COMMAND ... STATUS NAMES
abc123456789 vws-cent1:latest "/init.sh" ... Up xx minutes cent1
def987654321 vws-cent2:latest "/init.sh" ... Up xx minutes cent2
ghi456789abc vws-cent3:latest "/init.sh" ... Up xx minutes cent3❗ 만약 STATUS가 Up이 아니라 Exited로 보이면 해당 컨테이너의 이름을 사용해 로그를 확인해보세요:
# cent1의 STATUS가 Exited일 경우
docker logs cent1# 웹 서버에 접속
docker exec -it cent1 bash
# DB 서버에 접속
docker exec -it cent2 bash
# 스토리지 서버에 접속
docker exec -it cent3 bash각 컨테이너에는 /root/.ssh/config와 키 파일이 미리 설정되어 있어
컨테이너 내부에서 이름(cent1, cent2, cent3)만으로 SSH 접속이 가능합니다.
예시:
# cent2 또는 cent3에서 cent1에 접속
ssh cent1
# cent1, 3에서 cent2에 접속
ssh cent2
# cent1, 2에서 cent3에 접속
ssh cent3 - 브라우저에서 접속: http://localhost
- cent1 컨테이너의
/usr/share/nginx/html디렉터리에 있는 웹소스가 서비스됩니다. - 기본적으로
index.html파일이 포함되어 있으며, 실습 시 자유롭게 수정 가능합니다.
- 컨테이너 간 SSH 통신 (
ssh cent2,ssh cent3) - MariaDB 접속 및 데이터베이스 테스트 (
mysql -uroot) - NFS 서버에서 export, 다른 서버에서 mount (
mount /mnt) - 웹서버 기본 페이지 확인
- 시스템 부하 테스트 (
stress), 기본 커맨드 (ps,netstat,tree등)
- Apple Silicon은 ARM 기반으로, x86 컨테이너는 Rosetta 2로 에뮬레이션됩니다.
- 이 때문에 프로세스명이 실제 서비스가 아닌
/run/rosetta/rosetta로 표시될 수 있습니다. - nginx, sshd, mariadb 등은 실제로 정상 실행되고 있으니 무시하셔도 됩니다.
docker-compose downdocker-compose down -v --remove-orphansdocker-compose build --no-cache본 프로젝트는 CC BY-NC 4.0 라이선스에 따라 제공되며, 비영리 용도로 자유롭게 사용 가능합니다. 자세한 내용은 LICENSE 파일을 확인해주세요.