自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

再見Docker,是時候擁抱下一代容器工具了

開發(fā) 開發(fā)工具
Linux 容器是由 Linux 內(nèi)核所提供的具有特定隔離功能的進程,Linux 容器技術(shù)能夠讓你對應(yīng)用及其整個運行時環(huán)境(包括全部所需文件)一起進行打包或隔離。從而讓你在不同環(huán)境(如開發(fā)、測試和生產(chǎn)等環(huán)境)之間輕松遷移應(yīng)用的同時,還可保留應(yīng)用的全部功能。

什么是 Linux 容器?

Linux 容器是由 Linux 內(nèi)核所提供的具有特定隔離功能的進程,Linux 容器技術(shù)能夠讓你對應(yīng)用及其整個運行時環(huán)境(包括全部所需文件)一起進行打包或隔離。從而讓你在不同環(huán)境(如開發(fā)、測試和生產(chǎn)等環(huán)境)之間輕松遷移應(yīng)用的同時,還可保留應(yīng)用的全部功能。

[[278001]]

Linux 容器還有利于明確劃分職責(zé)范圍,減少開發(fā)和運維團隊間的沖突。這樣,開發(fā)人員可以全心投入應(yīng)用開發(fā),而運維團隊則可專注于基礎(chǔ)架構(gòu)維護。由于 Linux 容器基于開源技術(shù)構(gòu)建,還將便于你在未來輕松采用各類更新、更強的技術(shù)產(chǎn)品。包括 CRI-O、Kubernetes 和 Docker 在內(nèi)的容器技術(shù),可幫助你的團隊有效簡化、加速和編排應(yīng)用的開發(fā)與部署。

什么是 Docker?

Docker 是一個開源的應(yīng)用容器引擎,屬于 Linux 容器的一種封裝,Docker 提供簡單易用的容器使用接口,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的容器中,然后發(fā)布到任何流行的 Linux 機器上。容器是完全使用沙箱機制,相互之間不會有任何接口。

Docker 是目前很流行的 Linux 容器解決方案,即使 Docker 是目前管理 Linux 容器的一個非常方便的工具,但它也有兩個缺點:

  • Docker 需要在你的系統(tǒng)上運行一個守護進程。
  • Docker 是以 root 身份在你的系統(tǒng)上運行該守護程序。

這些缺點的存在可能有一定的安全隱患,為了解決這些問題,下一代容器化工具 Podman 出現(xiàn)了 。

什么是 Podman ?

Podman 是一個開源的容器運行時項目,可在大多數(shù) Linux 平臺上使用。Podman 提供與 Docker 非常相似的功能。正如前面提到的那樣,它不需要在你的系統(tǒng)上運行任何守護進程,并且它也可以在沒有 root 權(quán)限的情況下運行。

Podman 可以管理和運行任何符合 OCI(Open Container Initiative)規(guī)范的容器和容器鏡像。Podman 提供了一個與 Docker 兼容的命令行前端來管理 Docker 鏡像。

  1. Podman 官網(wǎng)地址:https://podman.io/ 
  2.  
  3. Podman 項目地址:https://github.com/containers/libpod 

安裝 PodmanPodman

目前已支持大多數(shù)發(fā)行版本通過軟件包來進行安裝,下面我們來舉幾個常用發(fā)行版本的例子。

  • Fedora / CentOS
  1. $ sudo yum -y install podman 
  • Ubuntu
  1. $ sudo apt-get update -qq 
  2. $ sudo apt-get install -qq -y software-properties-common uidmap 
  3. $ sudo add-apt-repository -y ppa:projectatomic/ppa 
  4. $ sudo apt-get update -qq 
  5. $ sudo apt-get -qq -y install podman 
  • MacOS
  1. $ brew cask install podman 
  • RHEL 7
  1. $ sudo subscription-manager repos --enable=rhel-7-server-extras-rpms 
  2. $ sudo yum -y install podman 
  • Arch Linux
  1. $ sudo pacman -S podman 

更多系統(tǒng)的安裝方法,可參考官方文檔:https://github.com/containers/libpod/blob/master/install.md

使用 Podman 

使用Podman 非常的簡單,Podman 的指令跟 Docker 大多數(shù)都是相同的。下面我們來看幾個常用的例子:

運行一個容器

  1. $ podman run -dt -p 8080:8080/tcp  \ 
  2. -e HTTPD_VAR_RUN=/var/run/httpd  \ 
  3. -e HTTPD_MAIN_CONF_D_PATH=/etc/httpd/conf.d \ 
  4. -e HTTPD_MAIN_CONF_PATH=/etc/httpd/conf \ 
  5. -e HTTPD_CONTAINER_SCRIPTS_PATH=/usr/share/container-scripts/httpd/ \ 
  6. registry.fedoraproject.org/f27/httpd /usr/bin/run-httpd 

列出運行的容器

  1. $ podman ps -a 

分析一個運行的容器

  1. $ podman inspect -l | grep IPAddress\": 
  2. "SecondaryIPAddresses"null
  3. "IPAddress"""

