Search
Duplicate

Inception

인셉션 안보고 인셉션 풀기
목차

Inception

가상머신 위에서... 도커 컴포즈... 도커 파일...
맥북 m1 에서는 Virtual Machine 이 깔리지 않는다...
GCP로 가상 인스턴스 돌려서 실습하자
클러스터를 매일 나가자!

Subject

subject.pdf
서브젝트 내용 (해석 이상할 수 있음. thanks for PAPAGO)
도커 vs VirtualMachine
Docker
도커
컨테이너
가상화
도커 이미지
docker build
docker run
데몬?
도커 컴포즈
비슷한 다른 기능들과 도커 컴포즈의 장점
도커 네트워크
도커 볼륨
YAML 파일
.env

가상화

1) 플랫폼 가상화
하드웨어 플랫폼 위에서 실행되는 호스트 프로그램이 게스트프로그램을 만들어 마치 독립된 환경을 만들어낸 것처럼 보여주는 기법. 하드웨어 플랫폼 위에서의 제어 프로그램, 호스트 소프트웨어를 통해 실행
2) 리소스 가상화
게스트 소프트웨어 위에서, 사용자는 독립된 하드웨어에서 소프트웨어가 실행되는 것처럼 활용하는 기법. 메모리, 저장장치, 네트워크 등을 결합하거나 나눔.
컴퓨터 리소스의 물리적인 특징을 추상화, 사용자에게 논리적 리소스를 제공.
→가상화에 대해 찾아보다 보니 약간 산으로 가는 기분이다....

컨테이너 VS 가상머신

가상머신(VM)은 Host OS위에 GuestOS가 실행될 두 있도록 기본 하드웨어를 가상화한다. Guest OS는 각 OS의 이미지, 애플리케이션, 라이브러리 등을 포함한다. 하이퍼바이저(hypervisor)는 GuestOS들을 관리하고, 시스템 자원을 GuestOS에게 분배할 수 있도록 자원을 가상화 하는 역할을 한다.
VM→커널을 따로 만들어줌
컨테이너→커널을 호스트와 공유함
컨테이너는 기본 OS를 가상화하고 컨테이너화 된 앱이 CPU, 메모리, 파일스토리지, 네트워크 연결 등 OS를 자체적으로 포함하고 있다고 인식하도록 한다.(?)
컨테이너는 호스트OS의 자원인 커널을 공유하므로 OS를 부팅하거나 라이브러리를 로드할 필요가 없다.
컨테이너는 이식 가능하지만, 컨테이너가 정의된 운영체제로 제한된다. 예를들어 Linux용 컨테이너는 Windows에서 실행할 수 없으며, 그 반대의 경우도 마찬가지 이다.
도커 컨테이너는 리눅스 기반으로 돌아가기 때문에, Docker for mac 혹은 Docker for windows 를 설치해서 도커를 깔면 가상머신의 리눅스 위에서 돌아가게 된다. 리눅스 위에서 도커를 깔면 그 리눅스 위에 컨테이너가 생긴다.
컨테이너는 리눅스 상에서 이용되고, 리눅스 자체 기능만으로 구현되어 프로세스 단위로 독립적인 공간을 만드는 기술이다. 도커의 컨테이너는 리눅스의 컨테이너를 이용한 것이고, 리눅스의 컨테이너에 여러 기능을 추가하여 조금 더 이용하기 쉽게 만들어둔 것이다.

Docker

도커는 리눅스의 응용프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈소스 프로젝트이다. (위키)
도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싼다. 여기에는 코드, 런타임, 시스템도구, 시스템라이브러리 등 서버에 설치되는 무엇이든 아우른다. 이는 실행중인 환경에 관계 없이 언제나 동일하게 실행될것을 보증한다. (도커 웹페이지 인용)
한 소프트웨어를 만들었을 때, 각 서버나 컴퓨터마다 환경이 다르다면 소프트웨어가 제대로 동작하지 않을 수 있다. 따라서 OS위에 컨테이너를 만들고, 그 안에서 소프트웨어 동작 환경을 설정해준다면 그 컨테이너를 이용하여 어떤 환경에서든 소프트웨어가 동작할 수 있게 만들어준다.
또한 매번 소프트웨어를 실행시킬 때마다 컨테이너를 만들고, 그 내부의 환경들을 하나하나 설치하기에는 매우 번거롭기 때문에, 우리는 Dockerfile 을 사용하여 컨테이너에 설치해야 하는 패키지, 소스코드, 명령어, 환경변수 설정 등을 기록할 수 있다.
컨테이너를 이미지로 만들 때는 커널에 대한 내용을 포함할 필요가 없기 때문에 VM에 비해 이미지의 크기가 작다.
Dockerfile 은 ft_server 과제에서 써 본 경험이 있지만 전혀 기억이 안나므로 다시 공부해야 한다!
ft_server의 도커파일
Dockerfile 지시어
도커파일은 써보면서 익혀야 할 것 같다.

