728x90

패스워드 관련 파일 및 명령어

패스워드 정책

  • 대소문자, 숫자, 특수문자를 혼용하여 8글자 이상의 패스워드를 사용
  • 동일 문자를 연속 4회 이상 사용 금지
  • 패스워드 히스토리를 관리해 2 ~ 3개 이상 동일 패스워드를 사용 금지
  • 패스워드 변경 주기를 설정(패스워드 유효기간을 90일 이하로 설정)
  • 사전에 나오는 쉬운 단어나 이름은 패스워드로 사용하지 못하도록 설정
  • 기본 설정된 패스워드는 사용되지 못하도록 설정
  • 초기 부여된 패스워드는 사용자 최초 접속 시 변경하도록 설정

패스워드 정책 설정 파일

  • /etc/security/pwquality.conf

패스워드 기본값 설정 파일

  • /etc/login.defs

패스워드 관련 명령어

passwd [사용자명]

  • 해당 사용자의 패스워드를 변경
  • 사용자 명을 입력하지 않으면 현재 사용자의 패스워드로 변경
  • -n : 패스워드 변경 후 최소 사용 기간
  • -x : 패스워드 변경 후 최대 사용 기간
  • -w : 패스워드 만기일 이전에 사용자에게 경고 메시지를 전달할 날짜 지정
  • -f : 최초 로그인 시에 강제로 패스워드를 변경하도록 설정
  • -d : shadow 파일의 패스워드 필드 값을 제거, passwd 입력 없이 로그인 가능
  • -l : 해당 사용자의 상태를 locking으로 변경
  • -s : 해당 사용자의 현재 패스워드 설정 조회

접근 제어

su [-] [사용자 명]

  • 다른 사용자로 로그인할 때 사용한다.
  • -(dash)의 유무
  • su -root : 입력한 사용자의 사용자 초기화 파일 적용
  • su root : 현재 사용자의 환경을 유지, 사용자 초기화 파일 적용 x

who : 접속 정보

who am i : 현재 터미널에 대한 접속 정보

whoami : 로그인 명

last : /var/log/wtmp 파일을 참조해서 로그인했던 정보를 출력해주는 명령어, 자신의 시스템에 접속한 정보를 확인할 수 있다. (IP 확인 가능)

 

PAM(pluggable Authentication Modules)

  • 시스템에 공통적인 인증 방법을 제공
  • 어떤 보안 인증 기능을 추가할 때 모듈로 만들어서 쉽게 보안 설정 내용들을 교체 또는 추가 제거가 가능하다.
  • 모듈의 종류는 다양하며 각각 모듈의 기능을 정확히 파악하는 것이 중요
  • 프로그램이 사용자 인증이 필요하면 PAM라이브러리를 호출
  • PAM 라이브러리가 호출되면 호출한 응용프로그램의 설정 파일을 검사, 설정 파일의 내용에 맞는 PAM 모듈을 적용
  • 설정 파일이 없으면, 기본 설정 파일을 사용
  • 설정 파일은 사용자 인증을 검사하기 위해 필요한 유형(형식)을 가짐

/etc/pam.d 디렉토리 : PAM을 적용한 프로그램이나 서비스의 설정 내용을 저장해둔 파일들이 모여 있는 디렉터리

/usr/lib64 경로로 들어가면 모듈의 종류를 확인할 수 있다.

자주 사용하는 모듈

  • pam_permit.so, pam_deny.so : 항상 성공/실패를 return으로 접근, 접근을 허용/거부(가장 일반적인 모듈)
  • pam_warn : 호출한 사용자 및 호스트 정보를 messages 로그를 남김
  • pam_access : 계정 또는 IP주소를 이용해서 시스템 접근을 허용/거부
  • pam_pwcheck : /etc/login.defs 파일을 참조하여 암호를 확인하는 명령어
  • pam_security : /etc/security 파일을 참조하여 터미널 장치가 root로 접근할 수 있는지 없는지 판단
  • pam_time : 시간, 쉘 등을 설정할 수 있는 모듈
  • pam_wheel : su 서비스에 사용함, su를 이용한 root 접근을 막을 수 있음
