반응형

 

  • Docker 란?

도커는 리눅스 "컨테이너 기반으로 만들어진 오픈소스 가상화 플랫폼 입니다. " 라고들 많이 설명 하지만 개인적으로 가상화라고 생각하지 않습니다. 도커는 커널을 공유하여 사용하며 프로세스를 격리시켜 작동(컨테이너)하는 플랫폼 입니다.

 

  • Docker Container와 VM(Virtual machine)의 간단한 차이

VM의 경우 호스트OS 위에서 동작하여 하드웨어에 직접 접근할 수 없고 호스트OS를 거쳐야 합니다. 하드웨어를 가상으로 할당해주고 실제로 사용할 때엔 Guest OS → Host OS → H/W  순으로 접근하게 되어 Dcoker Container에 비해 무겁고 실행 속도가 상대적으로 느립니다.

반대로 Dcoker Container의 경우 VM처럼 각각의 가상화 OS를 설치하고 실행하는것이 아니라, 호스트OS의 커널을 공유하고 네임스페이스(namespace)를 기반으로 각각의 어플리케이션에 대한 격리된 환경을 제공 합니다.

 

 

깊게 파고들지 않고 간단한 개념만 잡기 위한 분들은 단순히 OS 위에 Dcoekr Engine이 실행되고 이 프로세스를 사용하여 각각의 독립된 어플리케이션 환경(컨테이너)이 생성된다고 생각하셔도 좋습니다.

도커의 이미지인 고래를 생각하셔도 되는데 아래 도커 이미지는 고래(OS)위에 컨테이너들이 올라가 있는 모습 입니다.

 

 

그 전에 사용했던 이미지를 비슷하게 만들어 본다면 아래와 같은 모양이 되는데, 뜻 그대로와 같이 OS위에 Docker Engine이 올라가 있고 그 위에 생성한 컨테이너들이 올라가 있습니다.

 

 

 

  • Docker Architecture

Dcoker 클라이언트는 Docker 데몬과 통신을 하게 되는데, Docker 데몬은 컨테이너 빌드, 실행, 배포와 같은 작업을 수행하게 됩니다. 로컬 환경에서 사용 하거나, docker machine 등을 사용해 원격 환경에서 사용할 수 있습니다.

대표적인 build, pull, run의 명령어 실행 시 발생되는 아키텍처는 아래 사진과 같습니다.

 

 

 

  • Docker Container

Docker Engine은 각각의 독립된 어플리케이션 환경(컨테이너)을 만들기 위해 네임 스페이스(namespaces)를 사용 합니다. 아래와 같은 네임 스페이스를 사용하게 됩니다.

  • pid name spaces : 프로세스 격리 처리 (독립된 프로세스 공간 할당)
  • net name spaces : 네트워크 인터페이스 
  • ipc name spaces : IPC 자원에 대한 엑세스 관리
  • mnt name spaces : 파일 시스템 포인트 관리
  • uts name spaces : host name 할당

도커를 사용하다보면 centos의 이미지를 컨테이너로 실행 시킨 후 쉘에 진입 했을 때 ps 상태를 보면 1번에 /bin/bash와 같이 쉘이 PID1번으로 되어있는 걸 볼 수 있습니다. (CentOS7 기준으로 원래 PID 1번은 systemd)

 

 

 

이러한 이유중 하나가 네임 스페이스를 이용해 독립된 공간을 제공하고 Control groups, union file systems, container format 이라는 기술을 사용하여 현재 사용하는 Docker Container처럼 독립된 어플리케이션 환경이 구축되었기 때문 입니다.

네임 스페이스만 간단히 살펴 보자면, 우선 아무런 컨테이너를 하나 실행시킨 후 /var/run/docker/runtime-runc/moby 로 이동하시면 아래와 같이 dockercontainer id로 만들어진 디렉토리가 보이실 겁니다.

 

 

 

