Docker 애플리케이션 운영(22.05.03)

박민선·2022년 5월 4일
0

Docker

Container 핵심 기술

  • Cgroup: Control Group(리소스 양)
  • Namespace: Isolation
    - IPC NS: IPC
    - PID NS: Process
    - Network NS: Network
    - UID NS: User/Group
    - Mount NS: Mount Point
    - UTS NS: Hostname
  • Layered Filesystem
    - overlay2
    - aufs (<- ufs: Union FS)

Docker = Docker Engine

Docker CE: Community Edition
Docker EE: Enterprise Edition

0.X -> 1.X(1.13.X) -> 17.04 -> 20.10

Vagrant 환경 구성

`~/vagrant/container/Vagrantfile

Vagrant.configure("2") do |config|
	# Define VM
	config.vm.define "docker" do |centos|
		centos.vm.box = "ubuntu/focal64"
		centos.vm.hostname = "docker"
		centos.vm.network "private_network", ip: "192.168.100.100"
		centos.vm.provider "virtualbox" do |vb|
			vb.name = "docker"
			vb.cpus = 2
			vb.memory = 4096
		end
	end
end

~/.ssh/config

Host docker
    HostName 192.168.100.100
    User vagrant
    IdentityFile C:\Users\Playdata\vagrant\container\.vagrant\machines\docker\virtualbox\private_key

Docker Engine 설치

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

sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  • docker-ce: Docker Engine
  • docker-ce-cli: docker command
  • containerd.io: Container Runtime Interface
  • docker-compose-plugin: Docker Compose
sudo usermod -aG docker vagrant

터미널 환경 구성

sudo apt install zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

~/.zshrc

...
ZSH_THEME="agnoster"
...

https://github.com/powerline/fonts

source ~/.zshrc
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-completions ${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions

~/.zshrc

 73 plugins=(
 74         git
 75         zsh-autosuggestions
 76         zsh-completions
 77 )
source ~/.zshrc

agnoster 멀티라인 작성

vi ~/.oh-my-zsh/themes/agnoster.zsh-theme

prompt_newline() {
  if [[ -n $CURRENT_BG ]]; then
    echo -n "%{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR
%{%k%F{blue}%}$SEGMENT_SEPARATOR"
  else
    echo -n "%{%k%}"
  fi

  echo -n "%{%f%}"
  CURRENT_BG=''
}

추가 후
하단 쪽 ##prompt main -> build prompt 에 추가 작성

'
'
  prompt_newline
'
'

agnoster 색상 변경

vi ~/.oh-my-zsh/themes/agnoster.zsh-theme

prompt_dir() {
  prompt_segment 39d $CURRENT_FG '%~'     # 39d로 변경 (하늘색)
}

컨테이너 이미지

(registry/)repository/name:tag

docker.io/library/hello-world:latest

Lifecycle

create -> start -> (pause) -> (unpause) -> (kill) -> stop -> rm
run ---------->

application이 종료 컨테이너도 종료(stop)

  • -i: STDIN 유지
  • -t: Terminal 할당
  • -d: Detach

-it 옵션은 Shell을 실행하는 이미지에서 사용: centos, ubuntu ...
-d 옵션 application이 계속적으로 실행되어햐 할 때: httpd ...

리눅스 배포판 이름으로된 이미지

  • ubuntu
  • centos
  • rocky
  • debian
  • alpine
  • busybox
  • amazonlinux
  • oraclelinux
  • ...
    -> Base Image

Packer

자동화된 이미지 빌더(클라우드 이미지 및 컨테이너 이미지 빌더)

https://www.packer.io/

Packer 설치

https://learn.hashicorp.com/tutorials/packer/get-started-install-cli?in=packer/aws-get-started

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install packer

Packer Template

이미지를 빌드하기 위한 선언과 명령으로 구성된 파일

  • HCL2
    - Packer 1.5.0 부터 사용
    - Packer 1.7.0 부터 공식/기본 방법
    - 현재 버전 1.8.X(2022-04-27 기준)
    - .pkr.hcl
  • JSON
    - .pkr.json

Block

  • packer: Packer 버전 및 플러그인 버전 정의
  • source: 빌드할 이미지의 소스 정의
  • build: 이미지 빌드(source, provisioner, post-processor 구성)
  • provisioner: 프로비저닝 플러그인
  • post-processor: 프로비저닝 후 실행할 작업 정의
  • variable: 변수
  • locals: 로컬 값

AWS 이미지 빌드 예제

mkdir -p packer/aws-ubuntu
cd packer/aws-ubuntu

aws-ubuntu.pkr.hcl

packer {
  required_plugins {
    amazon = {
      version = ">= 0.0.1"
      source  = "github.com/hashicorp/amazon"
    }
  }
}

source "amazon-ebs" "ubuntu" {
  ami_name      = "learn-packer-linux-aws"
  instance_type = "t2.micro"
  region        = "us-west-2"
  source_ami_filter {
    filters = {
      name                = "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*"
      root-device-type    = "ebs"
      virtualization-type = "hvm"
    }
    most_recent = true
    owners      = ["099720109477"]
  }
  ssh_username = "ubuntu"
}

build {
  name    = "learn-packer"
  sources = [
    "source.amazon-ebs.ubuntu"
  ]
  
  provisioner "shell" {
    environment_vars = [
      "FOO=hello world",
    ]
    inline = [
      "echo Installing Redis",
      "sleep 30",
      "sudo apt-get update",
      "sudo apt-get install -y redis-server",
      "echo \"FOO is $FOO\" > example.txt",
    ]
  }
}
packer init .
packer fmt .
packer validate .
packer build .
profile
클라우드신생아

0개의 댓글