도커 -> 쿠버네티스, 무중단 배포 기술과도 연관되어있다.
리눅스, aws, 웹 서버 에 대한 지식을 기반으로 도커를 사용할 수 있다.
docker 주요 명령, dockerfile, docker compose(여러 도커를 넣을 수 있는 기능).
서버: 24시간 구동, 특정 목적으로 사용되는 프로그램이 많다( 웹 서버 )
다양한 리눅스 패키지와 업데이트로 동일한 프로그램이라도 설정이 수시로 달라진다.
+ 서버 이전 시, 이전할 서버에 맞는 재설정이 필요하다.
도커: 서버 환경을 감싸서, 도커 레벨로 서버를 다룰 수 있다. ( 도커만 쓰면, 어느 환경에서든 동작하게 끔!)
ex) 서버 이전 시, 해당 도커 스크립트를 이전한 곳에서 동일하게 동작만 해주면 된다.
모놀리틱 구조: 하나의 프로그램이 모든 기능 (MVC등) -> 하나에서 관리하면 복잡, 한 부분만 고장나도 전체의 문제
마이크로 서비스: 하나의 서버에 모아놓지 않고, 각 서버에 기능을 분산해놓은 후, Rest API 등으로 통신을하여 전체 서비스를 운영.
따라서, 각각의 기능을 담당하는 서버를 도커로 말아 놓고 운영.
DevOps : 수많은 트래픽을 견뎌낼 수 있는 시스템을 만드는 것.
-> 자동 배포 관련 기능을 만들 수 있는 것. 운영+ 운영 시스템 효율화.
도커
release 시스템 자동화, 코드 리뷰, 테스트 자동화/
서비스 모니터링 시스템, 이슈 발생 시 커뮤니케이션 시스템
-> 각 마이크로 서비스를 도커로 개발.
쿠버네티스
초대용량 서비스 유지 보수를 위한 서버 핸들링(ex: 네트워크 트래픽에 따른 서버 관리 -> 사용자 적을때는 소수ㅢ 도커만, 많아지면 자동으로 도커 다수가 켜지게 만들기 와 같은 처리. )
배포 자동화
코드를 업데이트, 코드가 자동으로 빌드, 업데이트되어 도커로 말리고 서버에 배포되도록 "배포 자동화" ( jenkins/Travis CI 등으로 서버 재가동)
무중단 배포.
상시 릴리즈일시, 서비스가 조금도 중단되지 않게하기
리눅스: 서버 환경 특화. (리눅스는 유닉스를 대체하기 위해 나온 것)
금융권에서는 유닉스를 사용하기도함.
유닉스와 리눅스는 모두 유닉스 계열(UNIX-like)의 운영체제(OS)로, 유닉스는 상용(Commercial) 운영체제로서 주로 대기업이나 대형 시스템에서 사용되고 있습니다. 반면, 리눅스는 무료, 오픈소스 운영체제(OS)로서, 커뮤니티 기반의 지원을 받으며, 다양한 분야에서 사용됩니다.
리눅스는 유닉스의 코드를 기반으로 하지만, 코드 일부를 제외하고는 대부분 새로 작성되었기 때문에, 기능상 차이가 존재합니다. 또한, 리눅스는 개발 및 배포에 있어 유연성과 개방성이 높아, 비교적 쉽게 개발자나 사용자들이 접근하고 수정할 수 있습니다.
리눅스가 유닉스의 대체로 나온 이유는, 유닉스가 상용 운영체제로 라이선스 비용이 매우 높아 중소기업과 개인 사용자들이 접근하기 어려웠기 때문입니다. 이에 대항하여, 리눅스는 무료, 오픈소스 운영체제(OS)로 출시되어, 라이선스 비용 문제를 해결하고 다양한 분야에서 사용되게 되었습니다.
[리눅스]
- 클라우드 컴퓨팅(AWS가 대표적)
클라우드 컴퓨팅은 필요한 만큼만 가져다 쓰면된다. ( 만약 대규모 서비스 예상했는데 소규모 -> 컴퓨터 낭비, 소규모 예상했는데 대규모 -> 대처가 되지 않는다)
aws에서 서버를 만들고, 리눅스까지 설치할 것.
aws: ec2만 사용할 것. 리눅스 우분투 20.04버전
클라우드 컴퓨팅 서비스를 활용할 것.
Linux 구조
리눅스는 크게 커널, 셸, 디렉토리로 3가지로 구성되어 있다.
커널(kernel)
커널은 운영체제의 핵심으로 메모리관리, 프로세스 관리, 장치 관리등 컴퓨터의 모든 자원을 초기화하고 제어하는 기능을 수행한다.
셸(shell)
사용자가 입력한 문장을 읽어 요청을 실행하며 커널이 명령어를 해석해 결과를 수행한 후 결과를 다른 프로그램이나 커널로 전송한다.
즉 사용자와 커널의 중간다리 역할을 수행한다. 리눅스는 bash셸을 기본으로 사용한다.
디렉토리
파일을 가지고 있거나 또 다른 디렉터리를 가지고 있는 그룹을 의미하며 파일 시스템에 의해 관리되고 있다.
클라우드 컴퓨팅- 리눅스 설치하기 ( aws EC2 사용)
ec2 생성 -> 키페어 생성 후 저장해 놓기 ( 해당 키가 있어야 접근 가능)
탄력적 ip 주소 생성:외부에서 접속하기 어렵게 동적으로 주소가 바뀐다.
따라서 고정 ip를 서버에 부여해야한다. ( 아니면 과금 발생 )
다운 받은 key의 위치로 이동하여 chmod로 모드 변경 이후
해당 키를 기반으로 접속 ( ubuntu@탄력적ip에서확인한IPv4[퍼블릭] 주소
생성한 ec2에 접속 완료
리눅스: 모든 파일이 root 폴더 하위에 놓여진다(/~~~~~). ( window 는 C:/~~~, A:/~~~ 처럼 드라이버 별로)
쉘: 사용자 <> 하드웨어or 운영체제간 인터페이스
사용자 명령을 해석해서 커널에 요청 ( 시스템 콜 사용!)
ex) zsh. bash(기본)
리눅스, 유닉스 계열: 한컴퓨터 한대에, 여러명이 로그인하여 작업하는 "다중 사용" 에 특화되었다.
비밀번호 타이핑으로 인증하여 계정에 접속 or ssh키로 접속( 별도의 pw 필요 x)
리눅스 파일 시스템
리눅스의 파일 시스템에서 각각의 파일은 inode 라는 구조체로 관리된다.
inode는 파일의 메타데이터 정보를 포함하는 구조체로서, 파일의 소유자, 그룹, 권한, 생성 시간, 수정 시간, 파일 크기, 파일의 위치 등의 정보를 저장한다. inode은 파일 시스템 내의 각각의 파일에 대한 고유한 식별자 역할을 하며, 파일 이름은 inode에 대한 참조(reference) 역할을 한다.
리눅스 파일 시스템에서 파일을 생성하면, 새로운 inode가 생성되며 파일 이름과 inode 사이의 링크가 만들어진다. 파일 이름은 inode에 대한 참조(reference) 역할을 하며, inode 번호는 파일 시스템 내에서 파일을 식별하는데 사용된다.
리눅스 파일 시스템에서 파일을 삭제하면, 해당 파일의 inode와 데이터 블록은 삭제되지만, 파일 이름과 inode 사이의 링크는 유지된다. 이러한 링크를 통해 삭제된 파일에 대한 파일 이름이나 디렉토리를 사용하면 "존재하지 않는 파일"이라는 오류가 발생하게 된다.
inode는 리눅스 파일 시스템에서 파일을 관리하는데 중요한 역할을 하며, 파일의 메타데이터 정보를 저장함으로써 파일의 보안성, 안정성, 무결성을 보장한다.
pwd: 현재 폴더 경로
ls -al: 현재 폴더의 정보, 숨김 파일까지 함께 조회.
리눅스 권한.
OS: 사용자, 리소스 권한 관리
리눅스: 사용자, 그룹으로 권한 관리
파일마다 사용자, 사용자 그룹 모든 사용자에 대한 읽기, 쓰기, 실행(RWX) 권한을 관리한다.
소유자 그룹 기타(모든 사용자)
rwx rwx rwx
chmod 400 파일A. -> 파일 A의 권한을 설정하는 것.
cat: 파일 보기
cat 파일A. -> 파일A의 내용이 출력됨.
rm -rf
r 옵션: 하위 디렉토리를 포함해서 모든 파일 삭제
f 옵션: 강제 삭제
리눅스 Standard Stream
stdin (입력 스트림 -> 명령어로
stdout (출력 스트림 -> 화면으로
stderr. (오류 출력 스트림 -> 화면으로
이러한 통로들을 바꿔주는 기능이 리다이렉션&파이프
리다이랙션
ex)
ls > files.txt
ls로 출력되는 결과가 files.txt에 저장 ( 기존 files.txt에 덮어 쓴다)
ls >> files.txt
-> 기존 files.txt에 이어서 ls의 출력결과가 들어온다.
head < files.txt files.txt
head: ls와 유사, 단 앞단 10줄만 출력하는 것.
files.txt의 파일 내용이 head 명령어의 입력으로 들어간다. -> files.txtdml 앞단 10줄이 출력됨
파이프: 두 프로세스 사이에서 A 프로세스의 출력 스트림을 B 프로세스의 입력 스트림으로 사용할 때.
ls -al | grep bash
ls 명령을 통한 출력이 grep 명령의 입력으로 들어간다.
grep xxx: 입력 데이터 중에서 "xxx" 를 가지고 있는 라인을 출력
ps aux | grep xxxx
현재실행 중인 프로그램 리스트(ps aux) 에서, xxxx라는 이름을 가진 프로그램이 있나 체크 (xxxx 프로세스가 수행 중인지 체크하는 것)
보통 위의 명령어로 체크하고,
kill -9 pid로 프로세스 제거.
-9 옵션: 강제종료 옵션
ps: 내가 수행 시킨 프로세스만
ps aux: 전체 프로세스
프로세스 vs 바이너리
바이너리 파일: 0101...... 실제 실행 가능한 파일. 운영체제가 이를 실행하면, 프로세스로 바꿔서 실행.
바이너리-> 메모리에 넣고, cpu가 실행.
유닉스 철학: 여러 프로그램이 유기적으로 각자의 일을 수행하는 것
프로세스
foreground: 쉘에서 해당 프로세스 실행을 명령하면, 해당 프로세스 종료 전까지 사용자가 다른 입력 수행 불가
background: 사용자 입력과 상관없이 실행되는 프로세스. -> 명령어의 끝에 & 를 붙이면 다른 명령어 수행 중에도 수행가능.
수행 시간이 긴 명령어는 background로.
자주 사용하는 프로세스 명령 요약
ps aux | grep 프로세스 명 //프로세스가 실행 중인지 확인하고 실행 중이라면 정보 출력
kill -9 PID // 해당 프로세스를 강제 종료
~~~~명령어 & // 해당 명령어를 background로 실행( 프로세스 시간이 오래걸릴 경우 사용 )
ctrl+c // 프로세스 종료(실행 취소)
[하드링크 & 소프트링크]
Inode: 유닉스 계통의 파일 시스템에서 사용하는 자료 구조
cp 명령: 파일 복사
cp A B ->. A파일을 B 파일로 복사 (B파일 존재 x 시 생성 후 복사) ( A,B 는 각각 물리적인 파일을 가진다)
cp rf: 모든 하위 디렉토리, 파일까지 전부 복사
-> A 파일, B 파일의 변화는 독립적( ex: A 바뀐다고 B도 바뀌지 않는다)
하드 링크(파일의 물리적 위치를 참조): 기존 파일에 대한 새로운 파일이름을 생성한다. 즉 원본 파일, 메타 데이터가 그대로 유지된다.
하드링크는 원본 파일의 inode의 위치를 가르킨다. -> 따라서 원본 파일을 지워도 같은 inode를 가르키는 B로 접근 할 수 있는 것.
파일명만 다르지 사실상 하드링크, 원본파일을 구분할 수 없다.
(원본과 복사본의 차이가 없다)
ln A B
따라서 하드링크를 만들면 파일 크기가 변하지 않는다. 하지만 하드링크는 "동일한 파일 시스템" 에 존재해야하고, 원본이 삭제되어도 유효하다.
(A 파일 변경 시 B 파일도 변경)
ln A B -> 동일한 파일을 가진 이름을 하나 더 만든 것일 뿐이다. ( A,B는 같은 파일을 가르킨다)
소프트 링크 (파일의 경로를 참조)
원본 파일에 대한 정보가 포함되어 있지 않고, 원본 파일 "위치"에 대한 포인터만 포함한다. 즉 새로운 inode를 가진 링크파일이 생성된다.
ln -s. A B (B가 A 파일을 참조한다)
윈도우의 바로가기와 유사.
매우 적은 용량만 차지, 실제 파일 가르키는 포인터
ls-al로 소프트 링크를 확인할 수 있다.
소프트 링크는 파일 시스템에서 파일의 경로를 참조한다. 소프트 링크를 생성하면 새로운 파일 이름이 생성되고, 이 파일 이름은 원본 파일의 경로를 참조한다. 즉, 소프트 링크는 원본 파일이나 디렉토리를 가리키는 단순한 포인터이다.
소프트 링크는 다른 파일 시스템에 있을 수 있으며, 원본 파일이 삭제되면 소프트 링크는 무효화된다.
복사 vs 하드 링크 : "복사" 는 내용만 가져오고 완전히 독립적인 파일을 만들지만, "링크" 는 하나의 파일에 대한 링크를 추가하는 것.
cp A B. vs ln A B
복사: A가 변경되도 B 변화 x
링크: 변화가 반영( 하나의 소스를 공유)
하드 링크 vs 소프트 링크:
하드 링크: A 삭제시, B는 유지된다
소프트 링크: A 삭제 시, 그를 참조하는 B 도 삭제된다.
+ 하드링크는 "같은 파일 시스템" 내에서만
웹서버 설정을 softLink를 통해 다른 곳의 특정 폴더에 넣어서 웹서버를 추가로 설정하는 경우도 있다.
( 소프트 링크는 다른 파일 시스템으로 파일을 이동할 때 유용)
[리눅스 - 우분투 패키지 관리]
리눅스: 리눅스 커널( 사용자 명령을 받을 수 있는) ex: bash 외에도, 여러가지 파일들이 세트로 묶여있다.
이러한 세트의 다양한 조합으로 다양한 배포판이 생김
ubuntu: 리눅스의 배포판 중 하나.
ubuntu: apt 명령어 사용
sudo apt-get update: 패키지 인덱스 정보 업데이트
sudo apt-get upgrade: 인덱스 정보를 기반으로 모든 우분투 기능을 최신버전으로 업데이트 ( 주의!!)
sudo apt-get install 패키지 명
vim
일반 모드에서 v 로 Visual 모드 전환 후 복사를 수행 가능 하다!
리눅스 자주 쓰이는 명령어들 (adding)
mv A B. -> A를 B로 이동한다는 뜻이지만, A파일의 이름을 B로 변경할 때도 사용된다.
'DevOps' 카테고리의 다른 글
[도커] Nginx 웹서버 설정 이해하기 (1) | 2023.04.20 |
---|---|
[도커] Docker Compose (0) | 2023.04.19 |
[도커] 도커 활용 (0) | 2023.04.19 |
[도커] Docker File 기본 사용법 (0) | 2023.04.18 |
[도커] Mac에서 도커 세팅법 (0) | 2023.04.14 |