본문 바로가기
CS(Computer Science)/소프트웨어공학

5. Docker3

by 동욷 2023. 2. 6.

#Docker #Compose

Monolithic App : 모든 기능이 단일 프로그램 안에 구현

  • 비현실적, 비효율, 매우 낮은 생산성
  • 비대한 app, 일부가 update 되어도 전체 app이 re-deploy되야함
  • bug가 app 전체에 영향을 미침

Microservices : 거의 모든 응용, 특히 Web 기반 App

(front end + backend sevices)

  • 각 단일 서비스가 loosely coupled
  • Communication은 프로그램 속에서 arg 전달하는 대신 HTTP 통신 프로토콜 등을 통한 테이터 교환
  • REST(ful) API (JSON)
  • 각 service들은 bug 관점에서 상호 독립적

Docker-compose

  • Interactive 방법 또는 dockerfile로 image를 만드는 것은 단일 컨테이너를 만드는 것이다
  • Docker-compose는 다수의 docker container들을 규정하고 실행하고 관리하는 automation 도구이다.

Install docker-compose on Ubuntu

설치 확인 : docker-compose --version

mkdir test;

cd test;

vim docker-compose.yml

version : '3.9'

services:

hello-world:

image: hello-world:lateset

docker-compose up -d

docker ps

시험 예제

version: "3.9"

services:

db:

image: mysql:5.7

volumes:

- db_data: /var/lib/mysql // named volume

restart: always

environment:

MYSQL_ROOT_PASSWORD: somewordpress

MYSQL_DATABASE: wordpress

MYSQL_USER: wordpress

MYSQL_PASSWORD: wordpress

wordpress:

depends_on:

- db

image: wordpress:latest

volumes:

- wordpress_data: /var/www/html // named volumes

ports:

- "8000:80" // port forwarding, EC2 기계 inbound rule에 반영해야 함

restart: always

environment:

WORDPRESS_DB_HOST: db

WORDPRESS_DB_USER: wordpress

WORDPRESS_DB_PASSWORD: wordpress

WORDPRESS_DB_NAME: wordpress

volumes: // named volumes

db_data: {}

wordpress_data: {}

Docker volume

  • 호스트 기계의 on-disk persistent filesystem을 컨테이너의 in-memory virtual filesystem에 mount하여 컨테이너가 종료되어도 데이터가 사라지지 않고 호스트 기계의 파일 시스템에 저장되어 다시 동일 컨테이너가 시작되어 과거 데이터를 사용할 수 있도록 제공된 기능
  • DB 사용하는 컨테이너의 경우에는 필수적

(1) host volume : docker run -v /home/mount/data:/var/lib/mysql/data

(2) anonymous volume : docker run -v /var/lib/mysql/data

(3) named volume : docker run -v name:/var/lib/mysql/data


#Docker #compose #multi-container

JSON(JavaScript Object Notation)

  • Open standard file format
  • interchange format
  • 사람이 읽을 수 있는 text의 형태로 data를 저장 및 전송한다
  • data는 크게 key-value pairs와 array data types의 object로 이루어져 있다.
  • 언어 독립적인 data format
  • JavaScript로부터 파생되었으나, 많은 현대 프로그래밍 언어들이 JSON format data를 파싱하는 데 사용한다

class-offering: index.php (in ./classes)

<?php

$myclasses[] = "software engineering"

$myclasses[] = "project"

$myclasses[] = "web programming"

$myJSON = json_encode($myclasses);

echo $myJSON;

?>

Website: index.php (in ./website)

<!DOCTYPE html>

<html lang = "en">

<head>

<meta charset = "UTF-8">

<meta http-equiv = "X-UA-Compatible" content = "IE=edge">

<meta name = "viewport" content="width = device - width, initial-scale = 1.0">

<title> Classes Offered </title>

</head>

<body>

<h1> Classes Offered by Lee Dong Wook </h1>

<ul>

<?php

$json = file_get_contents('http://class-offering');

$obj = json_decode($json);

 

foreach ($obj as $class) {

echo "<li> $class </li>"

}

?>

</ul>

</body>

</html>

Docker networks

  • docker-compose up -d
  • docker network ls
  • docker network : container들 사이의 소통을 위해 docker에서 제공하는 네트워크

네트워크 종류

  • bridge - default - virtual L2 switch : 각각의 container는 고유 private IP 주소를 가지고 있다
  • host - host의 네트워크와 동일한 네트워크 사용
  • overlay - docker swarm service 네트워크 - conventional overlay network
  • macvlan - MAC주소에 대한 완전한 제어를 제공 : 각각의 containter는 고유 MAC주소와 고유 IP 주소 가짐
  • ipvlan - IP 주소 사용에 대한 완전한 제어를 제공 : 각각의 container는 다른 container들과 MAC을 공유하는 고유 IP 주소를 가짐
  • none - full customization을 위한 network interface 이 없음

사용자 정의 bridge network : 같은 Docker host에서 다수의 container들과 소통해야 할때

Host network : network stack이 Docker host로부터 독립적이면 안되지만, container의 다른 부분은 독립적이어야 할 때

Overlay network : 다른 Docker hoost에서 실행중인 container들끼리 소통하거나, swarm service를 이용하여 다수의 application을 작동해야 할 때

Macvlan / ipvlan network : container를 너의 network에서 물리적 host처럼 보이고 싶을때

Third-party network : Docker를 spcialized network stack과 통합하도록 허락해줌

728x90

'CS(Computer Science) > 소프트웨어공학' 카테고리의 다른 글

7. KUBERNETES  (0) 2023.02.06
6. Network Virtualization  (0) 2023.02.06
4. Docker2  (0) 2023.02.06
3. Docker  (0) 2023.02.06
2.Git/Github  (0) 2023.02.06