목차
1. 메트릭값 변경
2. TTY & PTS
3. Foreground & Background
4. Docker
- 이미지 정리
- 컨테이너 정리
- Docker 이미지 사용 및 컨테이너 생성, 삭제, 접속
- attach 접속, exec 사용
- 웹 서버 메인페이지 변경
- 컨테이너 세부정보 확인 및 통신확인
- 컨테이너 한꺼번에 삭제
5. Process
6. 문제풀이 1, 2
메트릭값 변경
- 먼저 읽어들일 경로를 설정하기 위해 사용
- 메트릭값이 낮을 수록 우선순위가 높다
- VMware 세팅을 할 때 VMnet8(NAT) 카드에 게이트웨이를 넣어줘 버리면
실제 PC에서는 무엇이 우선순위인지 몰라 혼란을 겪게 된다 이럴 때 사용하게 된다
(실제 PC와 VMware의 VMnet8까지 사이에 가상의 스위치가 있다고 생각하자)
TTY & PTS
- TTY(Telnet Type writer) : 콘솔접속(마우스, 키보드, 모니터를 가지고 접속)
- PTS(Press The Type ) : 원격 접속
- Xshell을 통한 원격접속, VMware에서 직접 콘솔접속 2개가 보이는 것을 확인
- ALT+F'번호'를 이용하여 다중접속이 가능하다
- 총 6개까지 지원이 된다
Foreground & Background
- Foreground : 쉘을 점유하고 있어 다른 명령어 x
- 인터럽트가 가능(ctrl+c로 종료 가능)
- Background : ls 명령어 같은 것들이 먹음(눈에는 보이지만)
- ctrl+c로 종료 x
- jobs로 작업번호확인
- fg %'작업번호'(foreground로 변환 후, ctrl+c로 종료)
- CTRL+C가 먹히지 않는 것을 확인
Docker
이미지 정리
- 서비스들의 환경설정, 라이브러리를 포함하고 있다
- 운영체제는 포함하고 있지 않다
- Docker 자체의 운영체제를 사용하기 때문에 굉장히 가볍다
컨테이너 정리
- 실제 컨테이너선은 규격화되어있다
- 도커의 컨테이너도 규격화되어있기 때문에 좋다
- 가상화, 클라우드, 컨테이너 태어난 이유는 Application 실행이다
- migration의 목적은 옮기는 곳에서 Application이 잘 돌아가게 하기 위함
- 대규모, 소규모의 차이일뿐
- 컨테이너 하나에는 꼭 하나의 프로세스만 실행!
- 하나의 역할만 하기를 원한다
- 편법이 존재하나 FM대로 하자
Docker 이미지 사용 및 컨테이너 생성, 삭제, 접속
- it(interative terminal) 옵션 : 쉘 적용하는 이미지에 사용
- d(daemon) 옵션 : 서비스를 실행하는 이미지에 사용
- 두 개 구분을 잘해야한다
- 원래의 컨테이너 실행 순서는 create로 컨테이너 생성 후, start로 실행이다
- 번거롭기 때문에 많이들 run을 사용
- 삭제 후, 다시 정상적으로 컨테이너 실행
- 쉘이 실행되었을 때, 접속 종료는 CTRL+p+q를 사용하여 정상 종료시킨다
- exit 사용때와는 달리 문제없이 컨테이너가 실행되는 것을 볼 수 있다
- 루트 디렉터리에 생성된 디렉터리 확인
- 컨테이너 안의 디렉터리와 외부의 디렉터리가 다른 것을 확인
- p 옵션을 사용하여 Port Forwarding 진행
- 80(Host에서 접속 포트):80(내부 컨테이너 포트)
attach 접속, exec 사용
- 쉘을 제공하지 않기 때문에 attach로 접속하면 상태가 Exited로 변하는 것을 볼 수 있다
- 굳이 쉘로 접속하고 싶다면 exec 명령어를 사용하여 bash 쉘을 가져다 붙이면 된다
- 이렇게 한 PC에서 여러개의 웹 서버를 생성할 수 있다는 것이 매우 큰 장점이다
- 전에 배운 프록시까지 사용하여 여러개의 웹 서버에 뿌려준다면
어마어마한 부하분산의 장점까지 가져갈 수 있다
웹 서버 메인페이지 변경
컨테이너 세부정보 확인 및 통신확인
- inspect 명령어를 통해 컨테이너들의 세부정보를 확인할 수 있다
- 따로 지정해주는 것이 아닌 Docker 자체내에서 DHCP로 할당을 받는다
- 여기서 보여주는 위치는 /usr/shell/apache 이다
- 웹 서버내에서는 ping 명령어가 존재하지 않으므로 ping 테스트가 불가
- alpine 서비스를 사용하는 컨테이너를 생성하여 테스트 진행
- 컨테이너간 통신이 되는지를 확인하기 위함
- itd 옵션을 모두 합쳐서 사용하면 무조건 실행은 되지만 접속은 바로 되지 않는다
- 각각의 접속 명령어를 통해 접속해줘야 한다
컨테이너 한꺼번에 삭제
Process
- Process : App이 실행되어 Memory에 로드된 상태
- APP는 실행 전까지는 HDD에 저장
- APP는 실행하면 memory로 로드
- 이런 이유는 둘의 속도차이 때문이다(둘의 속도차이는 약 1000배)
- a : 터미널에 종속되지 않은 모든 프로세스 정보 출력
- u : 특정 사용자의 프로세스 정보 출력(지정하지 않으면 현재 사용자로)
- x : 모든 사용자의 프로세스 정보 출력
- 단순히 멈춘 것이므로 프로세스 넘버가 바뀌지는 않는다
- 부모를 죽여도 자식이 죽어야함
- 만약 자식이 살아있으면 좀비
- top 명령어들 통해 확인(q로 종료)
- 만약 부모를 죽였는데 자식이 죽지 않았다면 zombie에 카운트가 되는 것
문제풀이 - 1
- 새롭게 httpd(아파치) 컨테이너를 생성하여 웹 접속 메인 페이지에 출력되는 내용 변경
- 포트포워딩 포트는 같으면 안된다
문제풀이 - 2
- 상대방의 SSH에 접속하여 프로세스 죽여보기
- SSH 포트 60022, 60122로 변경하여 총 3개를 만든다
- 테스트를 위해 설정 후, Google로 핑테스트를 백그라운드에서 진행