1) 도커와 마이크로 서비스 이해
-도커
컨테이너 기술을 지원하는 다양한 프로젝트중에 하나로 사실상 표준으로 사용되어지고 있다. 다양한 운영체제에서 사용가능하며 애플리케이션에 국한되지 않고 의존성 및 파일 시스템까지 패키징하여 빌드, 배포, 실행을 단순화.
리눅스의 네임 스페이스와 cgroup와 같은 커널 기능을 사용하여 가능함(윈도우 불가)
-모놀리식 라이프 사이클과 마이크로 서비스 라이프 사이클 비교
모놀리식) 전부 개발 후 빌드-테스트-배포
마이크로 서비스) 각기 빌드-테스트-배포 후 조립
-마이크로 서비스의 장점
서비스 단위 고효율 저비용 Scale-Out(트래픽 관리기술) 구조
서비스 단위로 스케일링이 가능하여 불필요한 서비스는 줄이고 더 많은 자원이 필요한 서비스는 확정가능.
라이브러리 종속성 문제 X
-이미지, 컨테이너, 도커와 쿠버네티스
컨테이너는 가상머신을 사용해 각 마이크로 서비스를 격리하는 기술
컨테이너는 가상머신처럼 하드웨어를 전부 구현하지 않기 때문에 매우 빠른 실행 가능
프로세스의 문제가 발생할 경우 컨테이너 전체를 조정하기 때문에 컨테이너에 하나의 프로세스를 실행하도록 하는 것이 좋다.
-VM과 컨테이너 사용시 CPU 사용량 차이는 컨테이너가 확연히 적다.
-컨테이너 격리
리눅스 네임 스페이스
: 각 프로세스가 파일 시스템 마운트, 네트워크, 유저, 호스트 네임 등에 대해 시스템에 독립 뷰를 제공.
리눅스 컨트롤 그룹
: 프로세스로 소비할 수 있는 리소스 양(CPU, 메모리, I/O, 네트워크 대역대, device 노드 등)을 제한 가능.
2) 도커 레지스트리
도커 레지스트리에는 사용자가 사용할 수 있도록 데이터 베이스를 통해 이미지를 제공.
누구나 이미지를 만들어 푸시할 수 있으며 푸시된 이미지는 다른사람에게 공유 가능.
3) 도커 환경 설정
*실습은 리눅스 내 가상 환경이면 가능(칼리 - 우분투 - 데비안 등등)
우분투)
sudo apt-get update
sudo apt install docker.io (4:22 문제시)
sudo docker
sudo docker version
sudo docker system info
sudo docker system df
sudo docker pull nginx (docker hub내에서 다운)
sudo docker images
sudo docker system df
도커 허브 가입/ 오피셜임을 확인하고 다운할 것.
sudo docker search nginx
sudo docker search --filter=stars=1000 nginx
sudo docker search --limit=0 nginx
sudo docker images
sudo docker container run --name nginx_web -d -p 80:80 nginx //-d 설치 백그라운드 -p 포트 80
sudo docker ps
sudo ip addr 두번째 33
인터넷 열어 외부 접속 시도
sudo docker image inspect nginx
도커 설정파일 위치 확인 /var/lib/docker/containers
sudo docker container stats nginx_web
sudo docker ps
sudo docker stop nginx_web
sudo docker ps
sudo docker start nginx_web
4) 도커 컨테이너 두개 동작 및 활용
docker pull: 도커 이미지 다운로드
docker start: 컨테이너 인스턴스를 시작
docker run: 다운+시작
docker stop / docker restart
docker inspect: 컨테이너 상태에 대한 자세한 정보를 표시
docker attach: 사용자가 실행 중인 Docker 컨테이너 인스턴스의 기본 프로세스에 대한 엑세스 권한을 얻거나 연결
docker exec: 실행중인 컨테이너 내에서 명령을 실행합니다.
docker rm: 중지 된 컨테이너를 삭제
docker rmi: 컨테이너 이미지를 삭제
sudo docker exec -it nginx_web /bin/bash
cd /var/
cd /var/log/
cd /var/log/nginx/
ls -al
exit
sudo docker run -i -t -d --name ubuntn01 ubuntu:18.04
sudo docker ps
sudo docker run -i -t -d --name ubuntn02 ubuntu:18.04
sudo docker ps
sudo docker exec -it ubuntu01 /bin/bash
ls
cd tmp/
cat > test01.txt
ls
exit
sudo docker ps
sudo docker exec -it ubuntu01 cat /tmp/test01.txt
sudo docker exec -it ubuntu02 /bin/bash
cd tmp/
cat > test02.txt
exit
sudo docker exec -it ubuntu02 cat /tmp/test02.txt
(resize 에러 종종 뜸)
sudo docker stop ubuntu01
sudo docker stop ubuntu02
sudo docker rm ubuntu01
sudo docker rm ubuntu02
sudo docker ps
sudo docker images
sudo docker rmi [imageID]
sudo docker images -all
(가끔 불필요한 이미지 자동 다운로드 됨.)
5) 도커 파일
도커 컨테이너 이미지에서 작동시킬 컨테이너의 구성 정보를 기술한 파일
공개된 도커이지를 바탕으로 컨테이너를 생성 -> OS 생성, 미들웨어 설치, 파라미터의 설정, 자동 구축된 컨테이너 이미지를 기반으로 생성
#도커파일에 포함되는 내용
베이스가 되는 도커 이미지 정보, 수행되는 명령어, 환경변수 설정, 컨테이너 안에서 작동시켜둘 데몬(B 프로세스) 실행 등
#도커파일 기본
FROM: 어떤 이미지를 기반으로 이미지를 생성할지 결정
베이스 이미지인 centos와 centos7 태그로 생성된 두개의 이미지가 생성
cat Dockerfile
form centos:centos7
sudo docker bulid -t centos7
sudo docker image ls
두 번째 이후로부터는 베이스 이미지를 다운로드 받지 않고 다른 태그로 설정한 이미지를 바로 생성
sudo docker bulid -t centos7_v2
sudo docker image ls
6) 도커 파일 활용
칼리 리눅스)
mk docker
cd docker/
vim Dockerfile
"FROM ubuntu:latest //허브에서 관련이미지 다운
LABEL email=admin@boanproject.com //수정한 사람 정보 기록용
CMD ["echo","Hello Dockerfile"]" :wq
원래 pull 등으로 하는데, 파일 환경을 미리 세팅하거나 웹서버를 파일안에 구축할 때 사용
도커를 넘길때, 파일로 전송 가능.
Cat Dockerfile
sudo docker bulid -t ubuntu:v1.0 .(현재 디렉토리 파일 사용)
sudo docker image list
sudo docker run ubuntu:v1.0
7) 도커 파일로 웹 서버와 빌더 구축
RUN: FROM에서 설정한 이미지 위에 스크립트 혹은 명령을 실행
COPY: 로컬 호스트에 있는 파일을 이미지에 추가
EXPOSE: 호스트와 연결할 포트 번호를 설정
CMD: 컨테이너가 시작되었을 때 스크립트 혹은 명령어 실행
우분투 실행)
sudo vim dockerfile
"FROM ubuntu:latest
RUN apt-get update && apt-get install -y -q nginx
COPY index.html /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx","-g","deamon off;"]" :wq
sudo vim index.html (저장위치확인)
"<h1> Nginx Server Test </h1>":wq
sudo docker build -t nginx_v1.0 -f Dockerfile .
sudo docker images
sudo docker ps
sudo docker run -d -p 80:80 nginx_v1.0
sudo docker ps
로컬 인터넷 확인
#golang 프로그램 환경 만들기
sudo vum Dockerfile_golang
"FROM dolang:latest
WORKDIR /myapp
COPY helloword.go .
RUN go build -o helloworld .
ENTRYPOINT["./helloworld"]" //서비스시작(run)때 프로그램 시작
sudo docker build -t go_hello:v1 -f Dockerfile_golang
----------------------------
sudo vim helloworld.go
"package main
import "fmt"
func main(){
fmt.Printin("Hello World")
}"
sudo docker images
sudo docker run -it go_hello:v1
8) 도커 파일 활용의 모범 사례
#적합한 부모 이미지 사용
-기본 이미지에 사용자 정의 파일을 설치할 경우 이미 구축된 이미지를 활용하는 방법
From Run install ~~ --> FROM openjdk //구축된 이미지 활용, 최대한 경량화된 파일로 설치
-최종 버전만에 답이 아니다. 응용 프로그램에 적합한 이미지를 선택
-최소 크기의 도커 이미지를 사용할 수 있음 //alpine(가장 경량화)
-레이어를 최소화 (명령어마다 이미지 생성 --> ~~&& 같은 명령어는 묶어 사용한다.)
-보안을 위해 루트가 아닌 사용자 권한으로 사용
9) 도커 파일 불필요한 이미지 정리
칼리)
mkdir alpine
cd alpine/
vim Dockerfile
"FROM alpine
RUN apk update
RUN apk add wget" :wq!
sudo docker build -t alpine_basic .
sudo docker images
sudo docker inspect [IMAGE ID]
sudo du -sh /var/lib/docker/overlay2/ //용량확인
sudo docker images -a
sudo su
docker rmi -f $(docker images -a -q)
docker images
10) 도커 컴포즈로 워드프레스 구축
Docker-Conpose: 다수의 컨테이너를 빠르게 쉽게 생성할 수 있게 해주는 도구.
DockerFile: 이미지를 생성하고 특정 작업까지 같이 처리해주는 도구.
칼리) 워드프레스 파일 검색해서 다운
docker docs 접속
docker wordpress compose 검색
vim docker-compose.yu~~
sudo apt-get update
sudo apt install docker-compose
sudo service docker service
sudo docker-compose up -d
sudo docker ps
브라우저로 실행 :8000
한국어로 실행 후 가입, 로그인
11) 도커 로그 살펴보기
오류가 나거나 침해 사고가 발생했을 때 로그를 분석하게 되는데, 기본적인 로그 구조를 배운다.
docker ps
docker exec -i -t wordpress /bin/sh
ls -al
cd /var/lof
ls -al
cd apache2
ls -al
// log -> dev/stdout(외부에 통합출력)
(호스트)root@
docker
docker log
docker logs wordpress //요기 에러
docker inspect wordpress //설정에서 경로 볼 수 있음. 상단 이미지부분에 Logpath
경로/파일이름 그대로 복사 붙여넣기 후 보기.
'Web hacking > 개념 정리 & 심화' 카테고리의 다른 글
[-] Daily - Host에 ..값 삽입, base64 값 변조 등 (0) | 2022.04.13 |
---|---|
[#5] webdav, heartbleed 취약점 (0) | 2022.03.04 |
[#5] Burp Suite 살펴보기 (0) | 2022.03.04 |
[#1] kali 기본 명령어 (0) | 2022.02.06 |
[#1] Pentest 개요 (0) | 2022.02.04 |