해당 포스팅은 이성미 강사님의 따라 배우는 도커(따배도, https://www.youtube.com/@ttabae-learn)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
오늘은 고통스럽다.
내일은 더 고통스럽다.
그리고 내일 모래는 아름다울 것이다.
Mǎ Yún(알리바바 그룹 창업자 겸 회장)

Container 하드웨어 리소스 제한


  • 기본으로 컨테이너는 호스트 하드웨어 리소스의 사용제한을 받지 않음.
    • 컨테이너가 필요한만큼 할당해야 함.
  • docker command를 통해 제한할 수 있는 리소스
    • CPU
    • Memory
    • Disk io
    • docker run --help를 통해 확인 

Memory 리소스 제한

  • 제한 단위 b(byte), k(KB), m(MB), g(GB)
  • --memory, -m
    • 컨테이너가 사용할 최대 메모리양 지정
    • 할당된 것보다 더 많은 메모리 사용시 죽어버림
  • --memory-swap
    • 컨테이너가 사용할 스왑 메모리 영역에 대한 설정
    • 메모리 + 스왑 메모리
    • 생략시 메모리의 2배가 설정
  • --memory-reservation
    • --memory 값보다 작은 값으로 구성하는 소프트 제한 값 설정
  • --oom-kill-disable
    • OOM Killer가 프로세스 kill하지 못하도록 보호

CPU 리소스 제한

  • --cpus
    • 컨테이너에 할당할 CPU core 수 설정
    • --cpus="1.5" 컨테이너가 최대 1.5개의 CPU 파워 사용 가능
    • 연산 작업이 많은 컨테이너에 cpu 수를 늘리면 좋음.
  • --cpuset-cpus
    • 컨테이너가 사용할 수 있는 CPU나 코어를 할당. cpu index는 0부터
    • --putset-cpus=0-4
  • --cpu-share
    • 컨테이너가 사용하는 CPU 비중을 1024 값을 기반으로 설정.
    • --cpu-share 2048 기본값보다 두배 많은 CPU 자원 할당.

Block IO 제한

  • --blkio-weight, --blkio-weight-device
    • Block IO의 Quota를 설정할 수 있으며 100~1000까지 선택
    • default 500
  • --device-read-bps, --device-write-bps
    • 특정 디바이스에 대한 읽기와 쓰기 작업의 초당 제한을 kb, mb, gb 단위로 설정
  • --device-read-iops, --device-write-iops
    • 컨테이너의 read/write 속도의 쿼터를 설정.
    • 초당 quota를 제한해서 IO를 발생시킴. 0이상의 정수로 표기
    • 초당 데이터 전송량 = IOPS * 블럭 크기(단위 데이터 용량)

컨테이너 사용 리소스를 확인하는 모니터링 툴


  • docker monitoring commands
    • docker stat: 실행중인 컨테이너의 런타임 통계
      • docker stats [options] [container]
    • docker event: 도커 호스트의 실시간 event 정보를 수집해서 출력
      • docker events -f container=<MAME>
      • docker image -f container=<MAME>
  • docker monitoring application

'CICD > docker' 카테고리의 다른 글

[Docker] Container 간 통신  (2) 2024.06.19
[Docker] Container Storage  (0) 2024.06.18
[Docker] Container 사용하기  (0) 2024.06.17
[Docker] Container Registry  (0) 2024.06.17
[Docker] Docker Container 만들기  (0) 2024.06.17
해당 포스팅은 이성미 강사님의 따라 배우는 도커(따배도, https://www.youtube.com/@ttabae-learn)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
오늘은 고통스럽다.
내일은 더 고통스럽다.
그리고 내일 모래는 아름다울 것이다.
Mǎ Yún(알리바바 그룹 창업자 겸 회장)

현재까지 프로세스


Container Image 관리


  • Container Life Cycle에 관한 내용
  • 이미지 검색: docker search [option] <imageName:tag>
  • 이미지 다운로드: docker pull [option] <imageName:tag>
    • <imageName:tag> 이름으로 repository에서 관리.
    • 같은 버전이여도 이름이 다르면 repository에서 따로 저장됨.
    • Image는 imageID로 구분하기에 같은 imageId를 가진 두개의 image가 생성됨.
  • 다운받은 이미지 목록 출력: docker images
  • 다운받은 이미지 상세보기: docker inspect [option] <containerName>
  • 이미지 삭제: docker rmi [option] <imageName:tag>

Container 실행 Life Cycle


  • docker host에 다운받은 이미지를 컨테이너화: docker create [option] <imageName:tag>
    • 기본이 백그라운드에서 동작
    • docker create --name webserver nginx:1.14
  • docker daemon에 컨테이너 실행: docker start [option] <container>
    • create 상태인 컨테이너를 running
    • docker start webserver
  • 컨테이너 생성 및 실행: docker run [option] <imageName:tag>
    • pull -> create -> start를 한번에 실행해주는 명령어.
    • docker run --name webserver -d nginx:1.14
  • 실행중인 컨테이너 확인: docker ps [option]
    • docker ps
  • 실행중인 컨테이너 상세보기: docker inspect [option] <imageName:tag>
    • ip addr, layer, resource 등등을 보여줌
    • docker inspect webserver
  • 동작중인 컨테이너 중지: docker stop [option] <container>
    • docker stop webserver
  • 컨테이너 삭제: docker rm [option] <container>
    • running 중인 컨테이너는 삭제 불가
    • docker rm webserver

Container 확인


  • 컨테이너 동작되는 프로세스 확인: docker top [option] <container>
    • docker top webserver
  • 현재 컨테이너의 Log 정보확인: docker logs [option] <container>
    • docker logs webserver
  • 현재 컨테이너에 추가 명령어 실행: docker exec [option] <container>
    • docker exec webserver /bin/bash
  • foreground로 실행중인 컨테이너에 연결: docker attach [option] <container>
    • docker attach centos

Example


ip 부분은 가렸습니다

 

'CICD > docker' 카테고리의 다른 글

[Docker] Container Storage  (0) 2024.06.18
[Docker] Container 관리  (0) 2024.06.17
[Docker] Container Registry  (0) 2024.06.17
[Docker] Docker Container 만들기  (0) 2024.06.17
[Docker] Container 개념  (0) 2024.06.17
해당 포스팅은 이성미 강사님의 따라 배우는 도커(따배도, https://www.youtube.com/@ttabae-learn)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
오늘은 고통스럽다.
내일은 더 고통스럽다.
그리고 내일 모래는 아름다울 것이다.
Mǎ Yún(알리바바 그룹 창업자 겸 회장)

Docker Registry


  • 컨테이너 보관창고
    • 컨테이너를 모아놓은 저장소
  • 종류
    • Registry: 컨테이너 이미지를 저장하는 저장소
    • Docker hub: hub.docker.com
    • private registry: 사내의 컨테이너 저장소

Docker hub 사용하기(public registry)


  • https://hub.docker.com
    • 도커 계정을 만들어야함.
  • image 종류: official images(도커 허브가 운영하는 이미지), verified publisher, etc
  • 이미지 검색: docker search <keyword>
    • repository 이름이나 description에 정의된 이름에서 찾음.
  • 이미지 다운: docker pull <repository name>:<version>
  • docker hub 로그인: docker login
    • docker logout 하기 전까지 항상 로그인 유지
    • 아래 보이는 경로에 로그인 정보 저장.

  • docker Image name 변경: docker tag httpd:latest hiro/httpd:latest
    • 나의 docker hub repository에 푸시하기 위해서는 내 계정 정보가 이미지에 저장되어 있어야 함.
  • docker hub에 넣기: docker push hiro/httpd:latest

Private Registry 구축


  • registry 컨테이너를 이용해 Private 컨테이너 운영
    • docker run -d -p 5000:5000 --restart always --name registry registry:2
    • registry 컨테이너 다운받고 실행.
  • image repository ⇒ private registry 구축.
    • localhost:5000/ubuntu:18.04
    • docker.example.com:5000/ubuntu:18.04
    • docker hub와 마찬가지로 localhost:5000과 같은 Host 명이 있어야 Private registry에 업로드 가능
docker tag httpd:latest localhost:5000/httpd:latest
docker images localhost:5000/httpd
docker push localhost:5000/httpd:latest

'CICD > docker' 카테고리의 다른 글

[Docker] Container 관리  (0) 2024.06.17
[Docker] Container 사용하기  (0) 2024.06.17
[Docker] Docker Container 만들기  (0) 2024.06.17
[Docker] Container 개념  (0) 2024.06.17
[Docker] Docker 설치  (0) 2024.06.16
해당 포스팅은 이성미 강사님의 따라 배우는 도커(따배도, https://www.youtube.com/@ttabae-learn)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
오늘은 고통스럽다.
내일은 더 고통스럽다.
그리고 내일 모래는 아름다울 것이다.
Mǎ Yún(알리바바 그룹 창업자 겸 회장)

컨테이너 대상


개발한 애플리케이션(실행파일)과 운영환경이 모두 들어있는 독립된 공간

  • 개발한 프로그램과 실행환경을 모두 컨테이너화
  • MSA 환경의 Polyglot 애플리케이션 운영
💡 MSA(Micro Service Architecture)
짧은 life Cycle을 가진 요즘 프로그래밍들에 대해 재빠른 대응 가능

컨테이너 만드는 법 => DockerFile


  • Container를 만들 수 있도록 도와주는 명령어 집합.
  • Dockerfile을 통해서 컨테이너 build!

Dockerfile

  • 쉽고 간단하고 명확한 구문을 가진 text file로 Top-Down 해석.
  • 컨테이너 이미지를 생성할 수 있는 instruction을 가짐.
  • 대소문자를 구분하지 않으나 가독성을 위해 사용
# 디렉토리 생성
mkdir build
cd build

# 실행파일 작성
vi hello.js

# 도커파일 작성
vi dockerfile

# 도커파일 내용
FROM node:12 # base image 생성
COPY hello.js / # 컨테이너의 루트 디렉토리에 hello.js 복사
CMD ["node", "/hello.js"] # 실행

# image 생성
docker build -t imagename:tag .;
docker build -t hellojs:latest .;

Dockerfile 문법

더보기

FROM

  • 베이스 이미지 지정 명령
  • Dockerfile에 무조건 있어야하는 명령어.

LABEL

  • 메타 데이터를 넣을 수 있는 기능
  • =을 기준으로 저자, 버전, 설명, 작성일자를 key를 왼쪽으로 value를 오른쪽에 작성

CMD

  • 컨테이너 동작시 자동으로 실행할 서비스나 스크립트 지정

RUN

  • 이미지 생성시, base image에서 실행할 command

COPY

  • 컨테이너 빌드 시 호스트 파일을 컨테이너로 복사

ADD

  • 컨테이너 빌드시 호스트의 (tar, url)을 컨테이너로 복사

ENV

  • 컨테이너 내의 환경변수 설정

USER

  • 명령 및 컨테이너 실행시 적용할 유저 설정

WORKDIR

  • 이미지 내에서 특정 폴더로 이동하기 위해서 쓰는 명령

EXPOSE

  • docker 컨테이너의 특정 포트를 외부에 오픈하는 설정
  • docker run -p 옵션과 유사. -p옵션과 다르게 매핑은 해주지 않고 외부에 포트를 여는 역할만.

VOLUME

  • 컨테이너내의 특정 디렉토리를 컨테이너 외부 경로에 마운트

컨테이너 배포


  • docker build -t hellojs:latest .
    • docker host에서 container 이미지 생성
    • image name은 hellojs tag는 latest
  • docker login
    • 인증
  • docker push hellojs:latest
    • docker hub에 push

nodejs 기반 애플리케이션 컨테이너 만들기


만들어놓은 컨테이너 배포하기


  • docker login
    • docker hub에 로그인
  • docker <userID>
  • docker tag <oldname> <newName>
    • image 바꾸기

  • docker push <userId>/<images>:<tag>
    • user 계정으로 container 이미지 업로드.

 

'CICD > docker' 카테고리의 다른 글

[Docker] Container 사용하기  (0) 2024.06.17
[Docker] Container Registry  (0) 2024.06.17
[Docker] Container 개념  (0) 2024.06.17
[Docker] Docker 설치  (0) 2024.06.16
[Docker] Container를 쓰는 이유  (2) 2024.06.14
해당 포스팅은 이성미 강사님의 따라 배우는 도커(따배도, https://www.youtube.com/@ttabae-learn)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
오늘은 고통스럽다.
내일은 더 고통스럽다.
그리고 내일 모래는 아름다울 것이다.
Mǎ Yún(알리바바 그룹 창업자 겸 회장)

Continaer Vs Container image


Container

  • 컨테이너는 하나의 Application 프로세스
  • 컨테이너는 완벽히 독립적인 공간에서 실행(Cpu, memory, network, disk 등등이 별도..)
  • docker Host ⇒ docker를 설치해서 daemon을 실행하는 것.(docker를 실행할 수 있는 platform 세팅)

Container image

  • build할 때 이 구조를 따라야 함.

Container와 Container image 도식화

  • Docker Host에 docker daemon 실행.
  • 하드 디스크에 file 형태로 container image들이 존재.
  • 메모리에 application이 running 중 ⇒ running 중인 프로세스(이미지) container

컨테이너 동작


  • 도커 허브에 여러 image들 저장.
  • docker search nginx를 하면 docker hub에 nginx 이미지를 가져옴
  • docker pull nginx:latest하면 nginx의 이미지를 docker hub에서 가져와 disk에 저장.
  • docker run -d —name web -p 80:80 nginx:latest으로 실행

용어정리

  • Docker Host(Linux Kernel): 도커를 실행한 client
  • Docker Daemon: docker가 실행되어 있는 환경
  • Docker Client Command:
  • Docker Hub: docker image 집합소
  • Container Images: disk로 가져온 image
  • Container: image를 실행한 Process

Docker Hub에서 컨테이너 이미지 검색


  • docker version
    • 현재 docker daemon 버전 확인
  • systemctl status docker
    • docker 상태 확인.
  • docker search <image>
    • docker hub에 해당 Image가 있는지 확인.
  • docker images
    • 내 컴퓨터 내 docker image 확인

  • docker pull <Image>
    • docker hub에 Image download
    • 다음과 같이 7개의 layer로 구성
  • docker run --name web -d -p 80:80 nginx
    • 독립적인 container id를 통해서 container 실행
  • docker ps
    • 현재 실행중인 docker process

  • docker stop web
    • web이라는 Image stop
  • docker rm web
    • 컨테이너 삭제
  • docker rm image web or docker rmi web
    • web이라는 Image 지우기
  • 현재 이미지를 사용하는 모든 컨테이너를 중지 및 삭제
    • docker stop $(docker ps -aq --filter ancestor=mv1-1/gis:latest)
    • docker rm $(docker ps -aq --filter ancestor=mv1-1/gis:latest)

Container Image layer


var/lib/docker/overlay2

image layer가 존재하는 디렉토리

docker run option

더보기
  • --name [컨테이너 이름] : 컨테이너 이름을 설정
  • -d (또는 --detach): 컨테이너를 백그라운드 모드로 실행. 이 옵션을 사용하면 컨테이너가 실행되고 나서도 현재 터미널 세션과 상호 작용하지 않고 백그라운드에서 동작.
  • -p (또는 --publish): 호스트와 컨테이너 간의 포트 매핑을 설정. '-p 호스트_포트:컨테이너_포트'와 같은 형식으로 사용되며, 호스트의 특정 포트를 컨테이너 내부의 포트와 연결하여 외부와 컨테이너 간 통신을 가능하게 함.
  • -v (또는 --volume): 호스트와 컨테이너 간의 볼륨 매핑을 설정. '-v 호스트_경로:컨테이너_경로'와 같은 형식으로 사용되며, 호스트의 경로와 컨테이너의 경로를 연결하여 데이터를 공유하거나 저장할 수 있게 함.
  • -e (또는 --env): 컨테이너 내부에서 사용할 환경 변수를 설정. '-e 변수=값' 형식으로 사용하여 컨테이너 내부의 프로세스에서 환경 변수를 사용할 수 있음.
  • -it (또는 --interactive와 --tty): 컨테이너와 상호 작용하는 대화형 모드로 컨테이너 내부의 터미널에 접속. 이 옵션을 사용하면 컨테이너 내부에서 명령어를 실행하고 터미널 세션을 유지할 수 있음.

참조

'CICD > docker' 카테고리의 다른 글

[Docker] Container 사용하기  (0) 2024.06.17
[Docker] Container Registry  (0) 2024.06.17
[Docker] Docker Container 만들기  (0) 2024.06.17
[Docker] Docker 설치  (0) 2024.06.16
[Docker] Container를 쓰는 이유  (2) 2024.06.14
해당 포스팅은 이성미 강사님의 따라 배우는 도커(따배도, https://www.youtube.com/@ttabae-learn)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
오늘은 고통스럽다.
내일은 더 고통스럽다.
그리고 내일 모래는 아름다울 것이다.
Mǎ Yún(알리바바 그룹 창업자 겸 회장)

요구사항

💡 CPU: 2core, memory: 2GB이상
컴퓨터: (bareMetal 또는 Virtual Machine)
운영체제 필수

Virtualbox 설치 / VM 생성


VirtalBox 다운로드 후 설치

https://www.virtualbox.org/

 

Oracle VM VirtualBox

Welcome to VirtualBox.org! News Flash New May 3rd, 2024VirtualBox 7.0.18 released! Oracle today released a 7.0 maintenance release which improves stability and fixes regressions. See the Changelog for details. New April 16th, 2024VirtualBox 7.0.16 released

www.virtualbox.org

으로 이동 후 설치.

VirtualBox-Network 구성

  • NAT 네트워크 추가: 파일 - 환경설정 - 네트워크 - 추가
  • 네트워크 이름: localNetwork
  • 네트워크 CIDR: 10.100.0.0/24
  • DHCP 지원
  • 포트포워딩
    • 이름, 프로토콜, 호스트IP, 호스트포트, 게스트IP, 게스트포트 구성.
    • ex) docker1, TCP, 127.0.0.1, 105, 10.100.0.105, 22

가상머신 만들기

  • docker-ubuntu
    • CPU(2core), Memory(2GB), network(localNetwork), disk(20GB)
  • docker-centos
    • CPU(2core), Memory(2GB), network(localNetwork), disk(20GB)

Ubuntu 20.04 설치


https://ubuntu.com

 

Enterprise Open Source and Linux | Ubuntu

Ubuntu is the modern, open source operating system on Linux for the enterprise server, desktop, cloud, and IoT.

ubuntu.com

접속 후 ubuntu 설치.

시스템 -> 마더보드 -> 기본메모리 4GB로 설정(4096MB)

저장소 -> disk file -> 방금 설치한 파일 선택

시동디스크 -> iso 파일로 설치.

이후 리눅스 설치와 동일.

도커 설치


https://docs.docker.com/engine/install/

 

Install Docker Engine

Learn how to choose the best method for you to install Docker Engine. This client-server application is available on Linux, Mac, Windows, and as a static binary.

docs.docker.com

접속 후 운영체제에 맞게(ubuntu 20.04) docs 확인.

설치방법

Repository를 이용하여 직접 설치

# 오래된 도커 버전 지우기
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

# apk setup
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

# latest 버전 설치
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 설치되었는지 확인
sudo docker run hello-world

# 도커 시작
systemctl start docker
docker version

# 도커 나가기
exit

# 도커 확인
docker ps
systemctl status docker

계정 추가

docker ps 명령어가 (권한문제로)동작안할 시 권한 추가

# 이후 암호 입력
su - 

# 권한추가
usermod -a -G docker <username>

su - <username>

 

'CICD > docker' 카테고리의 다른 글

[Docker] Container 사용하기  (0) 2024.06.17
[Docker] Container Registry  (0) 2024.06.17
[Docker] Docker Container 만들기  (0) 2024.06.17
[Docker] Container 개념  (0) 2024.06.17
[Docker] Container를 쓰는 이유  (2) 2024.06.14
해당 포스팅은 이성미 강사님의 따라 배우는 도커(따배도, https://www.youtube.com/@ttabae-learn)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
오늘은 고통스럽다.
내일은 더 고통스럽다.
그리고 내일 모래는 아름다울 것이다.
Mǎ Yún(알리바바 그룹 창업자 겸 회장)

Container


시대가 바뀌어 가면서 애플리케이션은 점점 커지면서 소프트웨어 운영 플랫폼이 바뀜.

하드웨어는 용량은 커지고, 싸지며 성능 또한 좋아짐.

소프트웨어 운영 플랫폼이 바뀌는 중

소프트웨어 운영 플랫폼

  • Bare Metal
    • 하나의 시스템의 OS 위에 여러개의 Application을 띄워서 사용하는 형식. 
    • 예전 시스템 및 애플리케이션들은 용량을 많이 차지 하지 않았기 때문에 하나의 컴퓨터에서 동작하기도 충분했었음.
  • Virtualization(HypervisorX)
    • Virtal Machine을 이용하여(하나의 컴퓨터) 새로운 Application을 띄우는 형식.
    • 하나의 컴퓨터에서 가상 머신을 사용하여 여러개의 프로그램이 여러개의 컴퓨터에서 돌아가도록 하는 형식.
    • 하지만 가상화 플랫폼은 Scale-in / Scale-out 기능이 어려웠음.
  • Any Infrastructure
    • 하나의 서버를 여러개 띄우는 Scale-out / Scale-in 구조 적용 가능.
    • OS 위에 Container Engine
      • Docker는 Container Engine 중에 하나
      • container platform을 사용.
    • Container는 아주 적은 용량만 차지.
    • isolate된 공간에서 작동. => 확장 및 배포가 쉬움.

Container의 역할

Container 도식화

Container는 즉 App을 실행시키는 환경을 세팅하는 것.

App을 실행하는데 필요한 library, SW Platform(node.js, java 등...) 등을 독립된 공간에 대한 환경을 세팅해줌.

리눅스에서 돌려야 하는 이유


컨테이너는 리눅스의 커널 기능을 사용해야 함.

  • chroot
    • 독립된 공간 형성
  • namespace
    • isolate 기능 지원(6가지 독립 컨테이너를 위한 공간)
  • cgroup
    • 필요한만큼 HW 지원
  • 세가지 명령어로 커널 + 컨테이너를 만듦.
  • 리눅스 커널을 도커 플랫폼(컨테이너 플랫폼)에서 사용할 수 있도록 해주는 것이 컨테이너 엔진
💡 리눅스가 아닌 환경에서 docker를 실행하려면??
windows, macos에서는 Hypervisor(리눅스를 돌릴 가상환경) 활성화 후 그 위에 컨테이너 띄우기

프로그램 VS 컨테이너


하는 일은 프로그램과 컨테이너 둘이 같지만 구조가 다름.

// cat app.js

const http = require('http');
const os = require('os');
console.log("Test server starting...");
var handler = function(req, res) {
	res.writeHead(200);
	res.end("Container Hostname: " + os.hostname() + "\n");
};
var www = http.createServer(handler);
www.listen(8080);

이러한 코드가 있을 때

일반 프로그램

  • 일반 프로그램 
    • 해당 app.js를 실행시키기 위해
    • (운영체제에 맞는) node.js를 설치
    • 그 위에서 app.js 실행

컨테이너

 

  • 컨테이너
    • 컨테이너 구축 환경 설정
    • node 기반, app.js 실행
# DockerFile
FROM node:12
COPY app.js /app.js
ENTRYPOINT ["node", "app.js"]

 

Container를 사용하는 이유


개발자가 만든 프로그램이 어디서든 동작하도록.

운영환경과 배포환경이 다르기때문에 hw가 다르면 동일하게 돌아가지 않을 수 있음.

컨테이너화를 시키면 개발자가 만든 환경으로 어디서든 돌아갈 수 있음.

확장/취소가 쉽고, MSA, DevOps에 적합

컨테이너는 용량이 작음. 

작은 용량 덕분에 서비스 연속성 및 확장성, scale-out 용이

참조

 

'CICD > docker' 카테고리의 다른 글

[Docker] Container 사용하기  (0) 2024.06.17
[Docker] Container Registry  (0) 2024.06.17
[Docker] Docker Container 만들기  (0) 2024.06.17
[Docker] Container 개념  (0) 2024.06.17
[Docker] Docker 설치  (0) 2024.06.16
해당 포스팅은 한빛 미디어 헤드퍼스트 디자인 패턴(에릭 프리먼, 엘리자베스 롭슨 저)를 통해 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
좋은 프로그래머는 자기 두뇌를 사용한다. 그러나 좋은 가이드라인은 모든 케이스를 고려해야만 하는 노력을 줄여준다.
(Francis Glassborow, 개발자)

Combined Pattern


여러 패턴을 함께 사용하여 더욱 강력한 객체지향 디자인 패턴

  • 패턴 몇개를 결합한다고 무조건 복합 패턴이 되는 것이 아님.
  • 여러가지 문제의 일반적인 해결법을 제시해야함.
    • ex) MVC패턴
    • 여러 패턴에 대해 적용 가능한 시나리오 작성.
      • 같은 역할을 하는 클래스에 대해 기능 통일 → 상속
      • 다른 클래스에서 같은 인터페이스를 사용하도록 연결하는 역할 → 어댑터 패턴
      • 다양한 클래스를 한데 묶어 소리를 낸 횟수 세려면 → 데코레이터 패턴
      • 데코레이터에서 객체를 제대로 포장하지 않으면 원하는 행동 추가 불가능. 데코레이터로 감싸는 부분을 하나로 빼내서 캡슐화 → 팩토리 패턴
      • 다양한 클래스를 한데 관리 ⇒ 반복자 패턴, 구성패턴
      • 하나의 클래스에 대해 관리 ⇒ 옵저버 패턴

Model - View - Controller 알아보기

View

  • Model을 표현하는 방법을 제공
  • 화면에 표시할 때 상태와 데이터는 Model에서 가져오기

Controller

  • Controller에서 Model을 조작
  • 사용자가 인터페이스를 건드리면 그 행동이 Controller에게 전달
  • 사용자에게 입력을 받으며 입력받은 내용이 Model에게 의미 전달.

Model

  • View에게 상태 변화 통기
  • 필요한 상태, 데이터, 애플리케이션 로직은 Model에 들어있음.

동작

  • 사용자는 View에만 접촉 가능
  • Controller가 Model에게 상태를 변경하라고 요청
    • 사용자의 행동을 받아서 해석
    • 의미해석, 모델 조작 결정.
  • Controller가 View를 변경해달라고 요청
    • 결과로 View에게 바꿔달라고 요청할 수 있음.
  • 상태가 변경되면 Model이 View에게 사실 전달
    • 사용자가 한 행동으로 내부적인 변화 등으로 모델이 변경되면 뷰에게 상태가 변경되었다고 요청
  • View가 Model에게 상태 요청

모델-뷰-컨트롤러에 사용되는 패턴 알아보기

  • 컴포지트 패턴
    • 디스플레이는 여러 단계로 겹쳐있는 윈도우, 패널, 텍스트로 구성
    • 각 디스클레이는 복합 객체나 잎버튼이 될 수 있음.
    • 최상위 뷰 구성요소에게만 화면을 갱신
  • 전략 패턴
  • 옵저버 패턴
    • 상태가 변경되었을 때 그 모델과 연관된 객체들에게 연락.
    • 모델을 뷰와 컨트롤러로부터 분리

 

+ Recent posts