클라우드기반 취약점 #2

Jh Park·2022년 10월 19일

Docker

Docker란

도커는 컨테이너 기술을 기반으로 한 일종의 가상화 플랫폼입니다. 가상화란 물리적 자원인 하드웨어를 효율적으로 활용하기 위해서 하드웨어 공간 위에 가상의 머신을 만드는 기술이고, 컨테이너란 컨테이너가 실행되고 있는 호스트 os의 기능을 그대로 사용하면서 프로세스를 격리해 독립된 환경을 만드는 기술

설치

  • Docker 환경 설치
    sudo apt update
    sudo apt install docker.io

    • Docker 실행
      sudo service docker start
    • 버전 확인
      sudo docker version
      sudo docker -v
  • 이미지 다운로드

    • hub.docker.com에서 다운로드
      • 이미지 검색
        sudo docker search nginx
        - 이미지 다운로드
        sudo docker pull nginx
        sudo docker pull ubuntu
  • docker hub에 이미지 업로드
    • docker hub에 로그인
    • 업로드
    • 확인
  • 저장된 이미지 확인
    sudo docker images
  • 컨테이너 이미지 저장
    sudo docker commit -a [컨테이너 이름] [이미지명 : 태그]

실행

  • 실행
    sudo docker run -itd -p 8888:80 --name=webapp nginx
    • 명령어 : run
    • 옵션
      • -i : 컨테이너의 표준 입력(stdin)을 활성화
      • -t : tty(가상 터미널)을 할당
      • -d : 컨테이너를 백그라운드로 실행
      • -p : 호스트와 컨테이너의 포트를 연결
        • -p [호스트 포트]:[컨테이너 포트]
      • --name : 컨테이너 이름을 지정
        • --name=[컨테이너 이름]
      • -v : 호스트와 컨테이너의 디렉토리 연결
        • -v [호스트 절대경로]:[컨테이너 절대경로]
  • 컨테이너 확인
    sudo docker ps
    sudo docker ps -a
  • 컨태이너 정보 확인
    sudo docker stats [컨테이너 이름]

  • 컨테이너 상세 확인
    sudo docker [컨테이너 ID 또는 이름]

중지

  • 중지
    sudo docker stop [컨테이너 ID 또는 이름]
    sudo docker stop webapp
    • 실행되고 있는 컨테이너 스톱
      Root계정 : docker stop $(docker ps -q -f status=running)
    • 전부 스톱
      sudo docker system prune

삭제

  • 컨테이너 삭제
    sudo docker rm [컨테이너 ID]
    sudo docker rm ba
    • 컨테이너 이름은 일부만 입력해도 된다

접속

  • 컨테이너에 접속
    sudo docker exec [컨테이너 id 또는 이름] /bin/sh
    • 도커는 경량화가 되어 명령어가 제한적이다.

네트워크

  • 네트워크 확인
  • 네트워크 생성
    • 더 세부적으로 생성도 가능
  • 해당 네트워크에 컨테이너 생성

실습

컨테이너 index.html 편집

도커는 경량화 되어 있기에 직접 컨테이너 내에서 편집보다는 편집 후 복사하는 방식과 호스트와 컨테이너의 디렉토리 연결하는 방식 등이 있다.

  1. index.html 편집 후 복사
  • 컨테이너 실행
    sudo docker run -itd -p 8888:80 --name=webapp nginx
  • index.html 생성 후 컨테이너로 파일 복사
  • 확인 (오타 주의)


  1. 호스트와 컨테이너의 디렉토리 연결
  • 연결할 디렉토리 생성
  • 컨테이너 실행
    • 해당 이미지 컨테이너의 web파일 주소: /usr/shar/nginx/html
  • 해당 디렉토리에 index.html 생성
  • 확인


로그 실습

  1. 로그 기록 호스트의 디렉토리로 연결
  • 연결할 디렉토리 생성
    sudo mkdir ngnix_log
  • 컨테이너 실행
    sudo docker run -idt -p 8080:80 -v /home/kali/ngnix_log:/var/log/nginx nginx:1.19
    • 컨테이너의 로그 주소 : /var/log/nginx
      -v /home/kali/ngnix_log:/var/log/nginx
  • 파일 확인

  1. 컨테이너 내의 로그 확인

로드밸런서(Load Balancer) 실습

  • 실행되어 있는 아파치 종료하고 nginx 설치
    sudo service apache2 stop
    sudo apt update
    sudo apt install nginx
  • LB를 실행할 컨테이너 실행
sudo docker run -itd -p 5001:80 --name=nginx_web01 -v /home/kali/web01:/usr/share/nginx/html nginx
sudo docker run -itd -p 5002:80 --name=nginx_web02 -v /home/kali/web02:/usr/share/nginx/html nginx
sudo docker run -itd -p 5003:80 --name=nginx_web03 -v /home/kali/web03:/usr/share/nginx/html nginx

  • 작동확인
  • nginx.conf 편집
    sudo vim /etc/nginx/nginx.conf
upstream backend-lb {
                server 127.0.0.1:5001;
                server 127.0.0.1:5002;
                server 127.0.0.1:5003;
        }

        server {
                listen 80 default_server;
                listen [::]:80 default_server;

                location / {
                        proxy_pass http://backend-lb;
                }

  • 정상 작동 확인

https://velog.io/@markany/%EB%8F%84%EC%BB%A4%EC%97%90-%EB%8C%80%ED%95%9C-%EC%96%B4%EB%96%A4-%EA%B2%83-1.-%EB%8F%84%EC%BB%A4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80 (도커란)
https://bio-info.tistory.com/136 (도커 옵션에 대해서)

0개의 댓글