|
|
|
|
移动端

六安二中官網:再见Docker,是时候拥抱下一代容器工具了

本文来源:http://www.344078.com/www_ilife_cn/

www.86msc.com,随后对这几个组件进行镭射切割,再做抛光处理。对纯净的水来说,即使温度低于0℃,因为没有冻结核,所以很难冻结,也就不能成为冰。来自浙江省的匿名人士对新闻:的评论我们说付费插队、竞价别车,你居然不同意,只能拜拜了来自山东省东营市的匿名人士对新闻:的评论苹果为了让果粉尽快换7,设计6s电池和芯片上没少下功夫啊。魅族:你等等在上我,我给你要钱呢!高通:好...来自湖南省长沙市的匿名人士对新闻:的评论佛祖精通C#、Java、PHP、Python等各大主流语言来自山东省青岛市的匿名人士对新闻:的评论跑了50KM结果发现玻璃外,两边和顶上都坐满了人来自上海市的匿名人士对新闻:的评论我都知道原因,微波炉呗来自广东省的匿名人士对新闻:的评论联想也有同样的毛病,都被惯成全球性的大公司了!来自河南省平顶山市的匿名人士对新闻:的评论邮寄爆炸物判几年谁来科普下[s:笑]来自山东省淄博市的匿名人士对新闻:的评论质监部门和监管部门要到315才上班来自广东省的匿名人士对新闻:的评论用外部加热诋毁抹黑中国这事一定要跟寒锅人算账。

最近,他正在将技术融入他自己的日常工作中。来自上海市的匿名人士对新闻:的评论欧盟的口水都流到地上了来自广东省广州市的匿名人士对新闻:的评论明天就包着石膏来上班了来自北京市的匿名人士对新闻:的评论你卖是你卖,看看我们愿不愿意买..来自广东省深圳市福田区的匿名人士对新闻:的评论所以贫困生就应该手里捧着窝窝头,菜里没有一滴油来自中国的匿名人士对新闻:的评论蠢货啊,水分子结冰除温度条件外,还要求在水中有冻结核。对纯净的水来说,即使温度低于0℃,因为没有冻结核,所以很难冻结,也就不能成为冰。国内永远也不会出现,烫破个嘴皮,赔几百万的事,你索赔多了,都可能给你定个敲砸的罪名。

揭秘:曾经最强大的十个帝国中国曾三次统治世界  一:蒙古帝国蒙古骑兵,天下无双,成吉思汗的军事思想已远远超出了那个时代,从鄂嫩河畔起家的成吉思汗和他的子孙们在一百年的时间里,征服了整个亚洲,半个欧洲,蒙古人在多瑙河洗刷自己的战马,在近代史上无比嚣张的俄罗斯人,要年年向蒙古人进贡,接受羞辱。来自广东省东莞市的匿名人士对新闻:的评论别介,美国人最爱的集体诉讼还没开始,怎么能算最艰难呢来自上海市的匿名人士对新闻:的评论说好的没问题呢这次真的要感谢美帝了。主动辞退你和使用这种无良的996比你主动离职,对公司来说,区别很大的啊。最典型的例子就是现在几乎人手一部(或许是几部)的智能手机,最开始是个人数字助理类产品,PalmOS和PDA在1996年兴起,很快就衰落了,然后是口袋电脑和WindowsCE在2000年初兴起,又很快衰落了。

Linux 容器是由 Linux 内核所提供的具有特定隔离功能的进程,Linux 容器技术能够让你对应用及其整个运行时环境(包括全部所需文件)一起进行打包或隔离。从而让你在不同环境(如开发、测试和生产等环境)之间轻松迁移应用的同时,还可保留应用的全部功能。

作者:iMike来源:运维之美|2019-09-26 15:30

什么是 Linux 容器?

Linux 容器是由 Linux 内核所提供的具有特定隔离功能的进程,Linux 容器技术能够让你对应用及其整个运行时环境(包括全部所需文件)一起进行打包或隔离。从而让你在不同环境(如开发、测试和生产等环境)之间轻松迁移应用的同时,还可保留应用的全部功能。