이 디렉토리로 이동하셔서 cat state.json | jq '.init_process_pid' 를 입력 하시면 이 컨테이너가 실행중인 프로세스를 확인할 수 있습니다. ( jq라는 패키지가 설치되어 있어야 하며 yum install jq로 설치하실 수 있습니다 )

 

 

 

이제 확인된 PID 1993과 PID 1(systemd)의 네임 스페이스를 보면 ipc, mnt, net, pid, uts가 모두 다르며 독립된 어플리케이션 환경이라는걸 확인할 수 있습니다. 만약 PID 1993을 kill 한다면 실행중인 컨테이너가 종료 될 것 입니다.

 

 

 

반응형
반응형

 

PXE 서버(Kickstart)는 여러대의 서버를 같은 네트워크 대역에 연결하고 OS 설치를 자동으로 진행 시켜 줍니다. (만약 실서버라면 같은 네트워크 대역에 연결하기 위해 랜케이블 연결이 필요 합니다)

이 글에서는 TFTP, DHCP, NFS를 통해 CentOS7에 PXE & Kickstart 서버를 구축 합니다. 

 

  • 1. TFTP 설치 및 설정

아래와 같이 TFTP 설치 후 설정을 변경 합니다. server_args의 경우 앞으로 진행할 서버 구축에 필요한 파일들을 /tftpboot 라는 디렉토리에 지정할 예정이고 별도로 설정하셔도 됩니다.

yum -y install tftp tftp-server xinetd

vi /etc/xinet.d/tftp

# /etc/xinet.d/tftp 파일에 수정해야할 부분
	server_args = -s /tftpboot
	disable = no
    
systemctl restart xinetd

 

 

  • 2. 구축을 위한 설정

아래와 같이 명령어들을 입력 후 vim /tftpboot/pxelinux.cfg/default 에 DEFAULT ~~ 내용을 입력 합니다. 그대로 사용하셔도 되지만, IP 부분은 PXE 서버의 아이피를 입력해주시면 됩니다.

mkdir /tftpboot
yum -y install syslinux
cp /usr/share/syslinux/menu.c32 /tftpboot/
cp /usr/share/syslinux/pxelinux.0 /tftpboot/
mkdir /tftpboot/CentOS7
mkdir /tftpboot/ks
mkdir /tftpboot/pxelinux.cfg
vim /tftpboot/pxelinux.cfg/default

## 입력해야할 내용
DEFAULT menu.c32
timeout 100

menu title ### OS Installer Boot Menu ###

LABEL CentOS7
	kernel CentOS7/vmlinuz
	append ksdevice=link load_ramdisk=1 initrd=CentOS7/initrd.img unsupported_hardware text network ks=nfs:10.10.10.100:/tftpboot/ks/ks.cfg text     ## IP부분 설정

 