728x90
728x90

특수권한

일반적인 권한과는 조금 다른 특수한 권한

종류는 다음과 같이 3가지가 있다.

SetUID

  • 나머지 사용자가 파일을 실행할 때 소유자의 권한으로 접근할 수 있게 해주는 권한
  • root admin rws rwx rwx
  • ls -l 명령어를 이용해서 확인했을 때 특수권한이 부여된 파일은 소유자의 권한 부분 중 실행 권한 부분이 x가 아닌 s로 나타난다.
  • chmod 4xxx [파일 이름] 또는 chmod u+s [파일 이름] 명령어로 설정할 수 있다.

SetGID

  • 나머지 사용자가 파일을 실행할 때 관리 그룹의 권한으로 접근할 수 있게 해주는 권한
  • ls -l 명령어를 이용해서 확인했을 때 특수권한이 부여된 파일은 관리 그룹의 권한 부분 중 실행 권한 부분이 x가 아닌 s로 나타난다.
  • chmod 2xxx [파일 이름] 또는 chmod g+s [파일 이름] 명령어로 설정할 수 있다.

StickyBit

  • 디렉터리에 부여하는 권한, 디렉터리를 마치 자유게시판처럼 사용할 수 있게 해주는 권한 일반적으로 /tmp 디렉터리에 부여
  • ls -l 명령어를 이용해서 확인했을 때 특수권한이 부여된 파일은 나머지 사용자의 권한 부분 중 실행 권한 부분이 x가 아닌 t로 나타난다.
  • chmod 1xxx [파일 이름] 또는 chmod o+t [파일 이름] 명령어로 설정할 수 있다.
  • StickyBit는 디렉터리에 부여한다.
  • 대표적인 예로 /tmp
  • StickyBit가 부여된 디렉터리 내에서는 누구나 자신의 파일을 생성하거나 수정, 삭제가 가능하다.
  • 하지만 다른 사용자의 파일을 수정하거나 삭제할 수는 없다.(관리자는 가능)
  • 해당 디렉터리는 마치 인터넷 자유게시판처럼 사용된다.

쉘이란

  • 터미널에 입력한 명령을 해석하고 관리하는 프로그램을 쉘이라고 한다.
  • 쉘은 사용자 커널 사이에 연결시켜주는 역할을 하며 사용자가 입력한 명령을 해석하여 운영체제가 해당 명령을 알아들을 수 있게 해 준다.
  • 쉘은 여러 가지 종류가 있으며 가장 많이 사용되는 쉘은 Bash쉘이다.

경로 이름 메타 문자

  • ~ : 현재 로그인 한 사용자의 홈 디렉터리 (사용자 정보를 저장하고 있는 /etc/passwd 파일의 6번째에 설정된 디렉터리)
  • - : 이전 작업 디렉터리 (CentOS의 Bash 쉘 기준 바로 이 전의 디렉터리만 기억)