Linux 容器还有利于明确划分职责范围,减少开发和运维团队间的冲突。这样,开发人员可以全心投入应用开发,而运维团队则可专注于基础架构维护。由于 Linux 容器基于开源技术构建,还将便于你在未来轻松采用各类更新、更强的技术产品。包括 CRI-O、Kubernetes 和 Docker 在内的容器技术,可帮助你的团队有效简化、加速和编排应用的开发与部署。

什么是 Docker?

Docker 是一个开源的应用容器引擎,属于 Linux 容器的一种封装,Docker 提供简单易用的容器使用接口,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker 是目前很流行的 Linux 容器解决方案,即使 Docker 是目前管理 Linux 容器的一个非常方便的工具,但它也有两个缺点:

  • Docker 需要在你的系统上运行一个守护进程。
  • Docker 是以 root 身份在你的系统上运行该守护程序。

这些缺点的存在可能有一定的安全隐患,为了解决这些问题,下一代容器化工具 Podman 出现了 。

什么是 Podman ?

Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。正如前面提到的那样,它不需要在你的系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。

Podman 可以管理和运行任何符合 OCI(Open Container Initiative)规范的容器和容器镜像。Podman 提供了一个与 Docker 兼容的命令行前端来管理 Docker 镜像。

  1. Podman 官网地址:/podman_io/ 
  2.  
  3. Podman 项目地址:/github_com/containers/libpod 

安装 PodmanPodman

目前已支持大多数发行版本通过软件包来进行安装,下面我们来举几个常用发行版本的例子。

  • 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 

更多系统的安装方法,可参考官方文档:/github_com/containers/libpod/blob/master/install.md

使用 Podman 

使用Podman 非常的简单,Podman 的指令跟 Docker 大多数都是相同的。下面我们来看几个常用的例子:

运行一个容器

  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 除了兼容这些特性外,还支持了一些新的特性。

给容器设置一个检查点

  1. $ sudo podman container checkpoint <container_id> 

需要 CRIU 3.11 以上版本支持,CRIU 项目地址:/criu_org/

根据检查点位置恢复容器

  1. $ sudo podman container restore <container_id> 

迁移容器

Podman 支持将容器从一台机器迁移到另一台机器。

首先,在源机器上对容器设置检查点,并将容器打包到指定位置。

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

其次,在目标机器上使用源机器上传输过来的打包文件对容器进行恢复。

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

配置别名

如果习惯了使用 Docker 命令,可以直接给 Podman 配置一个别名来实现无缝转移。你只需要在 .bashrc 下加入以下行内容即可:

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

Podman 如何实现开机重启容器

由于 Podman 不再使用守护进程管理服务,所以不能通过守护进程去实现自动重启容器的功能。那如果要实现开机自动重启容器,又该如何实现呢?

其实方法很简单,现在大多数系统都已经采用 Systemd 作为守护进程管理工具。这里我们就可以使用 Systemd 来实现 Podman 开机重启容器,这里我们以启动一个 Nginx容器为例子。

首先,我们先运行一个 Nginx 容器。

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

然后,在建立一个 Systemd 服务配置文件。

  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 服务。

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

服务启用成功后,我们可以通过 systemctl status 命令查看到这个服务的运行状况。

  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. 

之后每次系统重启后 Systemd 都会自动启动这个服务所对应的容器。

其它相关工具

Podman 只是 OCI 容器生态系统计划中的一部分,主要专注于帮助用户维护和修改符合 OCI 规范的容器镜像。其它的组件还有 Buildah、Skopeo 等。

Buildah

虽然 Podman 也可以支持用户构建 Docker 镜像,但是构建速度比较慢。并且默认情况下使用 VFS 存储驱动程序会消耗大量磁盘空间。

Buildah 是一个专注于构建 OCI 容器镜像的工具,Buildah 构建速度非常快并使用覆盖存储驱动程序,可以节约大量的空间。

