정보보안 스터디 - 9주차 7일 - Docker 사용법
s[참고]SSH
리눅스 ps -ef 에서
tty2 : 싱글모드 콘솔
pts/0,pts/1 : x윈도우 터미널, ssh 모두를 포함
tty 명령어로 종류와 번호를 확인할 수 있습니다.
☞ 물리서버 VS 가상화 서버 VS 클라우드 서비스
A기업이 서버를 구성할 때
물리서버(온프레미스 환경)을 선택한다면
1. 물리서버50대를 모두 구매해야되기 때문에
비용이 엄청나게 많이 들 것입니다.
2. 서버 50대가 여유롭게 들어갈만한 공간 임대비
3. 전기세 등 관리비, 서버를 조작하고 관리하는 5~6명의 인건비
4. 물리서버를 배송하기위한 운반비가 들어갈 것이기 때문에 모두 돈입니다.
또한 해외의 경우 배송 기간이 답답할 정도로 길겠죠. 초기에는 당연히 이렇게 구성을 했고, 사업주 입장에서는 절감을 하는 것이 좋습니다.
가상화 서버를 만든다면
실제 물리 서버는 10대만 가지고 VMware처럼 한대당 5대의 가상 서버를 구성하는 식입니다.
그렇게 되면 서버 자체의 비용이 절감할 뿐만아니라 모든 비용이 절감됩니다.
클라우드 서비스를 이용한다면
아마존 AWS서버 처럼 클라우드 서비스 운영회사에서 서버를 원격으로 빌리는 것입니다.
가상화 방식으로 제공하며, 한달 정액제가 아닌 실제 트래픽 사용량에 따라서 요금을 부과하고 있습니다.
땅값이 싼 지방에 엄청난 규모의 데이터 센터를 두고 서버를 대여해주고 있습니다.
물리적인 서버 초기구매비용 뿐만 아니라 전체적인 비용이 절감되기 때문에 많은 곳에서 이용합니다.
원래 기존에는 리눅스 서버를 만들고 웹서버를 구축하려면
1. 리눅스 설치
2. 리눅스 환경 구성(네트워크, 초기설정 등)
3. apache, nginx 등 서비스 데몬 설치
4. 개발환경에 필요한 애플리케이션 설치(php, java, perl 등)
5. 로그 수집기 및 모니터링 애플리케이션 설치
이 과정에 있어서 많은 시간이 듭니다. 이건 설치환경이고 배포환경까지 만들어 여러곳에 배포를 하려면 그만큼 시간을 들여 만들어야 합니다. 그래서 개발자들은 반복작업이고 시간이 많이 드니까 이 과정을 한번에 해결할 수 있는 docker로 작업 시간을 줄이게됩니다.
☞ Docker
Docker는 이미지 파일을 다운받아서 쉽게 웹서버를 구축합니다. 이미지 원본은 수정이 안되기 때문에 그대로 두고 위에 레이어방식으로 컨테이너를 입히는 방식입니다.
docker의 장점은
예를들어 ubuntu를 설치한다고 치면 원래는 운영체제 리눅스를 설치해야하고 관련 파일들이 용량을 잡아먹지만 docker의 이미지를 이용하면 ubuntu [lib/usr]디렉토리 자체만 설치 받기 때문에 아주 빠르고 가볍습니다.(ubuntu가 70MB 수준) 또한 배포도 한번에 가능합니다.
리눅스는 저장소가 repository지만 docker환경은 이미지 저장소인 레지스트리를 사용합니다.(레포보다 큼)
기본적으로 도커허브에서 받아오지만 다른 사이트도 가능합니다.
docker 구성
보통은 OS의 커널을 연결해서 각각 독립적인 컨테이너를 여러개 만들어 사용하지만
윈도우가 본체이기 때문에 가상 VMware(하이퍼 바이저)에서 리눅스를 설치하고 컨테이너를 리눅스 커널 그대로 연결하는 방식입니다.
네임스페이스/cgroup
네임스페이스는 컨테이너를 독립적으로 프로세스를 분리하는 기능하며
cgroup은 컨테이너 한쪽에 너무 많은 용량, 메모리를 차지하지 않도록 리소스를 제한하는 기능입니다.
docker 명령어
docker search (quay.io/)nginx 해당 저장소에서 검색합니다. docker search --no-trunc docker search --limit 3 docker search --filter-stars=100 로 검색필터가 가능하고 |
docker image inspect ubuntu 해시값으로 된 아이디, 환경변수 경로, Cmd 적용 쉘 등을 자세히 확인합니다. --format="{{.id}}" 특정부분만 뽑아서 봅니다. |
기본
docker pull (gcr.io.tensorflow/)tensorflow:7 해당 버전 이미지를 이미지를 당겨와서 다운받기만 하는 것입니다. 구동하지는 않습니다. |
docker start 해당 이미지를 구동합니다. |
docker run 다운과 구동을 동시에 시킵니다. |
docker stop 해당 컨테이너를 멈춥니다. |
docker system df 이미지/ 컨테이너가 몇개 있는지, 용량은 어떻게 되는지 확인합니다. |
docker image ls 확인 |
docker container rm ID또는이름 docker image rm ID또는이름 삭제 |
컨테이너
docker container create (--name test1) nginx 이미지로 컨테이너 만들기만 합니다. 이름은 설정안할 시 랜덤값이 됩니다. |
docker container run --name test centos (/bin/bash) centos를 구동하면 /bin/bash가 기본값으로 실행되고 exited됩니다. docker container run --name test nginx nginx같이 웹서버는 기본적으로 계속 on 되어있습니다. 리눅스에서는 curl http://localhost로 실제pc에서는 192.168.2.10로 웹서버 접속이 가능한지 확인합니다. |
docker container run -d ubuntu /usr/ping localhost docker logs -t ID 백그라운드에서 안보이게 실행됩니다. ping 등 |
docker container run --rm centos /bin/ping localhost 작업 종료되면 바로 삭제합니다. ping,cal 등 |
docker container run -it --name "test" ubuntu /bin/cal -i는 키보드 연결, -t는 대화형 쉘연결 > 쉘안에서 조작가능합니다. |
docker container run --name webserver -d -p 80:80 nginx 포트포워딩으로 출발지 80포트와 목적지 80포트 접속이 가능하도록 설정합니다. |
확인
docker container stats test1 메모리 사용 등 상태를 확인합니다. |
docker container ls 실행중인 컨테이너를 확인합니다. docker container ls -a 작동안하는 컨테이너도 확인합니다. |
docker kill (-s 9) > 137 강제 종료상태 docker stop > 0 일반 종료상태 |
볼륨
컨테이너가 중단되거나 재접속을 했을 때는 레이어에 저장된 내용이 다 날아가게 되지만 리눅스에 디렉토리를 만들어서 마운트를 해두면 파일이 저장 가능합니다.
docker volume create |
docker volume ls |
docker volume inspect testvol 자세히 확인 |
docker container run -d -v testvol:/usr/share/nginx/html -p 8080:80 nginx 리눅스 testvol 디렉토리와 nginx안의 디렉토리를 마운트 합니다. 작업 저장이 가능합니다. |
Bind mount docker container run -d --name web –v /www:/usr/share/nginx/html -p 8080:80 nginx 임의의 리눅스 폴더에서도 마운트가능합니다. 이경우는 자동으로 디렉토리가 생성됩니다. |
업로드
업로드도 누구나 가능합니다.
docker login > username, passwd 로그인을 해야 업로드가 가능합니다. |
아이디/이미지이름:버전태그 양식을 지켜서 업로드합니다. docker image tag nginx wonder/webserver:0.3v |
docker image push wonder/webserver:0.3v 악성코드가 들어가있는지 확인을 해주고 업로드를 해줍니다. 약 하루 정도가 걸립니다. |
다음 시간에는
컨테이너를 각각
웹서버/DB서버/웹로그 수집기로 구축하겠습니다.