Docker build

docker build -t [image name] [PATH]
-t : 이미지 이름 지정 옵션
PATH : dockerfile의 경로
도커파일을 빌드하면 Docker image 가 생성된다. docker images [image name] 명령어로 확인할 수 있다.

Docker image

도커의 이미지는 여러 레이어로 구성되어 중복되는 레이어에 대해선 재사용 할 수 있도록 만들어졌다. 즉, [A, B, C] + [A, B, D] ⇒ [A, B, C, D]

Docker daemon

/usr/bin/dockerd
도커의 구조는 크게 두가지로 나누어진다. 하나는 클라이언트 도커 이고 다른 하나는 서버 도커 이다.
실제로 컨테이너를 생성하고 실행하며 이미지를 관리하는 주체는 서버 도커 이고, 이는 dockerd 프로세스로서 동작한다.
도커 엔진은 외부에서 API를 입력받아 도커 엔진의 기능을 수행하는데, 이 API를 사용할 수 있도록 CLI를 제공하는 것이 도커 클라이언트 이고, 도커 프로세스가 실행되어 서버로서 입력을 받을 준비가 된 상태를 도커 데몬 이라고 이야기한다.

Docker compose

도커파일→빌드→도커이미지→컨테이너 생성.
하지만 컨테이너를 여러 개 생성해야 한다면? → 하나하나 이미지를 실행시켜 만들고 설정하기는 너무 귀찮다.
→ 도커 컴포즈 파일에 미리 여러 컨테이너를 정의해두고 실행순서, DB연결 등을 정할 수 있다!
(쿠버네티스도 여러 도커 컨테이너를 관리하는 도구이다. 하지만 쿠버네티스는 쿠버네티스 클러스터 내에서 컨테이너 생성이고, 도커 컴포즈는 host 컴퓨터 내에 컨테이너를 만든다)
ft_server 과제를 할 땐 하나의 컨테이너에 DB, nginx, wordpress 등을 설치하여 실행했는데, 이번 과제에서는 각 컨테이너 하나에 하나의 기능을 넣고, 그 컨테이너들을 연결하는 도커 네트워크를 설정하여 서로 연결시켜야 한다.
Docker expose vs docker run -p
EXPOSE 를 했다고 해서 컨테이너의 포트가 공개되는 것은 아님!
예를 들어 도커 파일에 EXPOSE 8888로 적혀있다면 해당 이미지로 생성된 컨테이너는 외부로 8888번 포트를 개방하겠다는 뜻이다. 그리고 호스트 OS에서 해당 컨테이너를 실행시킬 때 위 포트로 매핑시키면 드디어 의미가 있어진다.

Inception

virtualBox에 Debian 설치

→ 설치 하고 세팅 해둔 뒤 그 파일 압축해서 들고 다니면 된다!
→무작정 디폴트로 enter만 치지 말고 좀 읽어보기...^^
→hostname 비밀번호 까먹어서 다시 깔아야하는 슬픈 이야기...
→다 1234로 통일!
ssh 연결해서 맥의 iterm 에서 쓸 수 있게 하기
권한설정하기
sudo chown username:docker /var/run/docker.sock
mariadb - 사용자 내용, 글 내용, 댓글 내용 등 데이터 저장
wordpress - CMS(Content Management System)

nginx

nginx는 ft_server때처럼 ssl 보안이 아닌 TLS 이 적용된다. (같은...건가...?)
ft_server 자료 정리.pdf
2579.0KB
by hyeykim