Buildah 基于 fork-exec 模型,不以守护进程运行。Buildah 支持 Dockerfile 中的所有命令。你可以直接使用 Dockerfiles 来构建镜像,并且不需要任何 root 权限。Buildah 也支持用自己的语法文件构建镜像,可以允许将其他脚本语言集成到构建过程中。

下面是一个使用 Buidah 自有语法构建的例子。

Buildah 和 Podman 之间的一个主要区别是:Podman 用于运行和管理容器, 允许我们使用熟悉的容器 CLI 命令在生产环境中管理和维护这些镜像和容器,而 Buildah 主用于构建容器。

项目地址:/github_com/containers/buildah

Skopeo

Skopeo 是一个镜像管理工具,允许我们通过 Push、Pull和复制镜像来处理 Docker和符合 OCI 规范的镜像。

项目地址:/github_com/containers/skopeo

延伸阅读

什么是 OCI?

OCI (Open Container Initiative),是一个轻量级,开放的治理结构(项目)。在 Linux 基金会的支持下成立,致力于围绕容器格式和运行时创建开放的行业标准。

OCI 项目由 Docker、CoreOS 和容器行业中的其领导者在 2015 年 6 月的时候启动,OCI 的技术委员会成员包括 Red Hat、Microsoft、Docker、Cruise、IBM、Google、Red Hat 和 SUSE 等。

什么是 CRI?

CRI(Container Runtime Interface)是 Kubernetes v1.5 引入的容器运行时接口,它将 Kubelet 与容器运行时解耦,将原来完全面向 Pod 级别的内部接口拆分成面向 Sandbox 和 Container 的 gRPC 接口,并将镜像管理和容器管理分离到不同的服务。

什么是 CNI?

CNI(Container Network Interface)是 CNCF 旗下的一个项目,是 Google 和 CoreOS 主导制定的容器网络标准。CNI 包含方法规范、参数规范等,是 Linux 容器网络配置的一组标准和库,用户可以根据这些标准和库来开发自己的容器网络插件。CNI 已经被 Kubernetes、Mesos、Cloud Foundry、RKT 等使用,同时 Calico、Weave等项目都在为 CNI 提供插件。

总结

本文介绍三个了符合 CRI 标准的容器工具 Podman、 Buildah 和 Skopeo。这三个工具都是基于 *nix 传统的 fork-exec 模型,解决了由于 Docker 守护程序导致的启动和安全问题,提高了容器的性能和安全。

【编辑推荐】

  1. www.86msc.comLinux基金会执行董事Jim Zemlin看好多元化异构计算,称开放才能共赢
  2. www.86msc.comDocker中的时区问题处理
  3. www.86msc.com命令行忘性大?这个开源备忘工具一次解决你的所有烦恼
  4. Github 上 10 个值得学习的 Springboot 开源项目
  5. 详解Docker容器监控之Cadvisor,值得收藏
【责任编辑:华轩 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

用Python玩转excel

用Python玩转excel

让重复操作傻瓜化
共3章 | DE8UG

168人订阅学习

AI入门级算法

AI入门级算法

算法常识
共22章 | 周萝卜123

138人订阅学习

这就是5G

这就是5G

5G那些事儿
共15章 | armmay

128人订阅学习

读 书 +更多

Eclipse插件开发方法与实战

本书分为4个部分共24章,以插件开发为中心,围绕插件开发主要介绍SWT/JFace的应用、插件扩展点的实现,以及GEF、EMF和RCP的相关知识。本书...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微

申博在线娱乐登入网址 申博娱乐优惠 太阳城申博娱乐直营网 申博开户 www.sb88.com 太阳城开户
申博太阳城娱乐官网登入 申博会员开户 菲律宾娱乐在线网直营 百家乐微信支付充值 申博网上娱乐登入 菲律宾申博官方网址登入
太阳城官方直营网登入 www.shenbo1.com www.55msc.com 申博现金赌场登入 菲律宾太阳娱乐游戏登入 申博在线开户登入