- 컨테이너는 삭제되면, 안에 데이터가 삭제된다. 이 데이터를 유지시키기 위해, 물리 서버의 디스크에 마운트해서 데이터를 물리 서버의 디스크에 저장시킨다. 이로써, 컨테이너가 삭제되더라도 해당 데이터를 안전하게 서버에 저장할 수 있다
- 만약, 컨테이너를 옮긴다면, 도커는 해당 컨테이너의 설정 파일을 보고, 디스크를 마운트하는데, 해당 설정 파일에서는 이전 서버의 로컬 디스크의 위치를 나타내기에 현재 서버의 디스크에 마운트가 불가능하다. 따라서, 이를 해결하기 위해 외부 스토리지에 마운트 한다
- 영구적으로 제공해주는 볼륨을 Persistent Volume 이라고 한다. 이 Volume은 Block Storage 에서 제공해준다. 이를 통해, 컨테이너가 이동 혹은 삭제되도, 해당 데이터는 영구적으로 Volume에 저장되기에, 재생성해서 다시 Mount하면 기존 인스턴스를 복구할 수 있다
- 따라서 클라우드 시장에서는 이 외부 스토리지가 필수적이다
- Block Storage : 클라우드에서 주로 사용하며, Persistent Volume 을 제공해준다
- File Storage : NAS , 트리 형태
- Object Storage : Key-Value 형태이며 Flat한 구조이다. 계정별로 공간을 제공한다
- sed -i(변경한다) 's/old/new/' abc.txt -> abc.txt 파일 내에서 만나게 되는 첫번째 old 를 new 로 변경하며, 만약, g를 사용한다면, 파일 전체의 old 를 new 로 변경한다
- 만약, 변경된 내용을 변수를 이용하여 처리하고 싶다면 ' 대신 " 를 사용하면 된다
- vi와 vim 둘 다 있지만, alias를 통해 vi = vim 이라고 되있기에 vi로 실행해도 vim이 실행된다
파일을 수정하고, vi로 연다
: set nu 로 줄 번호를 표시해준다
: set no nu 로 줄 번호를 없앨 수 있다
' / ' 로 검색하며, 검색 결과는 N , n 로 제어
3G 는 3 번째 줄로 이동
I 는 입력 모드 , O 는 한 줄 띄우고 입력 모드
현재 입력한 내용은 파일에 저장된 것이 아닌, 버퍼에 저장되있다. 이를 저장해야지 파일에 적용된다
ESC 로 입력 모드로 이동해서 : 을 통해 마지막 행 모드로 이동하고, wq 를 통해 저장하고 나가자
cat 으로 확인해보면 잘 저장되었다
간혹 편집기에서 wq 로 저장 후 빠져나오려고 하더라도, 퍼미션 문제로 종료되지 않는 경우가 있다. 이 경우에는 강제 종료를 위해 ! 를 써서 :wq! 로 빠져나와야 한다
- -e 는 정규 표현식을 쓸 수 있게 하여 ' \ ' 를 사용할 수 있다. 이를 동해 [ , ] 를 정규 표현식이 아닌 문자 그래도 사용할 수 있게 해준다
- a는 append 로 밑 줄에 추가해주는 옵션이다 ( a\ ). g 줄에 추가하려면 i를 사용하면 된다
- -r 은 한 행을 읽는 옵션이다
- 서버의 Len Card 에는 보통 4개의 포트가 있어야한다. 포트는 슬롯에 들어있다
- CentOS7 버전 이후로 인터페이스의 이름은 다음의 과정을 거쳐 결정되도록 설정되어 있다
- 이전에는 eth0 , eth1 ... 이었다
- 이제는 ens ( slot ) -> enp ( port ) 이다. 먼저, ens 를 확인하여 slot을 확인하여 이름을 결정. 만약 slot이 같다면, 그 다음 enp 를 통해 해당 slot의 port 를 확인하여 이름을 결정
- port 도 같으면 eno ( bios ) 를 통해 bios 이름을 이용하여 결정한다
- TYPE : 포트 타입. 이더넷 이기에 FRAME 처리 가능. 밑에 Ip가 들어있기에 L3 포트다
- BOOTPROTO : 부팅할 때 어떤 프로토콜 쓸지를 의미한다. 이를 DHCP라고 쓰면, 아래 Ip가 설정되있어도, DHCP 를 통해 Ip를 받아오는데, None 이므로 Ip를 직접 설정해야 한다
- 우린 여기서 이름을 바꿔주면 된다
- 서버에는 /et/ssh/.pub 에 서버 확인에 사용할 public key를 가지고 있다
- 클라이언트가 서버에 접속 요청을 하면 서버는 public key 를 전송하여 클라이언트의 known_hosts에 저장한다
- 다시 접속 요청을 하면, 또 public key 를 전송한다. 클라이언트는 자신에게 온 key 가 처음 보는 key면, 다시 접속하려는 서버가 아닌 것을 인지하고, 접속하지 않는다
- 만약, 받은 key 가 known_hosts 에 저장된 key와 동일하다면, 해당 서버가 접속하려는 서버임을 인지하고, 접속한다
==============================================
- 서버 확인이 끝났자면, 사용자 확인을 마쳐야 Data 송수신이 가능하다
- password ( 대칭키, PSK - Pre Shared Key ) 방식은 안전하지 않다. 따라서, Key-Pair 방식을 사용한다. 이 비대칭키는 private key는 클라이언트한테, public key는 서버의 authorized_keys 에 저장한다
- Key-Pair 는 어디서 만드냐는 중요하지 않다. 어디서든 만들어도 되지만, 반드시 한 쌍의 비대칭키여야 하며, Private Key는 클라이언트에게, Public Key는 서버에 있어야 한다
- 실습에서 한 방식 처럼 할려면 Data 송수신으로 Key를 보내주므로, 사용자 인증이 끝나지도 않았는데 보내준 것 이다. SSH-COPY-ID도 Data 송수신으로 사용자 인증 전에는 사용하지 못한다. 안전하지 않기 때문이다
- 만약, SSH-COPY-ID를 통해 Key를 주고 받을려면 Password 인증이 필요하다. 허나, 우리는 Password 인증을 사용하지 않기로 해서, Private Key를 직접 복사해서 붙여넣기 했다. 이 역시 안전하지 않다
- 클라이언트가 key id 를 보내주면, 서버는 무결성 검사를 위해 난수를 생성하여, 해당 id의 public key 로 암호화하여 보내준다. 이는 한 쌍의 private key 로만 복호화할 수 있다
- 클라이언트는 이 복호화한 난수가 원본인지 위조된 것 인지 해시 함수에 넣어서 나온 문자열을 서버에 보내준다. 서버에서도 해시 함수에 난수를 넣어 나온 문자열과 받은 문자열을 비교하여 무결성 검사를 한다
- 두 문자열이 같으면 세션을 형성하여 Data 송수신을 한다
- 이때 Data는 세션키로 암호화해서 송수신 한다
- control node 에서 key를 만들어 private 키는 사용자에게 준다
- public 키를 베이스 이미지에 넣으면, 모든 인스턴스에 같은 public 키를 가지므로, 인스턴스가 생성될 때 이 인스턴스에 public 키를 넣어준다
- 키를 사용자가 따로 가져올 필요 없이 컨트롤 노드에서 --upload 를 통해 서버와 클라이언트에게 키를 넣어준다