云時代【5】—— LXC 與 容器
- 三、LXC
- (一)基本介紹
- (二)相關 Linux 指令
- 實戰:使用 LXC 操作容器
- 四、Docker
- (一)刪除、安裝、配置
- (二)鏡像倉庫
- 1. 分類
- 2. 相關指令
- (1)鏡像倉庫指令
- (2)鏡像指令(部分)
- (3)容器指令(部分)
- 3. 實戰演習
- (1)搭建一個服務器:Nginx
- (2)創建私有鏡像倉庫:BusyBox
三、LXC
(一)基本介紹
LXC(LinuX Containers)是Linux 容器,一種操作系統層虛擬化技術,為 Linux 內核容器功能的一個用戶空間接口。它將應用軟件系統打包成一個軟件容器(Container), 包含:應用軟件本身的代碼,以及所需要的操作系統核心和庫。通過統一的命名空間 和 共享 API 來分配不同軟件容器的可用硬件資源,創造出應用程序的獨立沙箱運行環境, 使得 Linux 用戶可以容易的創建和管理系統或應用容器。
LXC 是最早一批真正把完整的容器技術用一組簡易使用的工具和模板來極大的簡化了容器技術使用的一個方案。它雖然極大的簡化了容器技術的使用,但比起直接通過內核調用來使用容器技術, 其復雜程度其實并沒有多大降低,主要是以下的三個原因:
- 必須要學會 LXC 的一組命令工具
- 由于內核的創建都是通過命令來實現的,需要通過批量命令實現數據遷移并不容易
- 其隔離性也沒有虛擬機那么強大。
因此后來就出現了 Docker,所以從一定程度上來說,Docker 就是 LXC 的增強版。
(二)相關 Linux 指令
systemctl status lxc # 可見檢查是否安裝# 如果有需要先停止再清理
lxc-ls -f # 遍歷所有容器
lxc-stop -n name-xxx # 停止對應的容器
lxc-destroy -n name-xxx # 刪除對應的容器
# 如果有需要先停止再清理
lxc-ls -f # 遍歷所有容器
lxc-stop -n name-xxx # 停止對應的容器
lxc-destroy -n name-xxx # 刪除對應的容器apt-get purge --auto-remove lxc lxc-templates
apt install lxc lxc-templates bridge-utils -y# lxc 主程序包
# lxc-templates lxc的配置模板
# bridge-utils 網橋管理工具
實戰:使用 LXC 操作容器
lxc-checkoutconfig
cd /usr/share/lxc/templates # 存放模板的位置# 第一次創建會比較久,主要與容器的類型有關
lxc-create -t ubuntu --name lxctest -- - r xenial -a amd64
# -t 容器類型
# --name 容器名字
# -r 指定使用 xenial 版本的 Ubuntu
# -a amd64架構
lxc-ls -f
lxc-start -n lxchost1 -d
# 方式1:使用SSH
ssh ubuntu@IPlxc-attach -n lxchost1 --clear-env -- /bin/bash
lxc-ls -f # 查看
lxc-stop -n lxchost1 # 停止lxc-ls -f # 查看
lxc-detroy -n lxchost1 # 刪除lxc-ls -f
四、Docker
Docker 本質其實是 LXC 之類的增強版,它本身不是容器,而是容器的易用工具。容器是 Linux 內核中的技術,Docker 只是把這種技術在使用上簡易普及了。Docker 在早期的版本核心就是 LXC 的二次封裝發行版。Docker 只是作為容器技術的一個實現,或者說讓容器技術普及開來的最成功的實現。
Docker 是基于 Go 語言實現的一個開源項目,它的主要目標是**“Build,Ship and Run Any APP,Anywhere”**
,即通過對組件的封裝、分發、部署、運行等生命周期的管理,使得用戶的應用及其運行環境能夠做到“一次封裝,到處運行”。
早期 Docker 利用 LXC 做容器管理引擎,但是在創建容器時,不再使用模板去安裝生成,而是通過鏡像技術(把一個操作系統用戶空間所需要使用到的組件事先編排好, 并整體打包成一個文件,image 文件),鏡像文件集中放在一個倉庫中。當需要創建容器時,Docker 調用 LXC 的工具 **lxc-create**
,但不再通過 lxc 的模板去安裝,而是連接到鏡像服務器上下載匹配的鏡像文件,而后基于鏡像啟動容器。所以,Docker 極大的 簡化了容器的使用難度。以后我們創建啟動容器,只需要一個命令,docker-run
, docker-stop
就可以啟動停止一個容器了。
Docker 架構圖:
程序部署過程變化:
(一)刪除、安裝、配置
檢查環境
cat /etc/*release*uname -a
gpg 相當于公鑰,用于校驗
(二)鏡像倉庫
1. 分類
我們可以按是否對外開放劃分成兩類:
- 公有倉庫:像阿里云、
dockerhub
等放到公有網絡上,不用登錄就可以下載鏡像,供大家訪問使用 - 私有倉庫:不對外開放,往往往位于私有網絡,只有公司內部人員可以使用
我們可以登錄到DockerHub鏈接上,先創建自己的鏡像倉庫,創建步驟也非常簡單:
2. 相關指令
(1)鏡像倉庫指令
docker login
docker pull [鏡像]:[版本]
docker pull [鏡像]@[DIGEST]
docker push [鏡像]:[版本號] # denieddocker tag [舊鏡像]:[版本號] [新鏡像]:[版本號]
docker push [新鏡像]:[版本號]
可以看到推送被拒絕了,也就是說我們并不能隨便推送到某個倉庫中!為了驗證,我們可以自己弄一個倉庫,步驟如下:
docker tag nginx:1.23.4 lllzxx/fortest:v1.23.4.2
docker tag nginx:1.23.4 lllzxx/fortest:v1.23.4.3docker push lllzxx/fortest -a
docker search nginx
docker search --no-trunc nginx
docker logout
(2)鏡像指令(部分)
docker imagesdocker image lsdocker image list
docker images nginx
docker image inspect nginx:1.23.4docker image inspect 'IMAGE ID'
docker tag 'IMAGE ID' [新鏡像]:[版本號]
(3)容器指令(部分)
docker psdocker ps -a
docker run nginx:1.23.4
docker run -d nginx:1.23.4# 斷網 或者 手動退出 都不影響
docker stop <ContainerName>
docker run -it centos:7 bash# -t 創建偽終端(無法交互)
# -i 能夠交互
docker run -i centos:7 bash
docker run -d -p 80:80 nginx:1.23.4netstat -ntlp | grep 80docker run -d -p 8081:80 nginx:1.23.4
# -p 指定宿主機的端口(容器端口映射到主機端口)
docker run -d -P nginx:1.23.4 # -P 隨機生成宿主機端口
docker run -d --name mynginx1 nginx:1.23.4
docker run -it -h mycentos7 centos:7 bash
docker run -it -h mycentos7 -e myenv=test centos:7 bash
cat /proc/cpuinfo
docker run -d --name mynginx2 --cpuset-cpus="0" nginx:1.23.4
free -m
docker run -d --name mynginx3 nginx:1.23.4
docker run -d --name mynginx3 -m 500m nginx:1.23.4
docker run -it --name mycentos1 centos:7 bashdocker run -it --name mycentos2 --link mycentos1:mywebsite1 centos:7 bash
ping mycentos1
docker run -it --name mycentos4 --rm centos:7 bash
3. 實戰演習
(1)搭建一個服務器:Nginx
rpm -qa
正向代理:跨過防火墻、加速、保護正向請求服務器、能做緩存
反向代理(超市屏蔽了大部分的供應商):保護背后的服務器、負載均衡
ducker run -p 8082:80 --name myweb1 -h myweb.com -e myenv=test -it nginx:1.23.4 bash# 注意目前只是在前臺執行
nginx # 手動啟動
ps -ef | grep nginx
curl 127.0.0.1 # 本機
curl 127.0.0.1 # 容器上的Nginx
cd /usr/share/nginx/html
dir
echo "Hello World" > index.htmlcurl 127.0.0.1.8082
(2)創建私有鏡像倉庫:BusyBox
wget
mv busybox-x86_64 busyboxchmod +x busybox # 在運行 busybox 之前需要確保它由可執行權限
# chmod 是 "change mode" 的縮寫,用于改變文件或目錄的權限。
# +x 表示添加執行(execute)權限。ls -l busybox # ll busybox (ls-list)
./busybox
三步走:①選擇一個倉庫并登錄(GitHub 阿里云 騰訊云) ②給鏡像打標簽 ③推送該鏡像到倉庫