SOPT 34기 서버파트/Docker 스터디 10

도커 컴포즈(Docker Compose)

도커 컴포즈(Docker Compose) 란 ?     YAML 이란 ?  주요 명령어docker compose up -d # YAML 파일에 정의된 서비스 생성 및 시작docker compose ps # 현재 실행중인 서비스 상태 표시docker compose build # 현재 실행중인 서비스의 이미지만 빌드docker compose logs # 실행 중인 서비스의 로그 표시docker compose down # YAML 파일에 정의된 서비스 종료 및 제거 Hitchecker 앱 실습  app.pyfrom flask import Flaskfrom redis import Redisapp = Flask(__name__)redis = Redis(host='redis', port=6379) # 레..

[Docker] 도커 실무에 적용하기

1. 레이어 관리- 이미지를 빌드할 때 레이어는 도커 파일의 지시어 한 줄당 새로운 레이어 하나가 추가 된다.- 불필요한 레이어가 많아지면 이미지의 크기가 늘어나고 빌드 속도가 느려질 수 있다. 레이어가 늘어나면 이미지의 크기를 증가시키고 빌드 속도가 느려지며 이미지 관리가 복잡해 지게 된다. 레이어의 개수를 관리하는 법 1.  RUN- RUN 지시어는 &&을 활용해 최대한 하나로 처리한다.- 불필요한 명령어를 추가해서 레이어의 개수를 늘리지 않는다.   RUN 지시어를 각각 사용한 이미지는 레이어가 총 5개 추가 되었고 모든 명령어를 하나의 RUN 지시어에 모아서 실행한 이미지는 레이어가 1개만 추가 되었다. 2.  alpine OS를 베이스 이미지로 사용  3.  .dockerignore 파일 사용해..

[Docker] 스토리지와 마운트 볼륨

컨테이너의 Stateless- 컨테이너는 상태 없음(Stateless) 이다. 컨테이너가 실행 된 후 발생하는 모든 변경 사항은 컨테이너 레이어에만 있으며 컨테이너가 종료되면 변경 사항이 모두 사라진다.- 컨테이너는 Stateless하기 때문에 쉽게 개수를 증가시킬 수 있으며 다른 환경에서도 빠르게 배포할 수 있다. - 소프트웨어의 버전 등 컨테이너의 상태 변경이 필요한 경우 새로운 버전의 이미지를 만들어서 배포한다- 컨테이너는 상태가 없기 때문에 여러 대의 컨테이너를 여러 곳에 빠르개 배포할 수 있다. - 클라우드 네이티브 환경에서는 MSA 아키텍처에 따라 서버의 개수가 매우 많아진다.모던 애플리케이션의 요구사항을 충족시키기 위해 서버 관리 방법론이 변화했다.- 전통적인 서버 방법론은 서버 한대를 중요..

[Docker] 가상 네트워크

네트워크 네트워크란 여러개의 장치들이 서로 연결되어서 정보를 주고 받을수 있는 시스템이다.정보를 주고 받기 위해 고유한 주소 역할을 하는 IP를 사용한다. 공인 IP와 사설 IPIP는 크게 전 세계적으로 고유한 공인 IP와 해당 공유 IP 내에 소속된 사설IP로 나뉜다. 위 사진은 현재 내가 사용하고 있는 공인 IP와 사설IP이다. IT 기업이 운영하는 인프라 환경 공인 IP를 사용하는 네트워크 통신을 공인망이라고 하며 기업 내부에서 사설IP를 사용한 통신망을 사설망 이라고 한다. 인터페이스와 포트네트워크 인터페이스는 인터넷에 연결하기 위해서 컴퓨터에 장착하는 부품이다. 네트워크 인터페이스는 IP를 가질수 있으며 IP를 할당받고 인터넷에 연결을 하기 위해서는 네트워크 장비와 랜선으로 연결이 되어 있어한다..

[Docker] 컨테이너 애플리케이션 구성