이후 CentOS7 이미지 파일을 준비 합니다. (CentOS7 minimal 이미지 파일 : http://mirror.kakao.com/centos/7.7.1908/isos/x86_64/CentOS-7-x86_64-Minimal-1908.iso

실 서버의 경우 USB 등을 통하여 이미지 파일(iso)을 그대로 마운트 후 사용하시면 되고, VMware의 경우 Setting에서 CD/DVD에 ISO 파일을 찾아서 추가해주시기 바랍니다. USB등을 통하여 했을 경우 마운트 후 이미지파일 안에 isolinux 디렉토리를 찾아주시면 됩니다.

# Vmware에서 DVD 파일을 추가한 경우
cd /run/media/(사용자 계정명)/CentOS\ 7\ x86_64/isolinux

# USB등을 통하여 했을 경우 마운트한곳에서 isolinux 디렉토리로 진입

# VMware, USB 등 동일하게 isolinux 디렉토리 안의 아래 두 파일을 복사
cp vmlinuz, /tftp/CentOS7/
cp initrd.img /tft/CentOS7/

cp /root/anaconda.ks.cfg /tftpboot/ks/ks.cfg

vim /tftpboot/ks/ks.cfg

 

vim /tftpboot/ks/ks.cfg 실행 후 rootpw 뒤에 있는 부분을 모두 긁어서 복사해두고 메모장같은곳에 보관해 주세요. 이후 안의 파일 내용을 모두 지우고 아래 코드를 복붙 합니다. 단, 따로 필요한 설정이나 IP 등은 바꿔주시기 바랍니다.

#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
install

# Use graphical install, text=CLI
text		### GUI 환경이 필요할 경우 text 지운 후 graphical 입력

nfs --server=10.10.10.100 --dir="/iso"		#### PXE 서버 아이피로 변경

# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=kr --xlayouts='kr'
# System language
lang ko_KR.UTF-8

# Network information
network  --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
network  --hostname=localhost.localdomain

# Root password
rootpw --iscrypted  ################ 복사했던 rootpw 복붙 ##################
# System services
services --enabled="chronyd"
# System timezone
timezone Asia/Seoul --isUtc
# X Window System configuration information
xconfig  --startxonboot
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
autopart --type=lvm
# Partition clearing information
clearpart --all --initlabel --drives=sda

%packages
@^gnome-desktop-environment
@base
@core
@desktop-debugging
@dial-up
@directory-client
@fonts
@gnome-desktop
@guest-agents
@guest-desktop-agents
@input-methods
@internet-browser
@java-platform
@multimedia
@network-file-system-client
@networkmanager-submodules
@print-client
@x11
chrony
kexec-tools

%end

%addon com_redhat_kdump --enable --reserve-mb='auto'

%end

%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end

 

만약 rootpw를 날리셨어도 싱글모드로 진입하여 패스워드를 설정하면 되니 걱정은 안하셔도 됩니다. 만약 PXE 부팅 중 권한 에러나 타임아웃 발생 시 아래와 같이 조치 해주세요.

# 권한 에러 발생 시
chmod -R 777 /tftpboot

# 타임 아웃 발생 시
systemctl stop firewalld
setenforce 0

 

  • 3. DHCP 설정

yum -y install dhcp
## cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example  /etc/dhcp/dhcpd.conf (얘는 샘플파일 이동임)
vim /etc/dhcp/dhcpd.conf

만약 따로 dhcpd의 파일이 필요 없다면 모두 지운 후 아래 코드를 입력 해주세요.

allow booting;
allow bootp;
default-lease-time 600;
max-lease-time 7200;
option domain-name-servers 8.8.8.8;
option ip-forwarding false;
option mask-supplier false;
ddns-update-style none;
next-server 10.10.10.100;
filename "pxelinux.0";

subnet 10.10.10.0 netmask 255.255.255.0 {
        option routers 10.10.10.2;
        range 10.10.10.101 10.10.10.199;
}

 

  • 4. NFS 설정

nfs 설치가 되어있지 않다면 설치를 진행하고 와주세요. 

mkdir /iso
cp -r /run/media/user/CentOS\ 7\ x86_64/* /iso

이후 vi /etc/exports 를 입력하여 아래 코드를 입력 해주세요.

/tftpboot/ks    10.10.10.*(ro)
/iso            10.10.10.*(ro)

 

  • 종료

CentOS7을 설치하기 위한 최소한의 설정은 끝낫습니다. 마지막으로 systemctl restart로 xinetd, nfs, dhcpd, tftp 한번씩 해주세요. 정상적으로 되었다면 부팅 후 PXE로 자동 설치가 진행되면서 아래와 같이 나올텐데, 해당 화면에서 시간이 굉장히 오래 소요 됩니다.

 

반응형
반응형

 

리눅스상에서 리눅스 SWAP 추가 / 삭제 방법 입니다.

 

  • 1. SWAP 파티션 증설 (device)

별도 하드디스크를 추가 후 SWAP 파티션을 추가하는 방법 입니다. 이 글에서는 VMware로 사용 했으며 하드디스크의 크기는 1GB로 추가 했습니다.

 

1) 추가된 디바이스 확인

# 디바이스 확인
fdisk -l

 

2) SWAP 파티션 설정

fdisk [디바이스명]     ## ex) fdisk /dev/sdc1

# 파티션 설정
n -> p -> Enter -> Enter -> swap 설정할 용량 설정, 본 글에서는 1GB 하드 디스크를 모두 사용할 예정이므로 Enter -> 

# 파티션 타입 설정
t -> 82              ## t 입력 후 l을 눌러서 파티션 타입을 확인할 수 있습니다

 

3) SWAP 추가

# SWAP 추가
mkswap [디바이스명]		## ex) mkswap /dev/sdc1
swapon [디바이스명]		## ex) swapon /dev/sdc1

# SWAP 삭제
swapoff [디바이스명]		## 0ex) swapoff /dev/sdc1

 

  • 2. SWAP 증설 (swapfile)

# SWAP 추가
fallocate -l [용량] /swapfile			## ex) fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

# 에러 발생할 경우
dd if=/dev/zero of=/swapfile count=1024 bs=1MiB


# SWAP 삭제
swapoff /swapfile

 

반응형
반응형

 

* GCP(Google Cloud Platform)와 내도메인.한국을 이용하여 별도의 유료 호스팅 서비스를 받지 않고 직접 무료로 호스팅 도메인 연결을 구현할 수 있습니다. (GCP의 경우 1년간 무료 입니다. 만약 기간이 모두 지낫다면 내 PC에 서버를 올리고 공유기의 포트포워딩 기능 등을 통하여 구현하여야 합니다)

또한 무료 호스팅 도메인 연결을 구현하는것일 뿐 홈페이지를 올릴 웹 소스 코드는 직접 구현하거나 구하셔야 합니다.

 

  • GCP VM 인스턴스 생성

GCP VM 인스턴스를 생성하여야 하는데, 이전에 올렸던 글의 내용과 겹치므로 링크로 대체 합니다.

https://nirsa.tistory.com/82?category=870325

 

  • 무료 도메인 등록

가장 먼저 호스팅을 구현하려면 도메인을 등록해야 합니다. 내도메인.한국(https://xn--220b31d95hq8o.xn--3e0b707e/) 에서는 무료로 5가지 도메인(p-e.kr , o-r.kr , n-e.kr , r-e.kr , kro.kr)에 대한 도메인 등록을 무료로 제공해줍니다.

내도메인.한국에 접속 후 한글 도메인 또는 일반 도메인을 검색하면 아래와 같이 등록하기 또는 등록 불가가 나옵니다. 원하는 도메인을 등록하기 누른 후 로그인을 진행 해주세요. (가입 절차가 매우 간단하므로 계정이 없으신분들은 회원가입 해주셔야 합니다)

 

로그인 후 도메인관리 -> 수정을 눌러주시면 되고, 여기서 우측에 만료일이 보이는데 30일전에 만료일 부분을 클릭하여 갱신할 수 있습니다.

 

이제 여러가지 도메인 설정을 하실 수 있습니다. 아무 기능 없이 우선 홈페이지만 여시려면 IP연결 체크 후 우측의 [+] 를 클릭하여 한개를 더 만들어 줍니다.

그다음 하나는 www 입력, 하나는 비워둔 상태로 IP입력하는곳에 IP를 입력해 주시고 수정하기를 클릭하여 적용 시키시면 됩니다. (여기서의 IP는 공인 IP로 입력해야 하므로, GCP VM 인스턴스를 생성하신 후 외부 IP 라고 적혀있는것을 작성해 주시면 도비니다)

 

  • 홈페이지 테스트

위의 과정으로 호스팅 환경 구성하는것은 끝낫습니다. 이제 필요한 어플리케이션(APM 등)을 설치 후 준비된 웹 소스 코드를 서버로 올리고 테스트 진행 하시면 됩니다.

참고로 내도메인.한국에 등록한 후 약 1~3분간 등록하는 과정이 진행 되므로 좀 기다리셔야 합니다. 저는 html5up.net 에서 제공하는 템플릿을 서버에 올려 두엇는데, 도메인을 입력하고 들어가면 정상적으로 홈페이지가 실행되는것이 확인 되었습니다.

 

반응형

+ Recent posts