查看一個運行中容器的日志

  1. $ sudo podman logs --latest 
  2. 10.88.0.1 - - [07/Feb/2018:15:22:11 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-" 
  3. 10.88.0.1 - - [07/Feb/2018:15:22:30 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-" 
  4. 10.88.0.1 - - [07/Feb/2018:15:22:30 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-" 
  5. 10.88.0.1 - - [07/Feb/2018:15:22:31 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-" 
  6. 10.88.0.1 - - [07/Feb/2018:15:22:31 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-" 

查看一個運行容器中的進程資源使用情況

  1. $ sudo podman top <container_id> 
  2.   UID   PID  PPID  C STIME TTY          TIME CMD 
  3.     0 31873 31863  0 09:21 ?        00:00:00 nginx: master process nginx -g daemon off
  4.   101 31889 31873  0 09:21 ?        00:00:00 nginx: worker process 

停止一個運行中的容器

  1. $ sudo podman stop --latest 

刪除一個容器

  1. $ sudo podman rm --latest 

以上這些特性基本上都和 Docker 一樣,Podman 除了兼容這些特性外,還支持了一些新的特性。

給容器設(shè)置一個檢查點

  1. $ sudo podman container checkpoint <container_id> 

需要 CRIU 3.11 以上版本支持,CRIU 項目地址:https://criu.org/

根據(jù)檢查點位置恢復(fù)容器

  1. $ sudo podman container restore <container_id> 

遷移容器

Podman 支持將容器從一臺機器遷移到另一臺機器。

首先,在源機器上對容器設(shè)置檢查點,并將容器打包到指定位置。

  1. $ sudo podman container checkpoint <container_id> -e /tmp/checkpoint.tar.gz 
  2. $ scp /tmp/checkpoint.tar.gz <destination_system>:/tmp 

其次,在目標(biāo)機器上使用源機器上傳輸過來的打包文件對容器進行恢復(fù)。

  1. $ sudo podman container restore -i /tmp/checkpoint.tar.gz 

配置別名

如果習(xí)慣了使用 Docker 命令,可以直接給 Podman 配置一個別名來實現(xiàn)無縫轉(zhuǎn)移。你只需要在 .bashrc 下加入以下行內(nèi)容即可:

  1. $ echo "alias docker=podman" >> .bashrc 
  2. $ source .bashrc 

Podman 如何實現(xiàn)開機重啟容器

由于 Podman 不再使用守護進程管理服務(wù),所以不能通過守護進程去實現(xiàn)自動重啟容器的功能。那如果要實現(xiàn)開機自動重啟容器,又該如何實現(xiàn)呢?

其實方法很簡單,現(xiàn)在大多數(shù)系統(tǒng)都已經(jīng)采用 Systemd 作為守護進程管理工具。這里我們就可以使用 Systemd 來實現(xiàn) Podman 開機重啟容器,這里我們以啟動一個 Nginx容器為例子。

首先,我們先運行一個 Nginx 容器。

  1. $ sudo podman run -t -d -p 80:80 --name nginx nginx 

然后,在建立一個 Systemd 服務(wù)配置文件。

  1. $ vim /etc/systemd/system/nginx_container.service 
  2.  
  3. [Unit] 
  4. Description=Podman Nginx Service 
  5. After=network.target 
  6. After=network-online.target 
  7.  
  8. [Service] 
  9. Type=simple 
  10. ExecStart=/usr/bin/podman start -a nginx 
  11. ExecStop=/usr/bin/podman stop -t 10 nginx 
  12. Restart=always 
  13.  
  14. [Install] 
  15. WantedBy=multi-user.target 

接下來,啟用這個 Systemd 服務(wù)。

  1. $ sudo systemctl daemon-reload 
  2. $ sudo systemctl enable nginx_container.service 
  3. $ sudo systemctl start nginx_container.service 

服務(wù)啟用成功后,我們可以通過 systemctl status 命令查看到這個服務(wù)的運行狀況。

  1. $ sudo systemctl status nginx_container.service 
  2. ● nginx_container.service - Podman Nginx Service 
  3.    Loaded: loaded (/etc/systemd/system/nginx_container.service; enabled; vendor preset: disabled) 
  4.    Active: active (running) since Sat 2019-08-20 20:59:26 UTC; 1min 41s ago 
  5.  Main PID: 845 (podman) 
  6.     Tasks: 16 (limit: 4915) 
  7.    Memory: 37.6M 
  8.    CGroup: /system.slice/nginx_container.service 
  9.            └─845 /usr/bin/podman start -a nginx 
  10.  
  11. Aug 20 20:59:26 Ubuntu-dev.novalocal systemd[1]: Started Podman Nginx Service. 

之后每次系統(tǒng)重啟后 Systemd 都會自動啟動這個服務(wù)所對應(yīng)的容器。

其它相關(guān)工具

Podman 只是 OCI 容器生態(tài)系統(tǒng)計劃中的一部分,主要專注于幫助用戶維護和修改符合 OCI 規(guī)范的容器鏡像。其它的組件還有 Buildah、Skopeo 等。

Buildah

 

雖然 Podman 也可以支持用戶構(gòu)建 Docker 鏡像,但是構(gòu)建速度比較慢。并且默認(rèn)情況下使用 VFS 存儲驅(qū)動程序會消耗大量磁盤空間。

Buildah 是一個專注于構(gòu)建 OCI 容器鏡像的工具,Buildah 構(gòu)建速度非??觳⑹褂酶采w存儲驅(qū)動程序,可以節(jié)約大量的空間。

Buildah 基于 fork-exec 模型,不以守護進程運行。Buildah 支持 Dockerfile 中的所有命令。你可以直接使用 Dockerfiles 來構(gòu)建鏡像,并且不需要任何 root 權(quán)限。Buildah 也支持用自己的語法文件構(gòu)建鏡像,可以允許將其他腳本語言集成到構(gòu)建過程中。

下面是一個使用 Buidah 自有語法構(gòu)建的例子。

Buildah 和 Podman 之間的一個主要區(qū)別是:Podman 用于運行和管理容器, 允許我們使用熟悉的容器 CLI 命令在生產(chǎn)環(huán)境中管理和維護這些鏡像和容器,而 Buildah 主用于構(gòu)建容器。

項目地址:https://github.com/containers/buildah

Skopeo

[[278003]]

Skopeo 是一個鏡像管理工具,允許我們通過 Push、Pull和復(fù)制鏡像來處理 Docker和符合 OCI 規(guī)范的鏡像。

項目地址:https://github.com/containers/skopeo

延伸閱讀

什么是 OCI?

OCI (Open Container Initiative),是一個輕量級,開放的治理結(jié)構(gòu)(項目)。在 Linux 基金會的支持下成立,致力于圍繞容器格式和運行時創(chuàng)建開放的行業(yè)標(biāo)準(zhǔn)。

OCI 項目由 Docker、CoreOS 和容器行業(yè)中的其領(lǐng)導(dǎo)者在 2015 年 6 月的時候啟動,OCI 的技術(shù)委員會成員包括 Red Hat、Microsoft、Docker、Cruise、IBM、Google、Red Hat 和 SUSE 等。

什么是 CRI?

CRI(Container Runtime Interface)是 Kubernetes v1.5 引入的容器運行時接口,它將 Kubelet 與容器運行時解耦,將原來完全面向 Pod 級別的內(nèi)部接口拆分成面向 Sandbox 和 Container 的 gRPC 接口,并將鏡像管理和容器管理分離到不同的服務(wù)。

什么是 CNI?

CNI(Container Network Interface)是 CNCF 旗下的一個項目,是 Google 和 CoreOS 主導(dǎo)制定的容器網(wǎng)絡(luò)標(biāo)準(zhǔn)。CNI 包含方法規(guī)范、參數(shù)規(guī)范等,是 Linux 容器網(wǎng)絡(luò)配置的一組標(biāo)準(zhǔn)和庫,用戶可以根據(jù)這些標(biāo)準(zhǔn)和庫來開發(fā)自己的容器網(wǎng)絡(luò)插件。CNI 已經(jīng)被 Kubernetes、Mesos、Cloud Foundry、RKT 等使用,同時 Calico、Weave等項目都在為 CNI 提供插件。

總結(jié)

本文介紹三個了符合 CRI 標(biāo)準(zhǔn)的容器工具 Podman、 Buildah 和 Skopeo。這三個工具都是基于 *nix 傳統(tǒng)的 fork-exec 模型,解決了由于 Docker 守護程序?qū)е碌膯雍桶踩珕栴},提高了容器的性能和安全。

 

責(zé)任編輯:華軒 來源: 運維之美
相關(guān)推薦

2021-11-01 10:41:59

DockerEarthlyLinux

2022-04-29 08:44:30

AlfredRaycastLinux

2021-06-04 11:00:48

文件傳輸Croc工具

2019-08-21 16:15:01

DockerPodmanSkopeo

2013-07-27 21:28:44

2015-09-10 09:39:01

容器技術(shù)Docker

2025-02-11 00:00:00

2013-06-27 11:21:17

2015-11-09 10:42:07

2025-02-13 09:37:58

2017-05-11 14:12:31

虛擬主機云主機服務(wù)器

2018-12-19 12:14:13

IPv6UCloudTIC2018

2020-09-27 17:27:58

邊緣計算云計算技術(shù)

2016-01-26 11:58:12

2025-01-03 09:24:10

模型架構(gòu)論文

2020-09-16 10:28:54

邊緣計算云計算數(shù)據(jù)中心

2022-07-17 06:48:39

Vite 3.0前端工具鏈

2010-12-10 09:45:46

SalesforceRuby云計算語言

2022-06-10 14:33:21

元宇宙AR/VR互聯(lián)網(wǎng)

2018-09-25 07:00:50

點贊
收藏

51CTO技術(shù)棧公眾號