클라우드 네이티브(Cloud Native) 애플리케이션클라우드- 다른 회사의 서버를 빌려서 운영- 다른 회사가 모두에게 서버를 빌려줄 경우 : 퍼블릭 클라우드(Public Cloud)- 다른 회사가 특정 조직에게만 서버를 빌려줄 경우: 프라이빗 클라우드(Private Cloud)- 사용 요청 즉시 서버를 생성(Provisioning)- 실제 사용한 시간 만큼만 비용 지불 현대 애플리케이션이 겪는 다양한 문제들을 클라우드 환경 구성을 통해 해결1. 트래픽이 증가할 때 빠르게 대처할 수 있는가? (확장성, Scalability)클라우드 환경에서는 서버 추가가 10분 내로 이루어진다.온프레미스(기업이 직접 서버 구축)에서는 서버가 미리 준비되어 있지 않은 경우 새로운 서버를 증가하는데 오랜 시간이 소요된다.(..

[Docker] 이미지 빌드와 Dockerfile

- 이미지가 저장되는 두가지 원리 중 하나인 빌드- 이미지 빌드를 위한 Dockerfile 명세서를 위한 문법- 더욱 효율적인 이미지 빌드 방식 : 멀티 스테이징 이미지와 빌드(Build)IaC(Infrastructure as Code): 인프라 상태를 코드로 관리코드에 상세 작업 내용이 기재되며 사람이 아닌 프로그램이 수행을 해서 작업들을 빠르고 안전하게 실행할 수 있다.또한 코드에 들어가는 내용은 프로그램이 작업하기 위한 일련의 작업 명세서로 사용된다.그리고 이런 명세서를 github 같은 곳에 저장하면 인프라의 상태도 소스코드 처럼 버전 관리를 할 수 있다. Docker에서는 Dockerfile이라는 소스코드를 사용해서 인프라의 상태를 저장하는 이미지를 만들수 있다. 도커 커밋 방식의 문제커밋은 이..

[Docker] 이미지 레이어구조와 커밋

- 이미지를 효율적으로 저장하는 레이어드 구조- 이미지가 저장되는 두가지 원리 중 하나인 커밋  이미지와 레이어(Layer)이미지는 컨테이너를 실행하기 위한 읽기 전용 파일이다.커 이미지는 저장소를 효율적으로 사용하기 위해서 레이어드 파일 시스템으로 구성되어 있다. NGINX를 실행 했을 때 이미지를 다운 받는 과정에서 여러단계에 걸쳐서 Pull이 실행되고 있다.여기서의 한줄이 하나의 레이어를 의미하고 이 레이어들이 모여서 하나의 이미지로 구성된다. 천축 설계도면을 예시로 한 이해이미지의 레이어 구조는 재활용에 유리설계도 A에서 조경 부분을 수정해야 한다고 생각할 때 설계도 A가 한장의 도면으로 되어있다면 전체도면에 영향을 받게 된다.하지만 레이어 구조로 되어 있으면 조경 부분만 수정하면 나머지 전기,..

[Docker] 이미지와 컨테이너/레지스트리

이미지 Nginx와 직접 개발한 애플리케이션 같은 소프트웨어들은 해당 소프트웨어 하나만 독자적으로는 실행할 수 없다. 먼저, 소프트웨어가 하드웨어의 자원을 사용할 수 있도록 필수 기능을 제공해주는 1. OS가 필요하다. 또한 일반적으로 2. 특정 패키지나 라이브러리의 의존성을 가지고있으며 실행시키기 위해서 3. 런타임 언어를 설치해야한다. Nginx 웹서버를 컨테이너로 실행 시킬 경우 위와 같이 소프트웨어에 필요한 의존 요소를 설치하는 과정 없이 Nginx라는 이미지 이름만 지정했었다. 어떻게 서버를 구성하는 과정(OS,의존성,런타임) 없이 한번에 Nginx 프로그램을 실행할 수 있었을 까 ? 그 이유는 바로 Nginx 이미지를 통해서 컨테이너를 실행했기 때문이다. 이미지 : 파일시스템에 특정 시점을 ..

[Docker]가상화 기술[하이퍼바이저,컨테이너]

애플리케이션 서버 실제 기업에서는 한가지 서버가 아닌 여러 서버를 동시에 운영한다. 서버에서 어떤 소프트웨어가 실행 중인지에 따라서 다양하게 분류할수 있으며 대표적으로 아래 4가지가 있다. 1. 파일서버 2. DB서버 3. 웹서버 4. 웹애플리케이션 서버 1. 파일서버 - 파일 공유 소프트웨어가 설치되어 있으며 업로드와 다운로드와 같은 파일을 공유하는 기능을 클라이언트에게 제공한다. 2. DB서버 - 데이터를 관리하는 DBMS가 설치되어 있으며 데이터를 저장하는 기능을 클라이언트에게 제공한다. 3. 웹서버(Nginx) - 클라이언트가 웹 브라우저를 통해서 HTTP 요청을 보내면 정적인 웹페이지를 제공해준다. 정적인 웹페이지 : 주로 HTML, JavaScript, CSS같은 프론트엔드 개발자가 개발한 파..