MathJax

MathJax-2

MathJax-3

Google Code Prettify

置頂入手筆記

EnterproseDB Quickstart — 快速入門筆記

由於考慮採用 EnterpriseDB 或是直接用 PostgreSQL 的人,通常需要一些入手的資料。這邊紀錄便提供相關快速上手的簡單筆記 ~ 這篇筆記以 資料庫安裝完畢後的快速使用 為目標,基本紀錄登入使用的範例:

2017年11月13日 星期一

LinuX Container on Slackware 14.2 練習筆記 - 建立 Container

這一陣子,Docker Container 很紅,好像是因為比起跑 Virtual Machine 吃的資源更少一些。又聽說 Docker 原先是 Linux Container 衍生的。再聽說後來 Docker 不只支援 Liunx Container(看到好像主要有 libcontainer, LXC, OpenVZ, systemd-nspawn, libvirt-lxc, libvirt-sandbox, qemu/kvm, BSD Jails, Solaris Zones, chroot 這一堆詞)。所以跟跟風,也來看看怎麼用 Container~
Container 功能,我最先知道的就是 Linux Container(LXC)。目前對 LXC的認識不多,我目前假裝理解成是 chroot 的衍生物,Docker 前驅物。
以前曾經用過 chroot 把 MBR 被蓋掉的 Slackware Linux 給弄回來,大概知道 chroot 的用途。
現在練習一下 Linux Container,操作後的感想:有一點把 Linux Container 當成是 chroot 來看待。

Host OS:Slackware 14.2 x64
幾個背景知識:

使用之前,可以到這裡看一下 Slackware 的 LXC 套件的資訊;相關的 template 可以在 /usr/share/lxc/template/ 裡面找到 lxc-slackware 樣板。查看裡面可以發現裡面其實會安裝一些套件到 conntainer 裡面。

開始建立 Container:會發現落落長,就如上面所述,是因為用了 slackpkg 裝了一些套件
bash-4.4# lxc-create -t slackware -n mylxc

......中間來不及複製, 不過都是 slackpkg 的安裝內容......
......所裝的套件,可以看 template 內容......

Configuring...

Adding an etc/fstab that must be modified later with the
full path of the container's rootfs if you decide to move it.
Root default password is 'root', please change it!

Copying rootfs to /var/lib/lxc/mylxc/rootfs...
bash-4.4#

檢視一下狀態:
bash-4.4# lxc-ls
mylxc
bash-4.4# lxc-info -n mylxc
Name:        mylxc
State:       STOPPED
bash-4.4# ls -l /var/lib/lxc/mylxc/rootfs/
total 76
drwxr-xr-x  2 root root 4096 Jan  6  2017 bin
drwxr-xr-x  2 root root 4096 Oct  6  1997 boot
drwxr-xr-x  4 root root 4096 Oct 27 17:54 dev
drwxr-xr-x 19 root root 4096 Oct 30 15:32 etc
drwxr-xr-x  2 root root 4096 Oct  6  1997 home
drwxr-xr-x  6 root root 4096 Oct 11 00:50 lib
drwxr-xr-x  2 root root 4096 Oct 27 17:54 lib64
drwxr-xr-x 16 root root 4096 Oct 27 17:54 media
drwxr-xr-x 10 root root 4096 Sep 26  2006 mnt
drwxr-xr-x  2 root root 4096 Jun 10  2007 opt
drwxr-xr-x  2 root root 4096 Oct  6  1997 proc
drwx--x---  3 root root 4096 Oct 27 18:14 root
drwxr-xr-x  2 root root 4096 Oct 11 00:50 run
drwxr-xr-x  2 root root 4096 Oct 27 17:54 sbin
drwxr-xr-x  2 root root 4096 Apr  8  2007 srv
drwxr-xr-x  2 root root 4096 May 12  2004 sys
drwxrwxrwt  4 root root 4096 Oct 27 18:06 tmp
drwxr-xr-x 15 root root 4096 Jan  6  2017 usr
drwxr-xr-x 11 root root 4096 Jun 30  2016 var
bash-4.4# 

看到建立完成,也發現在 container 裡面出現了完整的 Linux 目錄樹~接著便要啟動他。給人感覺很像 chroot~


