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
- sudo cul -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose- `uname -s`-`uname -m` -o /usr/local/bin/docker-compose
- sudo chmod +x /usr/local/bin/docker-compose
설치 확인 : 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과 통합하도록 허락해줌
'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 |