파일 이름 메타 문자

  • * : 하나 이상의 문자를 대체하는 문자, 일반적으로 전체를 의미 (특정 디렉터리 내의 모든 파일을 지정할 때 또는 특정 이름으로 시작할 때 등의 여러 가지로 활용)
  • ex) rm -rf ./* , rm -rt test*
  • ? : 하나의 문자만 대체

인용부호 메타 문자

  • `` : `` 안에 있는 문자를 명령어로 인식하여 실행되게 한다.
  • '' : 작은따옴표 안에 있는 메타 문자를 일반문자로 취급한다.
  • "" : 큰 따옴표 안에 있는 $, \\, ` 문자를 제외한 나머지 문자만 일반문자로 취급 
  • $는 리눅스 쉘에서 변수를 사용할 때 사용하는 문자

방향 재지정 메타문자

< : 표준 입력 재지정

> : 표준 출력 및 표준 에러를 재지정, 일반적으로 명령어의 출력을 파일로 저장 또는 네트워크로 전송

  • 파일에 저장할 때 : echo “test” > ./file
  • 정상적인 결과만 출력할 때 : find / -perm -4000 2 > /dev/null
  • 에러 결과만 출력할 때 : find / -perm -4000 1 > /dev/null
  • 정상적인 결과는 파일에 저장, 에러는 출력 X : find / -perm -4000 1 > ./setuid_file 2 > /dev/null
  • >를 한 번만 사용하면 파일의 내용을 덮어씀, >> 을 사용하면 기존의 파일의 내용에 이어서 씀

|: 파이프 문자, [명령어1] | [명령어 2]처럼 사용하며, 명령어 1의 결과를 명령어 2의 입력으로 사용

  • ex) ls /etc | grep rc ls 명령어의 결과에서 특정 문자를 포함한 라인만 뽑아 볼 때
  • ls /etc 결과 중에서 yum이 포함된 내용만 출력할 때
  • ls /etc | grep yum
  • ls /etc 결과가 너무 길어서 화면에 다 안 나와 끊어서 보고 싶을 때
  • ls /etc | more

사용자 초기화 파일

  • /etc/profile : 시스템 전역에 걸쳐 환경을 설정하는 파일, 모든 사용자가 적용되는 파일
  • ~/ .profile : 개별 사용자의 홈 디렉터리에 있는 파일, 해당 사용자의 설정을 변경할 때 사용
  • ~/ .bashrc : 개별 사용자의 홈 디렉터리에 있는 파일, 해당 사용자의 쉘 관련 설정을 변경할 때 사용
  • 환경 변수, 쉘 프롬프트 모양(명령어 앞에 붙는 내용), 별명 기능(alias), 쉘 옵션 정의 등 설정 가능

환경 변수

  • 시스템 환경에 대한 설정을 저장하고 있는 변수
  • HOME : 사용자의 홈 디렉터리
  • PATH : 실행파일을 찾는 경로
  • LANG : 프로그램 사용 시 기본 지원되는 언어
  • SHELL : 로그인해서 사용하는 쉘
  • EDITOR : 기본 편집기의 이름
  • PS1 : 명령 프롬프트 변수
728x90
728x90

링크

  • 특정 파일 또는 디렉터리에 접근을 쉽게 할 수 있도록 하는 방법
  • 파일 시스템이 물리적인 장치인 하드디스크 상에 저장되어있는 특정 파일의 위치를 가리키는 것

하드 링크

  • 하드 디스크의 특정 주소

심볼릭 링크

  • 윈도우의 바로가기 개념과 비슷하며 실질적인 디스크 상의 파일을 가리키는 것이 아니라 파일 시스템상의 특정 파일을 가리키는 것

링크 생성 명령어

  • ln [옵션] [원본] [링크]
  • 옵션을 지정하지 않고 링크 파일을 생성하면 하드 링크를 생성할 수 있다.
  • 옵션으로 -s를 지정하고 링크 파일을 생성하면 심볼릭 링크를 생성할 수 있다.

권한

  • 리눅스의 모든 파일과 디렉터리는 권한(퍼미션)을 가지고 있다.
  • 리눅스의 파일 시스템 상에 권한에 대한 정보를 저장하는 부분이 있다.
  • 퍼미션들은 시스템 상에 존재하는 파일들에 대한 읽기, 쓰기, 실행에 대한 접근 여부 결정
  • ls -l 명령어로 확인 가능
  • 이러한 퍼미션은 다중 사용자의 환경을 제공하는 리눅스 환경에서는 가장 기초적인 접근 통제 방법

drwxr-xr--. 3 root root 18 9월 28 22:07 .config

  • 총 10개의 문자, 첫 번째 문자는 해당 파일의 종류
  • 앞에 root는 소유자 뒤에 root는 그룹
  • 두 번째 ~ 열 번째 문자는 권한
  • 두 번째부터 열 번째 문자를 세 개씩 끊어서 읽는다.
  • rw- : 소유자 권한
  • r-x : 관리 그룹 권한
  • r-- : 나머지 권한
  • 소유자 : 일반적으로 파일이나 디렉터리를 생성한 사용자, 명령어로 변경 가능
  • 관리 그룹 : 파일이나 디렉터리를 생성한 사용자가 속한 그룹, 명령어로 변경 가능
  • 나머지 : 소유자도 아니고 관리 그룹에 속한 사용자도 아닌 경우
  • r : 읽기 권한이 있음
  • w : 쓰기 권한이 있음
  • x : 실행 권한이 있음
  • -: 권한이 없음

권한 설정 방법

  • chmod [권한] [파일 또는 디렉터리 이름]
  • [권한] : 권한을 입력할 때는 심볼릭 모드와 옥텟(8진수) 모드 2가지 방식을 이용하여 입력 가능하다.
  • [파일 또는 디렉터리 이름] : 파일, 디렉터리를 지정할 때는 절대 경로 또는 상대 경로 모두 가능하다.

심볼릭 모드

대상 권한 권한 부여 여부

소유자, u 읽기, r 권한부여, +
관리 그룹, g 쓰기, w 권한 회수, -
나머지 사용자, o 실행, x  

ex) 소유자에게 쓰기 권한을 준다.

chmod u+w file

옥텟 모드

---  --x -w- -wx r-- r-x  rw- rwx
0 1 2 3 4 5 6 7

r : 4, 읽기 권한이 있음

w : 2, 쓰기 권한이 있음

x : 1, 실행 권한이 있음

umask

파일 또는 디렉터리를 생성할 때 권한 값을 결정한다.

  기본 권한(8진수) 기본 권한(문자)
파일 644 rw-r- -r- -
디렉터리 755 rwxr-xr-x
  • 파일이나 디렉터리 생성할 때 기본적으로 권한 값은 파일의 경우 644 디렉터리의 경우 755로 설정된다.
  • 이 값은 umask 값에 의해서 결정되는 값으로 파일은 666에서 umask값을 not 연산을 수행 후 둘을 and 연산, 디렉터리는 777에서 같은 방식으로 구해진다.
  • umask 값은 umask 명령어를 이용해서 변경 가능하며 재부팅하면 초기화된다. umask의 기본값은 022이다.
  • 재부팅 후에도 적용을 시키려면 사용자 초기화 파일에 설정해야 한다.

권한에 따라 영향받는 파일 및 디렉터리 명령어

명령어 파일 디렉터리
읽기 more, cat, head, tail ls
쓰기 vi 편집기로 내용 수정 touch, mkdir, mv, cp, rm
실행 파일 이름 cd
728x90
728x90

파일 관련 명령어

touch : 내용에 아무것도 없는 빈 파일을 생성

rm : 파일을 제거하는 명령어

  • 일반적으로 -rf 옵션과 같이 사용 -r은 디렉터리 삭제 -f는 강제 삭제

mv : 파일 이름 변경

  • mv [현재 파일 이름] [변경할 파일 이름]

mv : 파일 이동

  • mv [원본 경로] [이동할 경로]

cp : 파일 복사

  • cp[원본 이름] [복사할 이름]

cat, head, tail, more : 파일 내용 확인

cat : 파일의 내용을 전부 확인

  • -n : 파일 내용의 줄 을 같이 출력해준다.

head : 파일의 내용을 시작부터 몇 줄만 확인, 기본적으로 10줄, 옵션으로 보고 싶은 라인 수 지정

tail : 파일의 내용을 끝에서 몇 줄만 확인, 기본적으로 10줄, 옵션으로 보고 싶은 라인 수 지정

  • -f : 실시간으로 내용의 변경사항을 확인할 수 있다.

more : 파일의 내용을 화면에 맞춰서 확인, space는 한 페이지씩 확인, enter는 한 줄 더 확인

  • 보통 head 명령어를 안쓰고 cat /etc/passwd | head 이렇게 쓴다.

vi 편집기

command 모드

가장 기본이 되는 모드, 복사, 붙여 넣기, 다른 모드로 전환, 커서 이동, 삭제 등

(1) 커서 이동

  • 방향키
  • G : 가장 마지막 줄로 이동
  • gg : 첫번째 줄로 이동
  • [n]G : n번째 줄로 이동 ex) 100번째 줄 이동 100G
  • $ : 커서가 위치한 줄의 맨 끝으로 이동
  • 숫자 0 : 커서가 위치한 줄의 맨 앞으로 이동
  • w : 커서가 한 단어씩 오른쪽으로 이동
  • b : 커서가 한 단어씩 왼쪽으로 이동
  • h : 방향키 왼쪽
  • j : 방향키 아래
  • k : 방향키 위로
  • l : 방향키 오른쪽

(2) 삭제

  • x : 한 문자 삭제, 또는 Edit모드에서 백스페이스나 delete 키로 삭제도 가능
  • dd : 커서가 위치한 한 줄 삭제 ex) 5 dd 하면 5줄 한 번에 삭제
  • d[커서이동] : 커서가 이동한만큼 삭제

(3) 수정

  • r : 커서가 위치한 부분의 문자 하나를 입력하는 문자로 대체
  • u : Ctrl + z 처럼 작업 취소

(4) 복사 및 붙여넣기

  • yy : 커서가 위치한 한 줄을 복사
  • y [커서 이동] : 커서 이동하는 만큼 복사
  • p : 커서 밑이나 커서 다음에 붙여 넣기

Last Line 모드

파일을 저장하거나, 종료하거나 저장하지 않고 그냥 종료, 검색, 바꾸기 등

(1) 편집기 상태 변경

  • :set nu : 라인 넘버 표시
  • :set nonu : 라인 넘버 표시 안 함
  • :set ic : 검색할 때 대소문자 무시
  • :set noic : 검색할 때 대소문자 적용

(2) 검색 및 변환

  • /[내용] : 검색, n 다음 검색, N 이전 검색
  • :%s/[찾을내용]/[바꿀내용]/g

(3) 저장 및 종료

  • :w : 저장
  • :q : 종료
  • :wq : 저장 및 종료
  • :w! : 강제로 저장
  • :q! : 강제로 종료
  • :wq! : 저장 및 강제 종료
728x90

'개발 > Linux' 카테고리의 다른 글

프로세스, 아카이브(tar), 압축  (0) 2022.07.29
특수권한, 쉘 명령어  (0) 2022.07.28
링크, 권한 명령어  (0) 2022.07.27
grep, fgrep, find 명령어  (0) 2022.07.26
리눅스 기초, 디렉터리 관련 명령어  (0) 2022.07.21
728x90

리눅스 기초

리눅스란?

  1. 컴퓨터 운영체제의 한 종류
  2. 윈도우와는 다르게 오픈 소스 운영체제
  3. 소스코드가 공개되어있기 때문에 다양한 리눅스 기반의 운영체제가 존재

 

특징

  1. 높은 이식성과 확장성(c언어 기반이기 때문)
  2. 안정성과 신뢰성
  3. 계층적 파일 시스템(최상의 디렉터리가 존재하고 모든 것들은 해당 디렉터리 하부에 존재)

 

프롬프트

  1. 컴퓨터가 입력을 기달리고 있음을 가리키기 위해 화면에 나타나는 표시
  2. 일반적으로 리눅스의 프롬프트는 현재 작업 디렉터리, 현재 로그인한 사용자 등에 대한 정보를 표시

 

$는 일반사용자

#은 관리자

 

man ls ls의 명령어에 대한 설명서

엔터 치면 한 줄씩, 스페이스 치면 한 페이지씩


디렉터리 관련 명령어

pwd : 현재 작업 디렉터리 확인
cd : 작업 디렉터리 변경
ls : 디렉터리 내용 확인
mkdir : 디렉터리 생성
rmdir : 디렉터리 제거
mv : 디렉터리 이름 변경
mv : 디렉터리 이동
cp : 디렉터리 복사

pwd : 현재 작업 디렉터리 확인

cd : 작업 디렉터리 변경

  • 절대 경로 : 최상의 디렉터리인 /부터 특정 파일 또는 디렉터리의 경로를 모두 입력
  • 상대 경로 : 현재 작업 디렉터리를 기준으로 특정 파일 또는 디렉터리의 경로를 입력 .은 현재 디렉터리를 의미하고, ..은 상위 디렉터리를 의미한다.

ls : 디렉터리 내용 확인

  • 일반적으로 ls는 -al 옵션과 같이 사용한다.
  • -a는 숨겨진 파일까지 모두 표시, -l 은 좀 더 자세한 결과를 출력한다.
  • -rwxr-xr-x : 파일에 대한 접근 권한
  • 1 : 하드 링크 수
  • root : 파일의 소유자 UID
  • root : 파일의 관리 그룹 GID
  • 4096 : 파일의 크기
  • .dockernev : 파일의 이름 파일 이름 앞에 . 이 붙어있으면 숨겨진 파일이다.

mkdir : 디렉터리 생성

  • -p 옵션을 사용하면 폴더 안에 폴더 안에 폴더 등 여러 폴더를 생성할 수 있다.

rmdir : 디렉터리 제거

  • rmdir은 폴더 안에 파일이 있으면 삭제가 안되고 비어 있어야 삭제가 된다.
  • 따라서 rm -r 옵션을 이용해서 파일을 삭제할 수 있다. rm은 rm -rf로 많이 사용

mv : 디렉터리 이름 변경

  • mv [현재 이름 디렉터리] [변경할 디렉터리 이름]

mv : 디렉터리 이동

  • mv [원본 경로][이동할 경로]

cp : 디렉터리 복사

  • 디렉터리를 통째로 복사할 때는 -r 옵션 사용
  • cp -r [원본 경로][이동할 경로]
728x90

'개발 > Linux' 카테고리의 다른 글

프로세스, 아카이브(tar), 압축  (0) 2022.07.29
특수권한, 쉘 명령어  (0) 2022.07.28
링크, 권한 명령어  (0) 2022.07.27
grep, fgrep, find 명령어  (0) 2022.07.26
리눅스 파일 관련 명령어, vi 명령어  (0) 2022.07.22
728x90

유튜브 무료 강의인 따배도가 마지막 강의입니다. 무료 강의이지만 퀄리티가 무료 강의를 넘어서는 강의이고 도커가 처음이신 분 도커에 대해 공부하고 싶은 분, 취준생분들 모두 추천합니다.

https://www.youtube.com/watch?v=NLUugLQ8unM&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi&index=1 

토커 컴포즈란?

여러 컨테이너를 일괄적으로 적용하고 실행할 수 있는 툴

  • 하나의 서비스를 운영하기 위해서는 여러개의 애플리케이션이 동작해야 한다.
  • 컨테이너화 된 애플리케이션들을 통합 관리할 수 있다.

docker-compose 기본 명령어

docker-compose 기본 명령어

version : compose 버전 버전에 따라 지원 문법이 다름
service : 컴포즈를 이용해서 실행할 컨테이너 옵션 정의
build : 컨테이너 빌드
image : compose를 통해 실행할 이미지를 지정
command : 컨테이너에서 실행 될 명령어 지정
port : 컨테이너가 공개하는 포트 나열
link : 다른 컨테이너와 연계할 때 연계할 컨테이너 지정
expose : 포트를 링크로 연계된 컨테이너에만 공개할 포트
volumes : 컨테이너에 볼륨을 마운트
environment : 컨테이너에 적용할 환경변수를 정의
restart : 컨테이너가 종료 될 때 적용할 restart 정책
	no : 재시작 되지 않음
	always : 컨테이너를 수동으로 끄기 전까지 항상 재시작
	on-failure : 오류가 있을시에 재시작
depends_on : 컨테이너 간의 종속성을 정의 정의한 컨테이너가 먼저 동작되야함

docker-compose로 동작시키는 웹서버

1단계 : 도커 컨테이너가 사용할 서비스 디렉터리부터 만들어줘야 한다.

  • mkdir webserver
  • cd webserver

2단계 : docker-compose.yml 생성

3단계 : docker-compose 명령어

  • docker-compose up -d
  • docker-compose ps
  • docker-compose scale mysql=2
  • docker-compose ps
  • docker-compose down

docker-compose 명령어

도커 컴포즈 명령어

up : 컨테이너 생성/시작
ps : 컨테이너 목록 표시
logs : 컨테이너 로그 출력
run : 컨테이너 실행
start : 컨테이너 시작
stop : 컨테이너 정지
restart : 컨테이너 재시작
pause : 컨테이너 일시정지
unpause : 컨테이너 재개
port : 공개포트번호 표시
config : 구성확인
kill : 실행중인 컨테이너 강제 정지
rm : 컨테이너 삭제
down : 리소스 삭제

ex) docker-compose scale 서비스 이름 = 개수
docker-compose run 서비스 이름 실행 명령어
docker-compose logs 서비스 이름
docker-compose up -d
docker-compose ps
docker-compose scale mysql=2
docker-compose ps
docker-compose down
docker-compose down - -volumes 볼륨까지 지워진다.

빌드와 운영

1단계 : 도커 컨테이너가 사용할 서비스 디렉터리부터 만들어줘야 한다.

  • mkdir webserver
  • cd webserver

2단계 : 빌드를 위한 dockerfile 생성

3단계 : docker-compose.yml 생성

4단계 : docker-compose 명령어

  • docker-compose up -d
  • docker-compose ps
  • docker-compose scale mysql=2
  • docker-compose ps
  • docker-compose down
728x90
728x90

컨테이너 간 통신(네트워크) 명령어

1. 컨테이너 통신 방식

도커 데몬을 실행하게 되면 docker0라고 하는 도커 네트워크 인터페이스가 생긴다. 도커 네트워크 인터페이스는 virtual ethernet bridge이고 브릿지 네트워크를 지원하는 가상 네트워크이다. 브릿지 네트워크는 도커 컨테이너가 가지고 있는 IP와 Host 이더넷 또는 물리 장비가 가지고 있는 네트워크를 연결해주는 역할을 한다. 브릿지 네트워크를 지원하기 위해서 docker0는 내부적으로 NAT서비스와 포트 포워딩 기능을 제공한다. 직접 도커가 지원하는 것은 아니고 IPtables로 해준다. virtual ethernet bridge : 172.17.0.0/16 값을 가지는 브릿지 네트워크가 docker0이고 브릿지 네트워크 안에서 docker0는 172.17.0.1 IP를 가지고 게이트웨이 역할을 한다. 컨테이너의 게이트웨이 역할과 L2통신을 지원해준다. 모든 컨테이너는 외부 통신을 docker0를 통해 진행한다. 컨테이너가 실행되면 172.17.x.x로 순차적으로 가상 IP를 할당한다.

 

-NAT : Network Address Translation의 약자로 패킷이 라우팅 장치를 통해 전송되는 동안 패킷의 IP주소 정보를 수정하여 IP 주소를 다른 주소로 매핑하는 방법이다.

-IPtables : iptables 시스템 관리자 리눅스 커널 방화벽(다른 넷필터 모듈로 구현됨)이 제공하는 테이블들과 그것을 저장하는 체인, 규칙들을 구성할 수 있게 해주는 사용자 공간 응용 프로그램이다.

 

2. 컨테이너 포트를 외부로 노출

클라이언트는 eth0라는 인터페이스를 통해서만 들어올 수 있다. eth0에서 컨테이너까지 연결될 수 있도록 포트 포워딩이 진행되야한다.

-p 80:80 -p 호스트 포트:컨테이너 포트

-p 8080로 하면 실제로는 -p randomport:8080이 된다.

-P는 컨테이너 내부에서 도커 파일의 EXPOSE로 정의되어있는 포트에 맞춰서 렌덤 포트가 자동으로 맞춰진다.

 

3. user-defined bridge network 생성 방법

docker network create --driver bridge --subnet xxx.xxx.xxx.x/24 --gateway xxx.xxx.xxx.xxx mynet

subnet을 정해주지 않으면 docker0가 172.17.0.1을 사용하고 있으므로 172.18.0.1로 된다.

gateway를 생략하면 xxx.xxx.xxx.1번으로 된다.

 

docker network ls

위의 명령어는 docker의 네트워크 확인하는 명령어이다.

 

docker run -d —-name appjs —-net mynet —-ip 192.168.100.100 -p 8080:8080 smliux/appjs

위의 명령어는 docker에서 유저가 정의한 네트워크를 실행할 때의 명령어이다.

-ip 생략하면 순차적으로 알아서 생긴다. ex) 192.168.100.001 , 192.168.100.002 등등

 

4. 컨테이너끼리의 통신

프론트 컨테이너와 백엔드 컨테이너가 통신을 할 때를 예를 들면 wordpress가 있는데 wordpress는 웹페이지를 쉽게 제작할 수 있게 도와주는 Tool이다. wordpress 안에는 아파치 웹서버가 내장되어 있다. 또한 wordpress에서 만들어진 데이터는 MySQL에서 저장되게 구성되어있다.

 

mysql 실행

docker run -d —-name mysql -v /dbdata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_PASSWORD=pass mysql

 

wordpress 실행

docker run -d —-name wordpress —-link mysql:mysql -e WORDPRESS_DB_PASSWORD=pass -p 80:80 wordpress

컨테이너와 컨테이너끼리의 통신은 --link를 통해서 연결된다. 컨테이너 이름:원하는 이름

 

728x90
728x90

Docker 컨테이너가 사용하는 스토리지

1. 도커의 레이어 기술

도커의 컨테이너 이미지는 ReadOnly 상태입니다. 컨테이너에 추가되는 데이터들은 별도의 ReadWrite레이어에 저장됩니다. 도커 컨테이너를 실행시키면 ReadOnly와 ReadWrite를 만들어서 같이 실행되어 하나의 프로세스가 되어서 동작을 합니다. 어떻게 ReadOnly와 ReadWrite가 하나인 것처럼 보일까요? 이것은 도커가 가지고 있는 레이어의 기술입니다. 이 레이어 기술을 유니온 파일 시스템 또는 overlay라고 합니다. 기존에 가지고 있던 ReadOnly 레이어에서 ReadWrite 레이어에 변경사항이 마치 하나인 것처럼 보여주는 것입니다. 도커에서는 컨테이너를 실수로 삭제하면 그 안에 있던 데이터가 다 날아갑니다. 이를 보안하기 위해 -v volume 명령어를 사용합니다.

 

2. volume 명령어

volume 옵션
-v <host path>:<container mount path>

-v <host path>:<container mount path>:<read writer mode>

-v <container mount path>

$ docker run -d --name db -v /data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:latest
데이터를 실제 호스트에 기록되게 볼륨 마운트하면 보안 이슈가 있다. 
해커가 파일을 저장하게되면 호스트에도 저장된다.

$ docker run -d --name db -v /data:/var/www/html:ro httpd
위의 보안 문제를 해결하기 위해 둘째 라인처럼 ro :readonly을 써준다.

$ docker run -d --name db -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:latest
-v 뒤에 호스트 주소가 없으면 data 디렉토리 처럼 uuid로 된 디렉토리를 만들고 
그 밑에 data디렉토리를 만들어서 거기에 저장된다.

 

3. 컨테이너끼리 데이터 공유하기

컨테이너와 컨테이너끼리 데이터 마운트로 데이터 공유가 가능합니다.

이를 이용하면 리눅스 컨테이너가 /webdata와 마운트 되어있고 index.html을 만들었고 nginx 컨테이너가 같은 폴더를 마운트하고 있으면 유저에게 index.html을 보여줄 수 있습니다. 또한 리눅스에서 index.html 파일을 변경하여도 적용됩니다.

 

4. volume 실습

docker exec -it db /bin/bash

위에 명령어는 도커에서 mysql에 접속하는 명령어입니다.

 

성공적으로 mysql에 접속한 것을 확인하실 수 있습니다. hs 라는 이름으로 database를 만들었습니다.

 

동작중인 컨테이너를 삭제하여도 호스트의 dbdata 디렉터리에는 hs 가 남아있는 것을 확인하실 수 있습니다.

 

-v 옵션에 host 디렉토리의 이름을 지정해주지 않았습니다.

 

docker inspect 명령어로 host 디렉토리의 이름을 지정하지 않으면 어느 디렉터리로 Mount 되는지 확인하였습니다.

host 디렉토리를 지정하지 않으면 /var/lib/docker/volumes/에 uuid로 디렉터리가 만들어지고 그 밑에 _data라는 디렉터리가 만들어진 것을 확인하실 수 있습니다.

728x90

+ Recent posts