Container 也有自己的 rootfs,因此也要有一個「開機」的儀式~
每個 Linux Distribution 都有他的 Linux container 規劃方式,有不同的初始登入方式,在這裡 slackware 就預設帳密都是 root。
Slackware 的 Container 開機比較簡單,沒有顯示什麼 Log,如果要看 Container 的「開機紀錄」,可以增加 -F 參數。
bash-4.4# lxc-start -n mylxc
lxc-start: lxc_start.c: main: 279 Container is already running.
bash-4.4# lxc-info -n mylxc
Name:        mylxc
State:       RUNNING
PID:         4239
CPU use:     0.37 seconds
BlkIO use:   12.40 MiB
Memory use:  13.68 MiB
KMem use:    0 bytes
bash-4.4# 

接著,使用 lxc-console 登入,登入的模式,與臨機登入如出一轍~
注意跳離 lxc-console 的方式,先按 Ctrl A,緊接著按 q 即可
bash-4.4# lxc-console -n mylxc

Connected to tty 1
               Type  to exit the console,  to enter Ctrl+a itself


Welcome to Linux 4.4.38 (tty1)

mylxc login: root
Password:
Linux 4.4.38.
You have mail.
root@mylxc:~# cat /etc/*release
NAME=Slackware
VERSION="14.2"
ID=slackware
VERSION_ID=14.2
PRETTY_NAME="Slackware 14.2"
ANSI_COLOR="0;34"
CPE_NAME="cpe:/o:slackware:slackware_linux:14.2"
HOME_URL="http://slackware.com/"
SUPPORT_URL="http://www.linuxquestions.org/questions/slackware-14/"
BUG_REPORT_URL="http://www.linuxquestions.org/questions/slackware-14/"
root@mylxc:~# ifconfig -a   
lo: flags=73  mtu 65536
     inet 127.0.0.1  netmask 255.0.0.0
     inet6 ::1  prefixlen 128  scopeid 0x10
     loop  txqueuelen 1  (Local Loopback)
     RX packets 32  bytes 2560 (2.5 KiB)
     RX errors 0  dropped 0  overruns 0  frame 0
     TX packets 32  bytes 2560 (2.5 KiB)
     TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
root@mylxc:~# 
root@mylxc:~# exit
logout


Welcome to Linux 4.4.38 (tty1)

mylxc login: [^A q]bash-4.4# 
bash-4.4# 

Container 建立成功~

至於 LXC 的 Log,則可以在 /var/log 裡面找到
bash-4.4# ls /var/log/lxc/
lxc-monitord.log  mylxc.log

弄完之後,當然就是把 Container「關機」
bash-4.4# lxc-stop -n mylxc
bash-4.4# lxc-info -n mylxc
Name:        mylxc
State:       STOPPED

現在還差網路還沒設置,下次處理~




由上可見,Linux Container 的幾個特點

  • 根本就如同啟動一個新的 Linux OS
  • Linux Container 與 Virtual Machine 不同,只能啟用與 Host OS 相同的 Linux Distribution
  • 目錄裡面的內容與外部分離,可以說是「完整」的作業系統
  • Container 內的「系統檔」可以被異動

就目前所認識,到了 Docker,Container 環境會被打包起來,處理成可執行的「映像檔」,運行上不會把環境弄髒;甚至可以自行指定 Host OS 的目錄「掛載」到 Docker 的環境上。
此外,由於 Container 被打包起來,使的 Docker 可以進一步引入 Docker Image 物件,讓 Container 的執行不在綁定作業系統類型,讓 Docker Container 能夠真正的像 Virtual Machine 一樣,運行「各種作業系統」(Base Image)。

Docker 使的 Linux Container 的應用推到更廣的程度:原本的執行檔會被凍住,與可以異動的資料相分離,使的「Container」這台主機的死活跟資料互獨立。
這樣的機制,導致後續微服務的流行,成為容易進行軟體架構擴展的良好方案。

然而,Container 與 VM 還是有些差異的:Container 並非真正的實體隔離,
不能把 Container 假定成 Sandbox 環境,不論對 LXC 或是 Docker 都一樣,因此使用 Container 時,設置 Unprivilege User 變很重要。

如果要進一步隔離,就需要使用其他 Linux 上的隔離功能,例如 Chrome 瀏覽器採用的 setuid 功能,或是 RHEL系列提供的 SELinux,或 Uuntu 的 Apparmor 之類的~

不過最簡單的隔離方式,就是把 Container 規劃在 VM 裡面執行,用實體的 VM 隔離處理,比較能避免災情沒有停損點,變得不可收拾。

Dcoker 後續的發展,遠超過基本的 LXC,發展出許多週邊工具,連底下的 Host OS 都另外發展,已經自成一個完整的軟體生態圈了~


參考


沒有留言:

張貼留言