From 7f324a2c6cc31e9b1b668676632eef4eaac160f1 Mon Sep 17 00:00:00 2001 From: chopupu <1123478123@qq.com> Date: Tue, 6 May 2025 16:02:17 +0800 Subject: [PATCH] update update update update update --- .../public_sys-resources/icon-caution.gif | Bin 580 -> 0 bytes .../public_sys-resources/icon-danger.gif | Bin 580 -> 0 bytes .../public_sys-resources/icon-note.gif | Bin 394 -> 0 bytes .../public_sys-resources/icon-notice.gif | Bin 406 -> 0 bytes .../public_sys-resources/icon-tip.gif | Bin 253 -> 0 bytes .../public_sys-resources/icon-warning.gif | Bin 580 -> 0 bytes .../Container/\345\215\207\347\272\247.md" | 25 - ...44\350\241\214\345\217\202\350\200\203.md" | 3 - ...\345\231\250\345\274\225\346\223\216-4.md" | 304 ---- .../cloud/container_engine/.markdownlint.json | 24 + .../container_engine/docker_engine/_toc.yaml | 24 + .../docker_engine/command_reference.md | 3 + .../docker_engine/container_engine.md | 302 ++++ .../docker_engine/container_management_1.md | 270 ++- .../docker_engine/container_management_2.md | 148 +- .../docker_engine/image_management_1.md | 34 +- .../docker_engine/image_management_2.md | 117 +- .../installation_and_configuration_3.md | 32 +- .../docker_engine/overview.md | 5 +- .../docker_engine/statistics.md | 0 .../isula_container_engine/_toc.yaml | 51 + .../isula_container_engine/appendix.md | 6 - .../application_scenarios.md | 5 +- .../checking_the_container_health_status.md | 47 +- .../container_management.md | 237 ++- .../container_resource_management.md | 99 +- .../isula_container_engine/cri-2.md | 64 +- .../isula_container_engine/cri.md | 1559 ++++------------- .../figures/zh-cn_image_0183048952.png | Bin .../image_management.md | 108 +- .../installation_configuration.md | 595 +++---- .../installation_upgrade_uninstallation.md | 2 +- ...onnecting_isula_shim_v2_with_stratovirt.md | 12 +- .../interconnection_with_the_cni_network.md | 85 +- .../isulad_support_cdi.md | 52 +- .../isulad_support_cgroup_v2.md | 8 +- .../local_volume_management.md | 34 - .../isula_container_engine/overview.md | 2 - .../previleged_container.md | 19 +- .../query_information.md | 4 - .../security_features.md | 145 +- .../supporting_oci_hooks.md | 0 .../isula_container_engine/uninstallation.md | 16 +- .../isula_container_engine/upgrade_methods.md | 32 + 44 files changed, 1657 insertions(+), 2816 deletions(-) delete mode 100644 docs/zh/docs/Container/public_sys-resources/icon-caution.gif delete mode 100644 docs/zh/docs/Container/public_sys-resources/icon-danger.gif delete mode 100644 docs/zh/docs/Container/public_sys-resources/icon-note.gif delete mode 100644 docs/zh/docs/Container/public_sys-resources/icon-notice.gif delete mode 100644 docs/zh/docs/Container/public_sys-resources/icon-tip.gif delete mode 100644 docs/zh/docs/Container/public_sys-resources/icon-warning.gif delete mode 100644 "docs/zh/docs/Container/\345\215\207\347\272\247.md" delete mode 100644 "docs/zh/docs/Container/\345\221\275\344\273\244\350\241\214\345\217\202\350\200\203.md" delete mode 100644 "docs/zh/docs/Container/\345\256\271\345\231\250\345\274\225\346\223\216-4.md" create mode 100644 docs/zh/docs/cloud/container_engine/.markdownlint.json create mode 100644 docs/zh/docs/cloud/container_engine/docker_engine/_toc.yaml create mode 100644 docs/zh/docs/cloud/container_engine/docker_engine/command_reference.md create mode 100644 docs/zh/docs/cloud/container_engine/docker_engine/container_engine.md rename "docs/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-3.md" => docs/zh/docs/cloud/container_engine/docker_engine/container_management_1.md (71%) rename "docs/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-4.md" => docs/zh/docs/cloud/container_engine/docker_engine/container_management_2.md (99%) rename "docs/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-3.md" => docs/zh/docs/cloud/container_engine/docker_engine/image_management_1.md (54%) rename "docs/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-4.md" => docs/zh/docs/cloud/container_engine/docker_engine/image_management_2.md (92%) rename "docs/zh/docs/Container/\345\256\211\350\243\205\351\205\215\347\275\256-3.md" => docs/zh/docs/cloud/container_engine/docker_engine/installation_and_configuration_3.md (92%) rename "docs/zh/docs/Container/Docker\345\256\271\345\231\250.md" => docs/zh/docs/cloud/container_engine/docker_engine/overview.md (91%) rename "docs/zh/docs/Container/\347\273\237\350\256\241\344\277\241\346\201\257-4.md" => docs/zh/docs/cloud/container_engine/docker_engine/statistics.md (100%) create mode 100644 docs/zh/docs/cloud/container_engine/isula_container_engine/_toc.yaml rename "docs/zh/docs/Container/\351\231\204\345\275\225.md" => docs/zh/docs/cloud/container_engine/isula_container_engine/appendix.md (99%) rename "docs/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227.md" => docs/zh/docs/cloud/container_engine/isula_container_engine/application_scenarios.md (35%) rename "docs/zh/docs/Container/\345\256\271\345\231\250\345\201\245\345\272\267\347\212\266\346\200\201\346\243\200\346\237\245.md" => docs/zh/docs/cloud/container_engine/isula_container_engine/checking_the_container_health_status.md (30%) rename "docs/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206.md" => docs/zh/docs/cloud/container_engine/isula_container_engine/container_management.md (95%) rename "docs/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\347\256\241\347\220\206.md" => docs/zh/docs/cloud/container_engine/isula_container_engine/container_resource_management.md (95%) rename "docs/zh/docs/Container/CRI-v1\346\216\245\345\217\243.md" => docs/zh/docs/cloud/container_engine/isula_container_engine/cri-2.md (68%) rename "docs/zh/docs/Container/CRI-v1alpha2\346\216\245\345\217\243.md" => docs/zh/docs/cloud/container_engine/isula_container_engine/cri.md (46%) rename docs/zh/docs/{Container => cloud/container_engine/isula_container_engine}/figures/zh-cn_image_0183048952.png (100%) rename "docs/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206.md" => docs/zh/docs/cloud/container_engine/isula_container_engine/image_management.md (86%) rename "docs/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256.md" => docs/zh/docs/cloud/container_engine/isula_container_engine/installation_configuration.md (35%) rename "docs/zh/docs/Container/\345\256\211\350\243\205-\345\215\207\347\272\247\344\270\216\345\215\270\350\275\275.md" => docs/zh/docs/cloud/container_engine/isula_container_engine/installation_upgrade_uninstallation.md (82%) rename "docs/zh/docs/Container/iSula-shim-v2\345\257\271\346\216\245stratovirt.md" => docs/zh/docs/cloud/container_engine/isula_container_engine/interconnecting_isula_shim_v2_with_stratovirt.md (93%) rename "docs/zh/docs/Container/\346\224\257\346\214\201CNI\347\275\221\347\273\234.md" => docs/zh/docs/cloud/container_engine/isula_container_engine/interconnection_with_the_cni_network.md (32%) rename "docs/zh/docs/Container/iSulad\346\224\257\346\214\201CDI.md" => docs/zh/docs/cloud/container_engine/isula_container_engine/isulad_support_cdi.md (87%) rename "docs/zh/docs/Container/iSulad\346\224\257\346\214\201cgroup v2.md" => docs/zh/docs/cloud/container_engine/isula_container_engine/isulad_support_cgroup_v2.md (99%) rename "docs/zh/docs/Container/\346\234\254\345\234\260\345\215\267\347\256\241\347\220\206.md" => docs/zh/docs/cloud/container_engine/isula_container_engine/local_volume_management.md (86%) rename "docs/zh/docs/Container/iSula\345\256\271\345\231\250\345\274\225\346\223\216.md" => docs/zh/docs/cloud/container_engine/isula_container_engine/overview.md (99%) rename "docs/zh/docs/Container/\347\211\271\346\235\203\345\256\271\345\231\250.md" => docs/zh/docs/cloud/container_engine/isula_container_engine/previleged_container.md (98%) rename "docs/zh/docs/Container/\346\237\245\350\257\242\344\277\241\346\201\257.md" => docs/zh/docs/cloud/container_engine/isula_container_engine/query_information.md (92%) rename "docs/zh/docs/Container/\345\256\211\345\205\250\347\211\271\346\200\247.md" => docs/zh/docs/cloud/container_engine/isula_container_engine/security_features.md (55%) rename "docs/zh/docs/Container/\346\224\257\346\214\201OCI-hooks.md" => docs/zh/docs/cloud/container_engine/isula_container_engine/supporting_oci_hooks.md (100%) rename "docs/zh/docs/Container/\345\215\270\350\275\275.md" => docs/zh/docs/cloud/container_engine/isula_container_engine/uninstallation.md (37%) create mode 100644 docs/zh/docs/cloud/container_engine/isula_container_engine/upgrade_methods.md diff --git a/docs/zh/docs/Container/public_sys-resources/icon-caution.gif b/docs/zh/docs/Container/public_sys-resources/icon-caution.gif deleted file mode 100644 index 6e90d7cfc2193e39e10bb58c38d01a23f045d571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 580 zcmV-K0=xZ3Nk%w1VIu$?0Hp~4{QBgqmQ+MG9K51r{QB&)np^||1PlfQ%(86!{`~yv zv{XhUWKt}AZaiE{EOcHp{O-j3`t;<+eEiycJT4p@77X;(jQsMfB$R?oG%6hQ z+MMLZbQBH@)Vg&1^3?qHb(5!%>3r0+`eq=&V&E}0Dypi0000000000 z00000A^8LW000R9EC2ui03!e$000L5z=Uu}ED8YtqjJd<+B}(9bIOb$3-31_h|V>=0A{ z1Hh0#H30>fNT})^fRU_83uewx9oRr{f{Sx1Ml`t)EQ zGkHZ67&~y{W5Jpq4H_WfuLxp*3<7O}GEl;1ESe36fLNs=B0&LQM1Buf(R)qg(BRd`t1OPjI1m_q4 diff --git a/docs/zh/docs/Container/public_sys-resources/icon-danger.gif b/docs/zh/docs/Container/public_sys-resources/icon-danger.gif deleted file mode 100644 index 6e90d7cfc2193e39e10bb58c38d01a23f045d571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 580 zcmV-K0=xZ3Nk%w1VIu$?0Hp~4{QBgqmQ+MG9K51r{QB&)np^||1PlfQ%(86!{`~yv zv{XhUWKt}AZaiE{EOcHp{O-j3`t;<+eEiycJT4p@77X;(jQsMfB$R?oG%6hQ z+MMLZbQBH@)Vg&1^3?qHb(5!%>3r0+`eq=&V&E}0Dypi0000000000 z00000A^8LW000R9EC2ui03!e$000L5z=Uu}ED8YtqjJd<+B}(9bIOb$3-31_h|V>=0A{ z1Hh0#H30>fNT})^fRU_83uewx9oRr{f{Sx1Ml`t)EQ zGkHZ67&~y{W5Jpq4H_WfuLxp*3<7O}GEl;1ESe36fLNs=B0&LQM1Buf(R)qg(BRd`t1OPjI1m_q4 diff --git a/docs/zh/docs/Container/public_sys-resources/icon-note.gif b/docs/zh/docs/Container/public_sys-resources/icon-note.gif deleted file mode 100644 index 6314297e45c1de184204098efd4814d6dc8b1cda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394 zcmZ?wbhEHblx7fPSjxcg=ii?@_wH=jwxy=7CMGH-B`L+l$wfv=#>UF#$gv|VY%C^b zCQFtrnKN(Bo_%|sJbO}7RAORe!otL&qo<>yq_Sq+8Xqqo5h0P3w3Lvb5E(g{p01vl zxR@)KuDH0l^z`+-dH3eaw=XqSH7aTIx{kzVBN;X&hha0dQSgWuiw0NWUvMRmkD|> diff --git a/docs/zh/docs/Container/public_sys-resources/icon-notice.gif b/docs/zh/docs/Container/public_sys-resources/icon-notice.gif deleted file mode 100644 index 86024f61b691400bea99e5b1f506d9d9aef36e27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 406 zcmV;H0crk6Nk%w1VIu$@0J8u9|NsB@_xJDb@8;&_*4Ea}&d#;9wWXz{jEszHYim+c zQaU<1At50E0000000000A^8Le000gEEC2ui03!e%000R7038S%NU)&51O^i-Tu6`s z0)`MFE@;3YqD6xSC^kTNu_J>91{PH8XfZ(p1pp2-SU@u3#{mEUC}_}tg3+I#{z}{Ok@D_ZUDg- zt0stin4;pC8M{WLSlRH*1pzqEw1}3oOskyNN?j;7HD{BBZ*OEcv4HK!6Bk6beR+04 z&8}k>SkTusVTDmkyOz#5fCA$JTPGJVQvr3uZ?QzzPQFvD0rGf_PdrcF`pMs}p^BcF zKtKTd`0wipR%nKN&Wj+V}pX;WC3SdJV!a_8Qi zE7z`U*|Y^H0^}fB$R?oG%6hQ z+MMLZbQBH@)Vg&1^3?qHb(5!%>3r0+`eq=&V&E}0Dypi0000000000 z00000A^8LW000R9EC2ui03!e$000L5z=Uu}ED8YtqjJd<+B}(9bIOb$3-31_h|V>=0A{ z1Hh0#H30>fNT})^fRU_83uewx9oRr{f{Sx1Ml`t)EQ zGkHZ67&~y{W5Jpq4H_WfuLxp*3<7O}GEl;1ESe36fLNs=B0&LQM1Buf(R)qg(BRd`t1OPjI1m_q4 diff --git "a/docs/zh/docs/Container/\345\215\207\347\272\247.md" "b/docs/zh/docs/Container/\345\215\207\347\272\247.md" deleted file mode 100644 index 805ef107b..000000000 --- "a/docs/zh/docs/Container/\345\215\207\347\272\247.md" +++ /dev/null @@ -1,25 +0,0 @@ -# 升级 - -- 若为相同大版本之间的升级,例如从2.x.x版本升级到2.x.x版本,请执行如下命令: - - ``` - # sudo yum update -y iSulad - ``` - -- 若为不同大版本之间的升级,例如从1.x.x版本升级到2.x.x版本,请先保存当前的配置文件/etc/isulad/daemon.json,并卸载已安装的iSulad软件包,然后安装待升级的iSulad软件包,随后恢复配置文件。 - ->![](./public_sys-resources/icon-note.gif) **说明:** ->- 可通过** sudo rpm -qa |grep iSulad** 或 **isula version** 命令确认当前iSulad的版本号。 ->- 相同大版本之间,如果希望手动升级,请下载iSulad及其所有依赖的RPM包进行升级,参考命令如下: -> ``` -> # sudo rpm -Uhv iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm -> ``` -> 若升级失败,可通过--force选项进行强制升级,参考命令如下: -> ``` -> # sudo rpm -Uhv --force iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm -> ``` ->- 如若iSulad依赖的libisula组件发生升级,iSulad应该与对应版本的libisula一起升级,参考命令如下: -> ``` -> # sudo rpm -Uvh libisula-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm -> ``` ->- iSulad在openeuler 22.03-LTS-SP3之前的版本使用lcr作为默认容器运行时。因此,跨此版本升级时,在升级之前创建的容器仍是使用lcr作为容器运行时,只有在升级之后创建的容器才会采用新版本的默认运行时runc。若在新版本中仍需使用lcr容器运行时,需要修改isulad默认配置文件(默认为/etc/isulad/daemon.json)中的default-runtime为lcr或者在运行容器时指定容器运行时为lcr(--runtime lcr), 在升级时若对应的lcr、lxc版本发生升级,同样应该与iSulad一起升级。 diff --git "a/docs/zh/docs/Container/\345\221\275\344\273\244\350\241\214\345\217\202\350\200\203.md" "b/docs/zh/docs/Container/\345\221\275\344\273\244\350\241\214\345\217\202\350\200\203.md" deleted file mode 100644 index 0067369d6..000000000 --- "a/docs/zh/docs/Container/\345\221\275\344\273\244\350\241\214\345\217\202\350\200\203.md" +++ /dev/null @@ -1,3 +0,0 @@ -# 命令行参考 - -本章介绍 Docker 容器相关的命令行。 \ No newline at end of file diff --git "a/docs/zh/docs/Container/\345\256\271\345\231\250\345\274\225\346\223\216-4.md" "b/docs/zh/docs/Container/\345\256\271\345\231\250\345\274\225\346\223\216-4.md" deleted file mode 100644 index a37ba4553..000000000 --- "a/docs/zh/docs/Container/\345\256\271\345\231\250\345\274\225\346\223\216-4.md" +++ /dev/null @@ -1,304 +0,0 @@ -# 容器引擎 - -Docker daemon是一个常驻后台的系统进程,docker 子命令执行前先要启动docker daemon。 - -   - -如果是通过rpm包或者系统包管理工具安装的,就可以使用systemctl start docker来启动docker daemon。 - -docker命令支持多个参数选项,对于参数选项有以下约定: - -1. 单个字符的选项可以合并在一起,如: - - ``` - docker run -t -i busybox /bin/sh - ``` - - 可以写成 - - ``` - docker run -ti busybox /bin/sh - ``` - -2. 在命令帮助中看到的如\--icc=true之类的bool命令选项,如果没有使用这个选项,则这个标志位的值就是在命令帮助中看到的缺省值,如果使用了这个选项则这个标志位的值就是命令帮助中看的值的相反值,如果启动docker daemon没有加上使用\--icc选项,则默认设置了\--icc=true,如果使用了\--icc选项则表示是\--icc=false。 -3. 在命令帮助中看到的\--attach=\[\]之类的选项,表示这类的选项可以多次设置,如: - - ``` - docker run --attach=stdin --attach=stdout -i -t busybox /bin/sh - ``` - -4. 在命令帮助中看到的-a, \--attach=\[\]之类的选项,表示这种选项既可以用-a value指定也可以用\--attach=value指定。如: - - ``` - docker run -a stdin --attach=stdout -i -t busybox /bin/sh - ``` - -5. \--name=””之类的选项需要的是一个字符串,只能指定一次,-c=0之类的选项需要的是一个整数,只能指定一次。 - -**表 1** docker daemon启动时指定参数详解 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数名称

-

说明

-

--api-cors-header

-

开放远程API调用的 CORS 头信息。这个接口开关对想进行二次开发的上层应用提供了支持。为remote API设置CORS头信息。

-

--authorization-plugin=[]

-

指定认证插件。

-

-b, --bridge=""

-

挂载已经存在的网桥设备到 Docker 容器里。注意,使用 none 可以停用容器里的网络。

-

--bip=""

-

使用 CIDR 地址来设定自动创建的网桥的 IP。注意,此参数和 -b 不能一起使用。

-

--cgroup-parent

-

为所有容器设定cgroup父目录。

-

--config-file=/etc/docker/daemon.json

-

启动docker daemon的配置文件。

-

--containerd

-

指定containerd的socket路径。

-

-D, --debug=false

-

开启Debug模式。

-

--default-gateway

-

容器IPv4地址的默认网关。

-

--default-gateway-v6

-

容器IPv6地址的默认网关。

-

--default-ulimit=[]

-

容器的默认ulimit值。

-

--disable-legacy-registry

-

不允许使用原版registry。

-

--dns=[]

-

强制容器使用DNS服务器。

-

例如: --dns 8.8.x.x

-

--dns-opt=[]

-

指定使用DNS的选项。

-

--dns-search=[]

-

强制容器使用指定的DNS搜索域名。

-

例如: --dns-search example.com

-

--exec-opt=[]

-

设置运行时执行选项。

-

例如支持native.umask选项:

-
# 启动的容器umask值为0022 --exec-opt native.umask=normal # 启动的容器umask值为0027(缺省值)--exec-opt  native.umask=secure
-

注意如果docker create/run也配置了native.umask参数则以docker create/run中的配置为准。

-

--exec-root=/var/run/docker

-

指定执行状态文件存放的根目录。

-

--fixed-cidr=""

-

设定子网固定IP(ex: 10.20.0.0/16),这个子网IP必须属于网桥内的。

-

--fixed-cidr-v6

-

同上,使用与IPv6。

-

-G, --group="docker"

-

在后台运行模式下,赋予指定的Group到相应的unix socket上。注意,当此参数 --group 赋予空字符串时,将去除组信息。

-

-g, --graph="/var/lib/docker"

-

配置Docker运行时根目录。

-

-H, --host=[]

-

在后台模式下指定socket绑定,可以绑定一个或多个 tcp://host:port, unix:///path/to/socket, fd://* 或 fd://socketfd。例如:

-

$ dockerd -H tcp://0.0.0.0:2375

-

或者

-

$ export DOCKER_HOST="tcp://0.0.0.0:2375"

-

--insecure-registry=[]

-

指定非安全连接的仓库,docker默认所有的连接都是TLS证书来保证安全的,如果仓库不支持https连接或者证书是docker daemon不清楚的证书颁发机构颁发的,则启动daemon的时候要指定如--insecure-registry=192.168.1.110:5000,使用私有仓库都要指定。

-

--image-layer-check=true

-

开启镜像层完整性检查功能,设置为true;关闭该功能,设置为false。如果没有该参数,默认为关闭。

-

docker启动时会检查镜像层的完整性,如果镜像层被破坏,则相关的镜像不可用。docker进行镜像完整性校验时,无法校验内容为空的文件和目录,以及链接文件。因此若镜像因掉电导致上述类型文件丢失,docker的镜像数据完整性校验可能无法识别。docker版本变更时需要检查是否支持该参数,如果不支持,需要从配置文件中删除。

-

--icc=true

-

启用容器间的通信。

-

--ip="0.0.0.0"

-

容器绑定端口时使用的默认IP地址。

-

--ip-forward=true

-

启动容器的 net.ipv4.ip_forward。

-

--ip-masq=true

-

使能IP伪装。

-

--iptables=true

-

启动Docker容器自定义的iptable规则。

-

-l, --log-level=info

-

设置日志级别。

-

--label=[]

-

设置daemon标签,以key=value形式设置。

-

--log-driver=json-file

-

设置容器日志的默认日志驱动。

-

--log-opt=map[]

-

设置日志驱动参数。

-

--mtu=0

-

设置容器网络的MTU值,如果没有这个参数,选用默认 route MTU,如果没有默认route,就设置成常量值 1500。

-

-p, --pidfile="/var/run/docker.pid"

-

后台进程PID文件路径。

-

--raw-logs

-

带有全部时间戳并不带ANSI颜色方案的日志。

-

--registry-mirror=[]

-

指定dockerd优先使用的镜像仓库。

-

-s, --storage-driver=""

-

强制容器运行时使用指定的存储驱动

-

--selinux-enabled=false

-

启用selinux支持,3.10.0-862.14及以上内核版本不支持--selinux-enabled=true。

-

--storage-opt=[]

-

配置存储驱动的参数,存储驱动为devicemapper的时候有效(e.g. dockerd --storage-opt dm.blocksize=512K)。

-

--tls=false

-

启动TLS认证开关。

-

--tlscacert="/root/.docker/ca.pem"

-

通过CA认证过的certificate文件路径。

-

--tlscert="/root/.docker/cert.pem"

-

TLS的certificate文件路径。

-

--tlskey="/root/.docker/key.pem"

-

TLS的key文件路径。

-

--tlsverify=false

-

使用TLS并做后台进程与客户端通讯的验证。

-

--insecure-skip-verify-enforce

-

是否强制跳过证书的主机名/域名验证,默认为false(不跳过)。

-

--use-decrypted-key=true

-

指定使用解密私钥。

-

--userland-proxy=true

-

容器LO设备使用userland proxy。

-

--userns-remap

-

容器内使用user命名空间的用户映射表。

-
说明:

当前版本不支持该参数。

-
-
diff --git a/docs/zh/docs/cloud/container_engine/.markdownlint.json b/docs/zh/docs/cloud/container_engine/.markdownlint.json new file mode 100644 index 000000000..81f0eb7aa --- /dev/null +++ b/docs/zh/docs/cloud/container_engine/.markdownlint.json @@ -0,0 +1,24 @@ +{ + "MD003":{"style":"atx"}, + "MD007":{"indent":4}, + "MD029":{"style":"ordered"}, + "MD009":false, + "MD013":false, + "MD014":false, + "MD020":false, + "MD021":false, + "MD024":false, + "MD025":false, + "MD033":false, + "MD036":false, + "MD042":false, + "MD043":false, + "MD044":false, + "MD045":false, + "MD048":false, + "MD049":false, + "MD050":false, + "MD051":false, + "MD052":false, + "MD053":false +} \ No newline at end of file diff --git a/docs/zh/docs/cloud/container_engine/docker_engine/_toc.yaml b/docs/zh/docs/cloud/container_engine/docker_engine/_toc.yaml new file mode 100644 index 000000000..a6cb6f0f6 --- /dev/null +++ b/docs/zh/docs/cloud/container_engine/docker_engine/_toc.yaml @@ -0,0 +1,24 @@ +label: Docker容器 +isManual: true +description: Docker是一个开源的容器引擎项目,用以实现应用的快速打包、部署和交付 +sections: + - label: 概述 + href: ./overview.md + - label: 安装配置 + href: ./installation_and_configuration_3.md + - label: 容器管理 + href: ./container_management_1.md + - label: 镜像管理 + href: ./image_management_1.md + - label: 命令行参考 + href: ./command_reference.md + sections: + - label: 容器引擎 + href: ./container_engine.md + - label: 容器管理 + href: ./container_management_2.md + - label: 镜像管理 + href: ./image_management_2.md + - label: 统计信息 + href: ./statistics.md + diff --git a/docs/zh/docs/cloud/container_engine/docker_engine/command_reference.md b/docs/zh/docs/cloud/container_engine/docker_engine/command_reference.md new file mode 100644 index 000000000..35483fad7 --- /dev/null +++ b/docs/zh/docs/cloud/container_engine/docker_engine/command_reference.md @@ -0,0 +1,3 @@ +# 命令行参考 + +本章介绍 Docker 容器相关的命令行。 diff --git a/docs/zh/docs/cloud/container_engine/docker_engine/container_engine.md b/docs/zh/docs/cloud/container_engine/docker_engine/container_engine.md new file mode 100644 index 000000000..f8d6b20b7 --- /dev/null +++ b/docs/zh/docs/cloud/container_engine/docker_engine/container_engine.md @@ -0,0 +1,302 @@ +# 容器引擎 + +Docker daemon是一个常驻后台的系统进程,docker 子命令执行前先要启动docker daemon。 + +如果是通过rpm包或者系统包管理工具安装的,就可以使用systemctl start docker来启动docker daemon。 + +docker命令支持多个参数选项,对于参数选项有以下约定: + +1. 单个字符的选项可以合并在一起,如: + + ```bash + docker run -t -i busybox /bin/sh + ``` + + 可以写成 + + ```bash + docker run -ti busybox /bin/sh + ``` + +2. 在命令帮助中看到的如\--icc=true之类的bool命令选项,如果没有使用这个选项,则这个标志位的值就是在命令帮助中看到的缺省值,如果使用了这个选项则这个标志位的值就是命令帮助中看的值的相反值,如果启动docker daemon没有加上使用\--icc选项,则默认设置了\--icc=true,如果使用了\--icc选项则表示是\--icc=false。 +3. 在命令帮助中看到的\--attach=\[\]之类的选项,表示这类的选项可以多次设置,如: + + ```bash + docker run --attach=stdin --attach=stdout -i -t busybox /bin/sh + ``` + +4. 在命令帮助中看到的-a, \--attach=\[\]之类的选项,表示这种选项既可以用-a value指定也可以用\--attach=value指定。如: + + ```bash + docker run -a stdin --attach=stdout -i -t busybox /bin/sh + ``` + +5. \--name=””之类的选项需要的是一个字符串,只能指定一次,-c=0之类的选项需要的是一个整数,只能指定一次。 + +**表 1** docker daemon启动时指定参数详解 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数名称

+

说明

+

--api-cors-header

+

开放远程API调用的 CORS 头信息。这个接口开关对想进行二次开发的上层应用提供了支持。为remote API设置CORS头信息。

+

--authorization-plugin=[]

+

指定认证插件。

+

-b, --bridge=""

+

挂载已经存在的网桥设备到 Docker 容器里。注意,使用 none 可以停用容器里的网络。

+

--bip=""

+

使用 CIDR 地址来设定自动创建的网桥的 IP。注意,此参数和 -b 不能一起使用。

+

--cgroup-parent

+

为所有容器设定cgroup父目录。

+

--config-file=/etc/docker/daemon.json

+

启动docker daemon的配置文件。

+

--containerd

+

指定containerd的socket路径。

+

-D, --debug=false

+

开启Debug模式。

+

--default-gateway

+

容器IPv4地址的默认网关。

+

--default-gateway-v6

+

容器IPv6地址的默认网关。

+

--default-ulimit=[]

+

容器的默认ulimit值。

+

--disable-legacy-registry

+

不允许使用原版registry。

+

--dns=[]

+

强制容器使用DNS服务器。

+

例如: --dns 8.8.x.x

+

--dns-opt=[]

+

指定使用DNS的选项。

+

--dns-search=[]

+

强制容器使用指定的DNS搜索域名。

+

例如: --dns-search example.com

+

--exec-opt=[]

+

设置运行时执行选项。

+

例如支持native.umask选项:

+
# 启动的容器umask值为0022 --exec-opt native.umask=normal # 启动的容器umask值为0027(缺省值)--exec-opt  native.umask=secure
+

注意如果docker create/run也配置了native.umask参数则以docker create/run中的配置为准。

+

--exec-root=/var/run/docker

+

指定执行状态文件存放的根目录。

+

--fixed-cidr=""

+

设定子网固定IP(ex: 10.20.0.0/16),这个子网IP必须属于网桥内的。

+

--fixed-cidr-v6

+

同上,使用与IPv6。

+

-G, --group="docker"

+

在后台运行模式下,赋予指定的Group到相应的unix socket上。注意,当此参数 --group 赋予空字符串时,将去除组信息。

+

-g, --graph="/var/lib/docker"

+

配置Docker运行时根目录。

+

-H, --host=[]

+

在后台模式下指定socket绑定,可以绑定一个或多个 tcp://host:port, unix:///path/to/socket, fd://* 或 fd://socketfd。例如:

+

$ dockerd -H tcp://0.0.0.0:2375

+

或者

+

$ export DOCKER_HOST="tcp://0.0.0.0:2375"

+

--insecure-registry=[]

+

指定非安全连接的仓库,docker默认所有的连接都是TLS证书来保证安全的,如果仓库不支持https连接或者证书是docker daemon不清楚的证书颁发机构颁发的,则启动daemon的时候要指定如--insecure-registry=192.168.1.110:5000,使用私有仓库都要指定。

+

--image-layer-check=true

+

开启镜像层完整性检查功能,设置为true;关闭该功能,设置为false。如果没有该参数,默认为关闭。

+

docker启动时会检查镜像层的完整性,如果镜像层被破坏,则相关的镜像不可用。docker进行镜像完整性校验时,无法校验内容为空的文件和目录,以及链接文件。因此若镜像因掉电导致上述类型文件丢失,docker的镜像数据完整性校验可能无法识别。docker版本变更时需要检查是否支持该参数,如果不支持,需要从配置文件中删除。

+

--icc=true

+

启用容器间的通信。

+

--ip="0.0.0.0"

+

容器绑定端口时使用的默认IP地址。

+

--ip-forward=true

+

启动容器的 net.ipv4.ip_forward。

+

--ip-masq=true

+

使能IP伪装。

+

--iptables=true

+

启动Docker容器自定义的iptable规则。

+

-l, --log-level=info

+

设置日志级别。

+

--label=[]

+

设置daemon标签,以key=value形式设置。

+

--log-driver=json-file

+

设置容器日志的默认日志驱动。

+

--log-opt=map[]

+

设置日志驱动参数。

+

--mtu=0

+

设置容器网络的MTU值,如果没有这个参数,选用默认 route MTU,如果没有默认route,就设置成常量值 1500。

+

-p, --pidfile="/var/run/docker.pid"

+

后台进程PID文件路径。

+

--raw-logs

+

带有全部时间戳并不带ANSI颜色方案的日志。

+

--registry-mirror=[]

+

指定dockerd优先使用的镜像仓库。

+

-s, --storage-driver=""

+

强制容器运行时使用指定的存储驱动

+

--selinux-enabled=false

+

启用selinux支持,3.10.0-862.14及以上内核版本不支持--selinux-enabled=true。

+

--storage-opt=[]

+

配置存储驱动的参数,存储驱动为devicemapper的时候有效(e.g. dockerd --storage-opt dm.blocksize=512K)。

+

--tls=false

+

启动TLS认证开关。

+

--tlscacert="/root/.docker/ca.pem"

+

通过CA认证过的certificate文件路径。

+

--tlscert="/root/.docker/cert.pem"

+

TLS的certificate文件路径。

+

--tlskey="/root/.docker/key.pem"

+

TLS的key文件路径。

+

--tlsverify=false

+

使用TLS并做后台进程与客户端通讯的验证。

+

--insecure-skip-verify-enforce

+

是否强制跳过证书的主机名/域名验证,默认为false(不跳过)。

+

--use-decrypted-key=true

+

指定使用解密私钥。

+

--userland-proxy=true

+

容器LO设备使用userland proxy。

+

--userns-remap

+

容器内使用user命名空间的用户映射表。

+
说明:

当前版本不支持该参数。

+
+
diff --git "a/docs/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-3.md" b/docs/zh/docs/cloud/container_engine/docker_engine/container_management_1.md similarity index 71% rename from "docs/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-3.md" rename to docs/zh/docs/cloud/container_engine/docker_engine/container_management_1.md index 00da5f672..2ee33952e 100644 --- "a/docs/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-3.md" +++ b/docs/zh/docs/cloud/container_engine/docker_engine/container_management_1.md @@ -1,11 +1,4 @@ # 容器管理 -- [容器管理](#容器管理) - - [创建容器](#创建容器) - - [创建容器使用hook-spec](#创建容器使用hook-spec) - - [创建容器配置健康检查](#创建容器配置健康检查) - - [停止与删除容器](#停止与删除容器) - - [容器信息查询](#容器信息查询) - - [修改操作](#修改操作) ## 创建容器 @@ -13,19 +6,19 @@ 运行docker命令需要root权限,当你使用普通用户登录时,需要用sudo权限执行docker命令。 -``` +```bash [root@localhost ~]# docker pull busybox ``` 该命令行将在docker官方的镜像库中下载busybox:latest(命令行中没指定TAG,所以使用默认的TAG名latest),镜像在下载过程中将检测所依赖的层本地是否存在,如果存在就跳过。从私有镜像库下载镜像时,请带上registry描述,例如:假如建立了一个私有镜像库,地址为192.168.1.110:5000,里面有一些常用镜像。使用下面命令行从私有镜像库中下载镜像。 -``` +```bash [root@localhost ~]# docker pull 192.168.1.110:5000/busybox ``` 从私有镜像库中下载下来的image名字带有镜像库地址的信息名字比较长,可以用docker tag命令生成一个名字简单点的image。 -``` +```bash [root@localhost ~]# docker tag 192.168.1.110:5000/busybox busybox ``` @@ -33,14 +26,14 @@ ### 运行一个简单的应用 -``` +```bash [root@localhost ~]# docker run busybox /bin/echo "Hello world" Hello world ``` 该命令行使用busybox:latest(命令行中没有指定tag,所以使用默认的tag名latest)镜像创建了一个容器,在容器内执行了echo "Hello world"。使用下面命令行可以查看刚才创建的这个容器。 -``` +```bash [root@localhost ~]# docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d8c0a3315bc0 busybox "/bin/echo 'Hello wo…" 5 seconds ago Exited (0) 3 seconds ago practical_franklin @@ -48,7 +41,7 @@ d8c0a3315bc0 busybox "/bin/echo 'Hello wo…" 5 seconds ago Exite ### 创建一个交互式的容器 -``` +```bash [root@localhost ~]# docker run -it busybox /bin/bash root@bf22919af2cf:/# ls bin boot dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var @@ -62,14 +55,14 @@ root@bf22919af2cf:/# pwd 执行下面命令行,-d指示这个容器在后台运行,\--name=container1 指定容器的名字为container1。 -``` +```bash [root@localhost ~]# docker run -d --name=container1 busybox /bin/sh -c "while true;do echo hello world;sleep 1;done" 7804d3e16d69b41aac5f9bf20d5f263e2da081b1de50044105b1e3f536b6db1c ``` 命令行的执行结果是返回了这个容器的ID,没有返回命令的执行结果hello world,此时容器在后台运行,可以用docker ps命令查看正在运行的容器: -``` +```bash [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7804d3e16d69 busybox "/bin/sh -c 'while tr" 11 seconds ago Up 10 seconds container1 @@ -77,7 +70,7 @@ CONTAINER ID IMAGE COMMAND CREATED 用docker logs查看容器运行的输出: -``` +```bash [root@localhost ~]# docker logs container1 hello world hello world @@ -89,23 +82,23 @@ hello world 默认情况下,容器可以访问外部网络,而外部网络访问容器时需要通过端口映射,下面以在docker中运行私有镜像库服务registry为例。下面的命令行中-P使registry镜像中开放的端口暴露给主机。 -``` +```bash [root@localhost ~]# docker run --name=container_registry -d -P registry cb883f6216c2b08a8c439b3957fb396c847a99079448ca741cc90724de4e4731 ``` container\_registry这个容器已经启动了,但是并不知道容器中的服务映射到主机的哪个端口,通过docker port查看端口映射。 -``` +```bash [root@localhost ~]# docker port container_registry 5000/tcp -> 0.0.0.0:49155 ``` -从输出可以看出,容器内的5000端口映射到了主机的49155端口。通过主机IP:49155就可以访问registry服务了,在浏览器中输入http://localhost:49155就可以返回registry的版本信息。 +从输出可以看出,容器内的5000端口映射到了主机的49155端口。通过主机IP:49155就可以访问registry服务了,在浏览器中输入就可以返回registry的版本信息。 在运行registry镜像的时候还可以直接指定端口映射如: -``` +```bash docker run --name=container_registry -d -p 5000:5000 registry ``` @@ -113,16 +106,15 @@ docker run --name=container_registry -d -p 5000:5000 registry ### 注意事项 -- **启动容器不能单独加-a stdin** +- **启动容器不能单独加-a stdin** 启动容器时,不能单独加-a stdin,必须要同时加上-a stdout或者-a stderr,否则会导致终端即使在容器退出后也会卡住。 - -- **避免使用已有容器的长id、短id作为新容器的name** +- **避免使用已有容器的长id、短id作为新容器的name** 创建容器时,避免使用已有容器A的长id或短id作为新容器B的name。若使用容器A的长id作为容器B的name,当使用容器B的name作为指定容器进行操作时,docker匹配到的是容器A。若使用容器A的短id作为容器B的name,当使用容器A的短id作为指定容器进行相关操作时,docker匹配到的是容器B。这是因为,docker在匹配容器时,先精确匹配所有容器的长id。若未匹配成功,再根据container\_name进行精确匹配;若还未匹配成功,直接对容器id进行模糊匹配。 -- **使用sh/bash等依赖标准输入输出的容器应该使用\`-ti\`参数,避免出现异常** +- **使用sh/bash等依赖标准输入输出的容器应该使用\`-ti\`参数,避免出现异常** 正常情况:不用\`-ti\`参数启动sh/bash等进程容器,容器会马上退出。 @@ -132,68 +124,66 @@ docker run --name=container_registry -d -p 5000:5000 registry Daemon重启后会接管原有的容器stream,而不带\`-ti\`参数的容器可能就无法处理(因为正常情况下这些容器不存在stream需要接管);真实业务下几乎不存在这种使用方式\(不带 \`-ti\`的sh/bash没有任何作用\),为了避免这类问题发生,限制交互类容器应该使用 \`-ti\`参数。 -- **容器存储卷** +- **容器存储卷** 启动容器时如果通过\`-v\`参数将主机上的文件挂载到容器中,在主机或容器中使用vi或sed命令修改文件可能会使文件inode发生改变,从而导致主机和容器内的文件不同步。容器中挂载文件时应该尽量避免使用这种文件挂载的方式(或不与vi和sed同时使用),也可以通过挂载文件上层目录来避免该问题。在docker挂载卷时“nocopy”选项可以避免将容器内挂载点目录下原有的文件拷贝到主机源目录下,但是这个选项只能在挂载匿名卷时使用,不能在bind mount的场景下使用。 -- **避免使用可能会对host造成影响的选项** +- **避免使用可能会对host造成影响的选项** \--privileged 选项会让容器获得所有权限,容器可以做挂载操作和修改/proc、/sys等目录,可能会对host造成影响,普通容器需要避免使用该选项。 共享host的namespace,比如\--pid host/\--ipc host/\--net host等选项可以让容器跟host共享命名空间,同样会导致容器影响host的结果,需要避免使用。 -- **kernel memory cgroup不稳定,禁止使用** +- **kernel memory cgroup不稳定,禁止使用** kernel memory cgroup在小于4.0版本的Linux内核上仍属于实验阶段,运行起来不稳定,虽然Docker的Warning说是小于4.0就可以,但是我们评估认为,kmemcg在高版本内核仍然不稳定,所以不管是低版本还是高版本,均禁止使用。 当docker run \--kernel-memory时,会产生如下告警: - ``` + ```text WARNING: You specified a kernel memory limit on a kernel older than 4.0. Kernel memory limits are experimental on older kernels, it won't work as expected as expected and can cause your system to be unstable. ``` -- **blkio-weight参数在支持blkio精确控制的内核下不可用** +- **blkio-weight参数在支持blkio精确控制的内核下不可用** \--blkio-weight-device 可以实现容器内更为精确的blkio控制,该控制需要指定磁盘设备,可以通过docker \--blkio-weight-device参数实现。同时在这种内核下docker不再提供\--blkio-weight方式限制容器blkio,使用该参数创建容器将会报错: - ``` + ```text docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "process_linux.go:398: container init caused \"process_linux.go:369: setting cgroup config for ready process caused \\\"blkio.weight not supported, use weight_device instead\\\"\"" ``` -- **使用\--blkio-weight-device需要磁盘支持CFQ调度策略** +- **使用\--blkio-weight-device需要磁盘支持CFQ调度策略** \--blkio-weight-device参数需要磁盘工作于完全公平队列调度(CFQ:Completely Fair Queuing)的策略时才能工作。 - 通过查看磁盘scheduler文件(/sys/block/<磁盘\>/queue/scheduler)可以获知磁盘支持的策略以及当前所采用的策略,如查看sda: + 通过查看磁盘scheduler文件(‘/sys/block/\<磁盘>/queue/scheduler’)可以获知磁盘支持的策略以及当前所采用的策略,如查看sda: - ``` + ```bash # cat /sys/block/sda/queue/scheduler noop [deadline] cfq ``` 当前sda支持三种调度策略:noop, deadline, cfq,并且正在使用deadline策略。通过echo修改策略为cfq: - ``` + ```bash # echo cfq > /sys/block/sda/queue/scheduler ``` - -- **容器基础镜像中systemd使用限制** +- **容器基础镜像中systemd使用限制** 通过基础镜像创建的容器在使用过程中,容器基础镜像中的systemd仅用于系统容器,普通容器不支持使用。 - ### 并发性能 -- docker内部的消息缓冲有一个上限,超过这个上限就会将消息丢弃,因此在并发执行命令时建议不要超过1000条命令,否则有可能会造成docker内部消息丢失,从而造成容器无法启动等严重问题。 -- 并发创建容器并对容器执行restart时会偶现“oci runtime error: container init still running”报错,这是因为containerd对事件等待队列进行了性能优化,容器stop过程中执行runc delete,尝试在1s内kill掉容器的init进程,如果1s内init进程还没有被kill掉的话runc会返回该错误。由于containerd的GC(垃圾回收机制)每隔10s会回收之前runc delete的残留资源, 所以并不影响下次对容器的操作,一般出现上述报错的话等待4\~5s之后再次启动容器即可。 +- docker内部的消息缓冲有一个上限,超过这个上限就会将消息丢弃,因此在并发执行命令时建议不要超过1000条命令,否则有可能会造成docker内部消息丢失,从而造成容器无法启动等严重问题。 +- 并发创建容器并对容器执行restart时会偶现“oci runtime error: container init still running”报错,这是因为containerd对事件等待队列进行了性能优化,容器stop过程中执行runc delete,尝试在1s内kill掉容器的init进程,如果1s内init进程还没有被kill掉的话runc会返回该错误。由于containerd的GC(垃圾回收机制)每隔10s会回收之前runc delete的残留资源, 所以并不影响下次对容器的操作,一般出现上述报错的话等待4\~5s之后再次启动容器即可。 ### 安全特性解读 -1. docker默认的权能配置分析 +1. docker默认的权能配置分析 原生的docker默认配置如下,默认进程携带的Cap如下: - ``` + ```conf "CAP_CHOWN", "CAP_DAC_OVERRIDE", "CAP_FSETID", @@ -212,41 +202,41 @@ docker run --name=container_registry -d -p 5000:5000 registry 默认的seccomp配置是白名单,不在白名单的syscall默认会返回SCMP\_ACT\_ERRNO,根据给docker不同的Cap开放不同的系统调用,不在上面的权限,默认docker都不会给到容器。 -2. CAP\_SYS\_MODULE +2. CAP\_SYS\_MODULE CAP\_SYS\_MODULE这个Cap是让容器可以插入或移除ko,增加该Cap可以让容器逃逸,甚至破坏内核。因为容器最大的隔离是Namespace,在ko中只要把他的Namespace指向init\_nsproxy即可。 -3. CAP\_SYS\_ADMIN +3. CAP\_SYS\_ADMIN sys\_admin权限给容器带来的能力有: - - 文件系统(mount,umount,quotactl) - - namespace设置相关的(setns,unshare,clone new namespace) - - driver ioctl - - 对pci的控制,pciconfig\_read, pciconfig\_write, pciconfig\_iobase - - sethostname + - 文件系统(mount,umount,quotactl) + - namespace设置相关的(setns,unshare,clone new namespace) + - driver ioctl + - 对pci的控制,pciconfig\_read, pciconfig\_write, pciconfig\_iobase + - sethostname -4. CAP\_NET\_ADMIN +4. CAP\_NET\_ADMIN 容器中有访问网络接口的和sniff网络流量的权限,容器可以获取到所有容器包括host的网络流量,对网络隔离破坏极大。 -5. CAP\_DAC\_READ\_SEARCH +5. CAP\_DAC\_READ\_SEARCH 该权限开放了open\_by\_handle\_at和name\_to\_handle\_at两个系统调用,如果host上没有selinux保护,容器中可通过暴力搜索file\_handle结构的inode号,进而可以打开host上的任意文件,影响文件系统的隔离性。 -6. CAP\_SYS\_RAWIO +6. CAP\_SYS\_RAWIO 容器中可对host写入io端口,可造成host内核崩溃。 -7. CAP\_SYS\_PTRACE +7. CAP\_SYS\_PTRACE 容器中有ptrace权限,可对容器的进程进行ptrace调试。现runc已经修补该漏洞,但有些工具比如nsenter和docker-enter并没有改保护,容器中可对这些工具执行的进程进行调试,获取这些工具带入的资源信息(Namespace、fd等),另外, ptrace可以绕过seccomp,极大增加内核攻击面。 -8. Docker Cap接口 \--cap-add all +8. Docker Cap接口 \--cap-add all --cap-add all表示赋予容器所有的权能,包括本节提到的比较危险的权能,使得容器可以逃逸。 -9. 不要禁用docker的seccomp特性 +9. 不要禁用docker的seccomp特性 默认的docker有一个seccomp的配置,配置中使用的是白名单,不在配置的sys\_call会被seccomp禁掉,使用接口--security-opt 'seccomp:unconfined'可以禁止使用seccomp特性。如果禁用seccomp或使用自定义seccomp配置但过滤名单不全,都会增加容器对内核的攻击面。 @@ -294,7 +284,6 @@ docker run --name=container_registry -d -p 5000:5000 registry Docker管理面有接口可以把host上的目录或者设备映射到容器中,比如\--device,-v等参数,不要把host上的敏感目录或者设备映射到容器中。 - ## 创建容器使用hook-spec ### 原理及使用场景 @@ -309,7 +298,7 @@ hook主要有三种类型:prestart,poststart,poststop。分别作用于容 spec的结构体定义为: -``` +```conf // Hook specifies a command that is run at a particular event in the lifecycle of a container type Hook struct{ Path string `json:"path"` @@ -329,16 +318,16 @@ type Hooks struct{ } ``` -- Spec文件的path、args、env 都是必填信息; -- Timeout选填\(建议配置\),参数类型为int,不接受浮点数,范围为\[1, 120\]。 -- Spec内容应该是json格式的,格式不对会报错,示例参考前面。 -- 使用的时候既可以\`docker run \--hook-spec /tmp/hookspec.json xxx\`, 也可以 \`docker create \--hook-spec /tmp/hookspec.json xxx && docker start xxx\`。 +- Spec文件的path、args、env 都是必填信息; +- Timeout选填\(建议配置\),参数类型为int,不接受浮点数,范围为\[1, 120\]。 +- Spec内容应该是json格式的,格式不对会报错,示例参考前面。 +- 使用的时候既可以\`docker run \--hook-spec /tmp/hookspec.json xxx\`, 也可以 \`docker create \--hook-spec /tmp/hookspec.json xxx && docker start xxx\`。 ### 为容器定制特有的hook 以启动过程中添加一个网卡的过程来说明。下面是相应的hook spec文件内容: -``` +```conf { "prestart": [ { @@ -355,12 +344,10 @@ type Hooks struct{ 指定prestart hook增加一个网络hook的执行。路径是/var/lib/docker/hooks/network-hook,args代表程序的参数,第一个参数一般是程序名字,第二个是程序接受的参数。对于network-hook这个hook程序,需要两个参数,第一个是主机上的网卡名字,第二个是在容器内的网卡重命名。 -   +- 注意事项 + 1. hook path必须为docker的graph目录(\--graph)下的hooks文件夹下,默认一般为 /var/lib/docker/hooks,可以通过docker info命令查看root路径。 -- 注意事项 - 1. hook path必须为docker的graph目录(\--graph)下的hooks文件夹下,默认一般为 /var/lib/docker/hooks,可以通过docker info命令查看root路径。 - - ``` + ```bash [root@localhost ~]# docker info ... Docker Root Dir: /var/lib/docker @@ -369,21 +356,18 @@ type Hooks struct{ 这个路径可能会跟随用户手动配置,以及user namespace的使用(daemon --userns-remap)而变化。 path进行软链接解析后,必须以Docker Root Dir/hooks开头(如本例中使用 /var/lib/docker/hooks开头),否则会直接报错。 - 2. hooks path必须指定绝对路径,因为这个是由daemon处理,相对路径对daemon无意义。同时绝对路径也更满足安全要求。 - 3. hook程序打印到stderr的输出会打印给客户端并对容器的声明周期产生影响(比如启动失败),而输出到stdout的打印信息会被直接忽略。 - 4. 严禁在hook里反向调用docker的指令。 - 5. 配置的hook执行文件必须要有可执行权限,否则hook执行会报错。 - 6. 使用hook时,执行时间应尽量短。如果hook中的prestart时间过长(超过2分钟),则会导致容器启动超时失败,如果hook中的poststop时间过长(超过2分钟),也会导致容器异常。 + 2. hooks path必须指定绝对路径,因为这个是由daemon处理,相对路径对daemon无意义。同时绝对路径也更满足安全要求。 + 3. hook程序打印到stderr的输出会打印给客户端并对容器的声明周期产生影响(比如启动失败),而输出到stdout的打印信息会被直接忽略。 + 4. 严禁在hook里反向调用docker的指令。 + 5. 配置的hook执行文件必须要有可执行权限,否则hook执行会报错。 + 6. 使用hook时,执行时间应尽量短。如果hook中的prestart时间过长(超过2分钟),则会导致容器启动超时失败,如果hook中的poststop时间过长(超过2分钟),也会导致容器异常。 目前已知的异常如下:执行docker stop命令停止容器时,2分钟超时执行清理时,由于hook还没执行结束,因此会等待hook执行结束(该过程持有锁),从而导致和该容器相关的操作都会卡住,需要等到hook执行结束才能恢复。另外,由于docker stop命令的2分钟超时处理是异步的过程,因此即使docker stop命令返回了成功,容器的状态也依然是up状态,需要等到hook执行完后状态才会修改为exited。 - - -- 使用建议 - 1. 建议配置hook的Timeout超时时间阈值,超时时间最好在5s以内。 - 2. 建议不要配置过多hook,每个容器建议prestart、poststart、poststop这三个hook都只配置一个,过多hook会导致启动时间长。 - 3. 建议用户识别多个hook之间的依赖关系,如果存在依赖关系,在组合hook配置文件时要根据依赖关系灵活调整顺序,hook的执行顺序是按照配置的spec文件上的先后顺序。 - +- 使用建议 + 1. 建议配置hook的Timeout超时时间阈值,超时时间最好在5s以内。 + 2. 建议不要配置过多hook,每个容器建议prestart、poststart、poststop这三个hook都只配置一个,过多hook会导致启动时间长。 + 3. 建议用户识别多个hook之间的依赖关系,如果存在依赖关系,在组合hook配置文件时要根据依赖关系灵活调整顺序,hook的执行顺序是按照配置的spec文件上的先后顺序。 ### 多个hook-spec @@ -393,7 +377,7 @@ type Hooks struct{ hook1.json内容如下: -``` +```bash # cat /var/lib/docker/hooks/hookspec.json { "prestart": [ @@ -410,7 +394,7 @@ hook1.json内容如下: hook2.json内容如下: -``` +```bash # cat /etc/isulad-tools/hookspec.json { "prestart": [ @@ -433,7 +417,7 @@ hook2.json内容如下: 手工合并后的json内容如下: -``` +```conf { "prestart":[ { @@ -464,7 +448,7 @@ hook2.json内容如下: Docker daemon同样可以接收--hook-spec的参数,--hook-spec的语义与docker create/run的--hook-spec参数相同,这里不再复述。也可以在/etc/docker/daemon.json里添加hook配置: -``` +```conf { "hook-spec": "/tmp/hookspec.json" } @@ -478,25 +462,25 @@ Docker提供了用户定义的对容器进行健康检查的功能。在Dockerfi ### 配置方法 -- 在Dockerfile中添加配置,如: +- 在Dockerfile中添加配置,如: - ``` + ```conf HEALTHCHECK --interval=5m --timeout=3s --health-exit-on-unhealthy=true \ CMD curl -f http://localhost/ || exit 1 ``` 可配置的选项: - 1. --interval=DURATION,默认 30s,相邻两次命令执行的间隔时间。另外,容器启动后,经过interval时间进行第一次检查。 - 2. --timeout=DURATION,默认 30s,单次检查命令执行的时间上限,超时则任务命令执行失败。 - 3. --start-period=DURATION,默认 0s,容器初始化时间。初始化期间也会执行健康检查,健康检查失败不会计入最大重试次数。但是,如果在初始化期间运行状况检查成功,则认为容器已启动。之后所有连续的检查失败都将计入最大重试次数。 - 4. --retries=N,默认 3,健康检查失败最大的重试次数。 - 5. --health-exit-on-unhealthy=BOOLEAN,默认false,检测到容器非健康时是否杀死容器 - 6. CMD,必选,在容器内执行的命令。返回值为0表示成功,非0表示失败。 + 1. --interval=DURATION,默认 30s,相邻两次命令执行的间隔时间。另外,容器启动后,经过interval时间进行第一次检查。 + 2. --timeout=DURATION,默认 30s,单次检查命令执行的时间上限,超时则任务命令执行失败。 + 3. --start-period=DURATION,默认 0s,容器初始化时间。初始化期间也会执行健康检查,健康检查失败不会计入最大重试次数。但是,如果在初始化期间运行状况检查成功,则认为容器已启动。之后所有连续的检查失败都将计入最大重试次数。 + 4. --retries=N,默认 3,健康检查失败最大的重试次数。 + 5. --health-exit-on-unhealthy=BOOLEAN,默认false,检测到容器非健康时是否杀死容器 + 6. CMD,必选,在容器内执行的命令。返回值为0表示成功,非0表示失败。 在配置了HEALTHCHECK后创建镜像,HEALTHCHECK相关配置会被写入镜像的配置中。通过docker inspect可以看到。如: - ``` + ```conf "Healthcheck": { "Test": [ "CMD-SHELL", @@ -505,25 +489,24 @@ Docker提供了用户定义的对容器进行健康检查的功能。在Dockerfi }, ``` +- 在容器创建时的配置: -- 在容器创建时的配置: - - ``` + ```bash docker run -itd --health-cmd "curl -f http://localhost/ || exit 1" --health-interval 5m --health-timeout 3s --health-exit-on-unhealthy centos bash ``` 可配置的选项: - 1. \--health-cmd,必选,在容器内执行的命令。返回值为0表示成功,非0表示失败。 - 2. \--health-interval,默认 30s,最大为int64上限(纳秒)相邻两次命令执行的间隔时间。 - 3. \--health-timeout,默认 30s,最大为int64上限(纳秒),单次检查命令执行的时间上限,超时则任务命令执行失败。 - 4. \--health-start-period,默认 0s,最大为int64上限(纳秒),容器初始化时间。 - 5. \--health-retries,默认 3,最大为int32上限,健康检查失败最大的重试次数。 - 6. \--health-exit-on-unhealthy,默认false,检测到容器非健康时是否杀死容器。 + 1. \--health-cmd,必选,在容器内执行的命令。返回值为0表示成功,非0表示失败。 + 2. \--health-interval,默认 30s,最大为int64上限(纳秒)相邻两次命令执行的间隔时间。 + 3. \--health-timeout,默认 30s,最大为int64上限(纳秒),单次检查命令执行的时间上限,超时则任务命令执行失败。 + 4. \--health-start-period,默认 0s,最大为int64上限(纳秒),容器初始化时间。 + 5. \--health-retries,默认 3,最大为int32上限,健康检查失败最大的重试次数。 + 6. \--health-exit-on-unhealthy,默认false,检测到容器非健康时是否杀死容器。 容器启动后,HEALTHCHECK相关配置会被写入容器的配置中。通过docker inspect可以看到。如: - ``` + ```conf "Healthcheck": { "Test": [ "CMD-SHELL", @@ -532,21 +515,19 @@ Docker提供了用户定义的对容器进行健康检查的功能。在Dockerfi }, ``` - - ### 检查规则 -1. 容器启动后,容器状态中显示health:starting。 -2. 经过start-period时间后开始,以interval为间隔周期性在容器中执行CMD。即:当一次命令执行完毕后,经过interval时间,执行下一次命令。 -3. 若CMD命令在timeout限制的时间内执行完毕,并且返回值为0,则视为一次检查成功,否则视为一次检查失败。检查成功后,容器状态变为health:healthy。 -4. 若CMD命令连续retries次检查失败,则容器状态变为health:unhealthy。失败后容器也会继续进行健康检查。 -5. 容器状态为health:unhealthy时,任意一次检查成功会使得容器状态变为health:healthy。 -6. 设置--health-exit-on-unhealthy的情况下,如果容器因为非被杀死退出(退出返回值137)后,健康检查只有容器在重新启动后才会继续生效。 -7. CMD执行完毕或超时时,docker daemon会将这次检查的起始时间、返回值和标准输出记录到容器的配置文件中。最多记录最新的5条数据。此外,容器的配置文件中还存储着健康检查的相关参数。 +1. 容器启动后,容器状态中显示health:starting。 +2. 经过start-period时间后开始,以interval为间隔周期性在容器中执行CMD。即:当一次命令执行完毕后,经过interval时间,执行下一次命令。 +3. 若CMD命令在timeout限制的时间内执行完毕,并且返回值为0,则视为一次检查成功,否则视为一次检查失败。检查成功后,容器状态变为health:healthy。 +4. 若CMD命令连续retries次检查失败,则容器状态变为health:unhealthy。失败后容器也会继续进行健康检查。 +5. 容器状态为health:unhealthy时,任意一次检查成功会使得容器状态变为health:healthy。 +6. 设置--health-exit-on-unhealthy的情况下,如果容器因为非被杀死退出(退出返回值137)后,健康检查只有容器在重新启动后才会继续生效。 +7. CMD执行完毕或超时时,docker daemon会将这次检查的起始时间、返回值和标准输出记录到容器的配置文件中。最多记录最新的5条数据。此外,容器的配置文件中还存储着健康检查的相关参数。 通过docker ps可以看到容器状态。 -``` +```bash [root@bac shm]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7de2228674a2 testimg "bash" About an hour ago Up About an hour (unhealthy) cocky_davinci @@ -554,7 +535,7 @@ CONTAINER ID IMAGE COMMAND CREATED 运行中的容器的健康检查状态也会被写入容器配置中。通过docker inspect可以看到。 -``` +```conf "Health": { "Status": "healthy", "FailingStreak": 0, @@ -575,60 +556,61 @@ CONTAINER ID IMAGE COMMAND CREATED } ``` ->![](./public_sys-resources/icon-note.gif) **说明:** ->- 容器内健康检查的状态信息最多保存5条。会保存最后得到的5条记录。 ->- 容器内健康检查相关配置同时最多只能有一条生效。Dockerfile中配置的靠后的条目会覆盖靠前的;容器创建时的配置会覆盖镜像中的。 ->- 在Dockerfile中可以通过 HEALTHCHECK NONE来取消引用的镜像中的健康检查配置。在容器运行时可以通过配置--no-healthcheck来取消镜像中的健康检查配置。不允许在启动时同时配置健康检查相关选项与--no-healthcheck选项。 ->- 带有健康检查配置的容器启动后,若docker daemon退出,则健康检查不会执行,一直等待。docker daemon再次启动后,容器健康状态会变为starting。之后检查规则同上。 ->- 构建容器镜像时若健康检查相关参数配置为空,则按照缺省值处理。 ->- 容器启动时若健康检查相关参数配置为0,则按照缺省值处理。 +> [!NOTE]说明 +> +> - 容器内健康检查的状态信息最多保存5条。会保存最后得到的5条记录。 +> - 容器内健康检查相关配置同时最多只能有一条生效。Dockerfile中配置的靠后的条目会覆盖靠前的;容器创建时的配置会覆盖镜像中的。 +> - 在Dockerfile中可以通过 HEALTHCHECK NONE来取消引用的镜像中的健康检查配置。在容器运行时可以通过配置--no-healthcheck来取消镜像中的健康检查配置。不允许在启动时同时配置健康检查相关选项与--no-healthcheck选项。 +> - 带有健康检查配置的容器启动后,若docker daemon退出,则健康检查不会执行,一直等待。docker daemon再次启动后,容器健康状态会变为starting。之后检查规则同上。 +> - 构建容器镜像时若健康检查相关参数配置为空,则按照缺省值处理。 +> - 容器启动时若健康检查相关参数配置为0,则按照缺省值处理。 ## 停止与删除容器 用docker stop停止名为container1的容器: -``` +```bash [root@localhost ~]# docker stop container1 ``` 也可以用docker kill来杀死容器达到停止容器的目的: -``` +```bash [root@localhost ~]# docker kill container1 ``` 当容器停止之后,可以使用docker rm删除容器: -``` +```bash [root@localhost ~]# docker rm container1 ``` 当然,使用docker rm -f 强制删除容器也是可以的: -``` +```bash [root@localhost ~]# docker rm -f container1 ``` ### 注意事项 -- 禁止使用docker rm -f XXX 删除容器。如果使用强制删除,docker rm会忽略过程中的错误,可能导致容器相关元数据残留。如果使用普通删除,如果删除过程出错,则会删除失败,不会导致元数据残留。 -- 避免使用docker kill命令。docker kill命令发送相关信号给容器内业务进程,依赖于容器内业务进程对信号的处理策略,可能导致业务进程的信号处理行为与指令的预期不符合的情况。 -- docker stop处于restarting状态的容器可能容器不会马上停止。如果一个容器使用了重启规则,当容器处于restarting状态时,docker stop这个容器时有很低的概率会立即返回,容器仍然会在重启规则的作用下再次启动。 -- 不能用docker restart重启加了--rm参数的容器。加了--rm参数的容器在退出时,容器会主动删除,如果重启一个加了--rm的参数的容器, 可能会导致一些异常情况,比如启动容器时,同时加了--rm与-ti参数,对容器执行restart操作,可能会概率性卡住无法退出。 +- 禁止使用docker rm -f XXX 删除容器。如果使用强制删除,docker rm会忽略过程中的错误,可能导致容器相关元数据残留。如果使用普通删除,如果删除过程出错,则会删除失败,不会导致元数据残留。 +- 避免使用docker kill命令。docker kill命令发送相关信号给容器内业务进程,依赖于容器内业务进程对信号的处理策略,可能导致业务进程的信号处理行为与指令的预期不符合的情况。 +- docker stop处于restarting状态的容器可能容器不会马上停止。如果一个容器使用了重启规则,当容器处于restarting状态时,docker stop这个容器时有很低的概率会立即返回,容器仍然会在重启规则的作用下再次启动。 +- 不能用docker restart重启加了--rm参数的容器。加了--rm参数的容器在退出时,容器会主动删除,如果重启一个加了--rm的参数的容器, 可能会导致一些异常情况,比如启动容器时,同时加了--rm与-ti参数,对容器执行restart操作,可能会概率性卡住无法退出。 ### docker stop/restart 指定t参数且t<0时,请确保自己容器的应用会处理stop信号 Stop的原理:(Restart会调用Stop流程) -1. Stop会首先给容器发送Stop 信号(15) -2. 然后等待一定的时间(这个时间就是用户输入的 t) -3. 过了一定时间,如果容器还活着,那么就发送kill信号(9)使容器强制退出 +1. Stop会首先给容器发送Stop 信号(15) +2. 然后等待一定的时间(这个时间就是用户输入的 t) +3. 过了一定时间,如果容器还活着,那么就发送kill信号(9)使容器强制退出 输入参数t(单位s)的含义: -- t<0 : 表示死等,不管多久都等待程序优雅退出,既然用户这么输入了,表示对自己的应用比较放心,认为自己的程序有合理的stop信号的处理机制 -- t=0 : 表示不等,立即发送kill -9 到容器 -- t\>0 : 表示等一定的时间,如果容器还未退出,就发送kill -9 到容器 +- t<0 : 表示死等,不管多久都等待程序优雅退出,既然用户这么输入了,表示对自己的应用比较放心,认为自己的程序有合理的stop信号的处理机制 +- t=0 : 表示不等,立即发送kill -9 到容器 +- t\>0 : 表示等一定的时间,如果容器还未退出,就发送kill -9 到容器 所以如果用户使用t<0 \(比如t=-1\),请确保自己容器的应用会正确处理signal 15,如果容器忽略了该信号,会导致docker stop一直卡住。 @@ -644,24 +626,23 @@ Docker在执行容器删除时,先停止容器的相关进程,之后将容 一般来说,导致该类问题的可能原因是容器对应的pid namespace由于进程残留导致无法被销毁。如果上述方法无法解决问题,可以通过借助linux工具,获取容器内残留进程,确定pid namespace中进程无法退出的原因,解决后容器就可以退出: -- 获取容器pid namespace id +- 获取容器pid namespace id - ``` + ```bash docker inspect --format={{.State.Pid}} CONTAINERID | awk '{print "/proc/"$1"/ns/pid"}' |xargs readlink ``` -- 获取该namespace下的线程 +- 获取该namespace下的线程 - ``` + ```bash ls -l /proc/*/task/*/ns/pid |grep -F PIDNAMESPACE_ID |awk '{print $9}' |awk -F \/ '{print $5}' ``` - ## 容器信息查询 在任何情况下,容器的状态都不应该以docker命令执行是否成功返回为判断标准。如想查看容器状态,建议使用: -``` +```bash docker inspect ``` @@ -671,9 +652,9 @@ docker inspect docker exec进入容器执行的第一个命令为 bash 命令时,当退出 exec 时,要保证在这次exec启动的进程都退出了,再执行exit退出,否则会导致exit退出时终端卡住的情况。如果要在exit退出时,exec中启动的进程仍然在后台保持运行,要在启动进程时加上nohup。 -### docker rename和docker stats 的使用冲突 +### docker rename和docker stats \的使用冲突 -如果使用docker stats 实时监控容器,当使用docker rename重命名容器之后,docker stats中显示的名字将还是原来的名字,不是rename后的名字。 +如果使用`docker stats ` 实时监控容器,当使用docker rename重命名容器之后,docker stats中显示的名字将还是原来的名字,不是rename后的名字。 ### docker rename操作restarting状态的容器可能会失败 @@ -681,14 +662,14 @@ docker exec进入容器执行的第一个命令为 bash 命令时,当退出 ex ### docker cp -1. 使用docker cp向容器中拷贝文件时,docker ps以及所有对这个容器的操作都将等待docker cp结束之后才能进行。 -2. 容器以非root用户运行,当使用docker cp命令复制主机上的一个非root权限的文件到容器时,文件在容器中的权限角色会变成root。docker cp与cp命令不同,docker cp会修改复制到容器中文件的uid和gid为root。 +1. 使用docker cp向容器中拷贝文件时,docker ps以及所有对这个容器的操作都将等待docker cp结束之后才能进行。 +2. 容器以非root用户运行,当使用docker cp命令复制主机上的一个非root权限的文件到容器时,文件在容器中的权限角色会变成root。docker cp与cp命令不同,docker cp会修改复制到容器中文件的uid和gid为root。 ### docker login 执行docker login后,会将user/passwd经 aes(256位)加密后保存在/root/.docker/config.json,同时生成 _root_.docker/aeskey\(权限0600\),用来解密/root/.docker/config.json中的 user/passwd。目前不能定时更新aeskey,只能由用户手动删除aeskey来更新。aeskey更新后,不管是否重启过docker daemon,都需要重新login,才可以push。例如: -``` +```bash root@hello:~/workspace/dockerfile# docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: example Password: @@ -715,4 +696,3 @@ The push refers to a repository [docker.io/example/empty] 547b6288eb33: Layer already exists latest: digest: sha256:99d4fb4ce6c6f850f3b39f54f8eca0bbd9e92bd326761a61f106a10454b8900b size: 524 ``` - diff --git "a/docs/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-4.md" b/docs/zh/docs/cloud/container_engine/docker_engine/container_management_2.md similarity index 99% rename from "docs/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-4.md" rename to docs/zh/docs/cloud/container_engine/docker_engine/container_management_2.md index da0f3af1c..20357d89e 100644 --- "a/docs/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206-4.md" +++ b/docs/zh/docs/cloud/container_engine/docker_engine/container_management_2.md @@ -1,32 +1,5 @@ # 容器管理 -- [容器管理](#容器管理) - - [总体说明](#总体说明) - - [attach](#attach) - - [commit](#commit) - - [cp](#cp) - - [create](#create) - - [diff](#diff) - - [exec](#exec) - - [export](#export) - - [inspect](#inspect) - - [logs](#logs) - - [pause/unpause](#pause-unpause) - - [port](#port) - - [ps](#ps) - - [rename](#rename) - - [restart](#restart) - - [rm](#rm) - - [run](#run) - - [start](#start) - - [stats](#stats) - - [stop](#stop) - - [top](#top) - - [update](#update) - - [wait](#wait) - - - # 总体说明 当前docker支持的子命令,按照功能划分为以下几组: @@ -255,9 +228,6 @@ 其中有些子命令还有一些参数选项如docker run,通过docker COMMAND --help可以查看相应COMMAND命令的帮助,命令选项参考上文的命令选项约定。下面详细介绍每个命令的使用。 - - - ## attach 用法:**docker attach \[OPTIONS\] CONTAINER** @@ -272,10 +242,10 @@ 示例: -``` +```sh $ sudo docker attach attach_test root@2988b8658669:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var -``` +```sh ## commit @@ -295,7 +265,7 @@ root@2988b8658669:/# ls bin boot dev etc home lib lib64 media mnt opt 运行一个容器,然后将这个容器提交成一个新的image -``` +```sh $ sudo docker commit test busybox:test sha256:be4672959e8bd8a4291fbdd9e99be932912fe80b062fba3c9b16ee83720c33e1 @@ -304,8 +274,6 @@ REPOSITORY TAG IMAGE ID CREATED busybox latest e02e811dd08f 2 years ago 1.09MB ``` -   - ## cp 用法:docker cp \[OPTIONS\] CONTAINER:SRC\_PATH DEST\_PATH|- @@ -326,7 +294,7 @@ docker cp \[OPTIONS\] SRC\_PATH|- CONTAINER:DEST\_PATH 复制registry容器中/test目录到主机的/home/aaa目录中 -``` +```sh $ sudo docker cp registry:/test /home/aaa ``` @@ -714,7 +682,7 @@ $ sudo docker cp registry:/test /home/aaa 创建了一个名为busybox的容器,创建之后的容器用docker start命令启动。 -``` +```sh $ sudo docker create -ti --name=busybox busybox /bin/bash ``` @@ -728,20 +696,18 @@ $ sudo docker create -ti --name=busybox busybox /bin/bash 示例: -``` +```sh $ sudo docker diff registry C /root A /root/.bash_history A /test ``` -   - ## exec ### 接口原型 -``` +```sh rpc Exec(ExecRequest) returns (ExecResponse) {} ``` @@ -822,14 +788,12 @@ rpc Exec(ExecRequest) returns (ExecResponse) {} 将名为busybox的容器的内容导出到busybox.tar包中: -``` +```sh $ sudo docker export busybox > busybox.tar $ ls busybox.tar ``` -   - ## inspect 用法:**docker inspect \[OPTIONS\] CONTAINER|IMAGE \[CONTAINER|IMAGE...\]** @@ -848,9 +812,9 @@ busybox.tar 示例: -1. 返回一个容器的信息 +1. 返回一个容器的信息 - ``` + ```sh $ sudo docker inspect busybox_test [ { @@ -874,16 +838,13 @@ busybox.tar ...... ``` -    +2. 按照给定格式返回一个容器的指定信息,下面的例子返回busybox\_test容器IP地址 -2. 按照给定格式返回一个容器的指定信息,下面的例子返回busybox\_test容器IP地址 - - ``` + ```sh $ sudo docker inspect -f {{.NetworkSettings.IPAddress}} busybox_test 172.17.0.91 ``` - ## logs 用法:**docker logs \[OPTIONS\] CONTAINER** @@ -902,9 +863,9 @@ busybox.tar 示例: -1. 查看jaegertracing容器的日志信息,该容器上跑了一个jaegertracing服务 +1. 查看jaegertracing容器的日志信息,该容器上跑了一个jaegertracing服务 - ``` + ```sh $ sudo docker logs jaegertracing {"level":"info","ts":1566979103.3696961,"caller":"healthcheck/handler.go:99","msg":"Health Check server started","http-port":14269,"status":"unavailable"} {"level":"info","ts":1566979103.3820567,"caller":"memory/factory.go:55","msg":"Memory storage configuration","configuration":{"MaxTraces":0}} @@ -916,11 +877,9 @@ busybox.tar {"level":"info","ts":1566979103.4577134,"caller":"all-in-one/main.go:256","msg":"Listening for Zipkin HTTP traffic","zipkin.http-port":9411} ``` -    - -2. 加上-f选项,实时打印jaegertracing容器的日志信息 +2. 加上-f选项,实时打印jaegertracing容器的日志信息 - ``` + ```sh $ sudo docker logs -f jaegertracing {"level":"info","ts":1566979103.3696961,"caller":"healthcheck/handler.go:99","msg":"Health Check server started","http-port":14269,"status":"unavailable"} {"level":"info","ts":1566979103.3820567,"caller":"memory/factory.go:55","msg":"Memory storage configuration","configuration":{"MaxTraces":0}} @@ -929,9 +888,6 @@ busybox.tar {"level":"info","ts":1566979103.3922884,"caller":"all-in-one/main.go:186","msg":"Starting agent"} ``` -    - - ## pause-unpause 用法:**docker pause CONTAINER** @@ -946,39 +902,34 @@ busybox.tar 本示例将演示一个跑了docker registry(docker镜像服务)服务的容器,当使用docker pause 命令暂停这个容器的进程后,使用curl命令访问该registry服务将阻塞,使用docker unpause命令将恢复registry服务,可以用curl命令访问。 -1. 启动一个registry容器 +1. 启动一个registry容器 - ``` + ```sh $ sudo docker run -d --name pause_test -p 5000:5000 registry ``` 此时可以用curl命令访问这个服务,请求状态码会返回200 OK。 - ``` + ```sh $ sudo curl -v 127.0.0.1:5000 ``` -    - -2. 暂停这个容器内的进程 +2. 暂停这个容器内的进程 - ``` + ```sh $ sudo docker pause pause_test ``` 此时用curl命令访问这个服务将阻塞,等待服务开启。 -3. 恢复运行这个容器内的进程 +3. 恢复运行这个容器内的进程 - ``` + ```sh $ sudo docker unpause pause_test ``` 此时步骤2中的curl访问将恢复运行,请求状态码返回200 OK。 -    - - ## port 用法:**docker port CONTAINER \[PRIVATE\_PORT\[/PROTO\]\]** @@ -989,21 +940,20 @@ busybox.tar 示例: -1. 列出容器所有的端口映射 +1. 列出容器所有的端口映射 - ``` + ```sh $ sudo docker port registry 5000/tcp -> 0.0.0.0.:5000 ``` -2. 查找容器指定端口的映射 +2. 查找容器指定端口的映射 - ``` + ```sh $ sudo docker port registry 5000 0.0.0.0.:5000 ``` - ## ps 用法:**docker ps \[OPTIONS\]** @@ -1028,19 +978,18 @@ busybox.tar 示例: -1. 列出正在运行的容器 +1. 列出正在运行的容器 - ``` + ```sh $ sudo docker ps ``` -2. 列出所有的容器 +2. 列出所有的容器 - ``` + ```sh $ sudo docker ps -a ``` - ## rename 用法:**docker rename OLD\_NAME NEW\_NAME** @@ -1051,7 +1000,7 @@ busybox.tar 示例中,用docker run创建并启动一个容器,使用docker rename对容器重命名,并查看容器名是否改变。 -``` +```sh $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b15976967abb busybox:latest "bash" 3 seconds ago Up 2 seconds festive_morse @@ -1061,8 +1010,6 @@ CONTAINER ID IMAGE COMMAND CREATED b15976967abb busybox:latest "bash" 34 seconds ago Up 33 seconds new_name ``` -   - ## restart 用法:**docker restart \[OPTIONS\] CONTAINER \[CONTAINER...\]** @@ -1075,11 +1022,11 @@ b15976967abb busybox:latest "bash" 34 seconds ago 示例: -``` +```sh $ sudo docker restart busybox ``` ->![](./public_sys-resources/icon-note.gif) **说明:** +>![NOTE]说明 >容器在restart过程中,如果容器内存在D状态或Z状态的进程,可能会导致容器重启失败,这需要进一步分析导致容器内进程D状态或Z状态的原因,待容器内进程D状态或Z状态解除后,再进行容器restart操作。 ## rm @@ -1098,19 +1045,18 @@ $ sudo docker restart busybox 示例: -1. 删除一个停止运行的容器 +1. 删除一个停止运行的容器 - ``` + ```sh $ sudo docker rm test ``` -2. 删除一个正在运行的容器 +2. 删除一个正在运行的容器 - ``` + ```sh $ sudo docker rm -f rm_test ``` - ## run 用法:**docker run \[OPTIONS\] IMAGE \[COMMAND\] \[ARG...\]** @@ -1129,7 +1075,7 @@ $ sudo docker restart busybox 使用busybox镜像运行一个容器,在容器启动后执行/bin/sh -``` +```sh $ sudo docker run -ti busybox /bin/sh ``` @@ -1151,7 +1097,7 @@ $ sudo docker run -ti busybox /bin/sh 如果启动容器时不加-i -a选项,容器将在后台启动。 -``` +```sh $ sudo docker start -i -a busybox ``` @@ -1171,7 +1117,7 @@ $ sudo docker start -i -a busybox 示例中,用docker run创建并启动一个容器,docker stats将输出容器的资源占用情况。 -``` +```sh $ sudo docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 2e242bcdd682 jaeger 0.00% 77.08MiB / 125.8GiB 0.06% 42B / 1.23kB 97.9MB / 0B 38 @@ -1179,8 +1125,6 @@ CONTAINER ID NAME CPU % MEM USAGE / LIMI deb9e49fdef1 hardcore_montalcini 0.01% 12.79MiB / 125.8GiB 0.01% 0B / 0B 0B / 0B 9 ``` -   - ## stop 用法:**docker stop \[OPTIONS\] CONTAINER \[CONTAINER...\]** @@ -1193,7 +1137,7 @@ deb9e49fdef1 hardcore_montalcini 0.01% 12.79MiB / 125.8 示例: -``` +```sh $ sudo docker stop -t=15 busybox ``` @@ -1209,7 +1153,7 @@ $ sudo docker stop -t=15 busybox 先运行了一个名为top\_test的容器,并在其中执行了top指令 -``` +```sh $ sudo docker top top_test UID PID PPID C STIME TTY TIME CMD root 70045 70028 0 15:52 pts/0 00:00:00 bash @@ -1308,7 +1252,7 @@ root 70045 70028 0 变更一个容器名为busybox的cpu和mem配置,包括容器获得主机CPU的相对权重值为512,容器中进程允许运行的CPU核心为0,1,2,3,容器运行内存限制为512m。 -``` +```sh $ sudo docker update --cpu-shares 512 --cpuset-cpus=0,3 --memory 512m ubuntu ``` @@ -1324,13 +1268,13 @@ $ sudo docker update --cpu-shares 512 --cpuset-cpus=0,3 --memory 512m ubuntu 先开启一个名为busybox的容器 -``` +```sh $ sudo docker start -i -a busybox ``` 执行docker wait -``` +```sh $ sudo docker wait busybox 0 ``` diff --git "a/docs/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-3.md" b/docs/zh/docs/cloud/container_engine/docker_engine/image_management_1.md similarity index 54% rename from "docs/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-3.md" rename to docs/zh/docs/cloud/container_engine/docker_engine/image_management_1.md index 8e8c5c2a7..3d686fc23 100644 --- "a/docs/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-3.md" +++ b/docs/zh/docs/cloud/container_engine/docker_engine/image_management_1.md @@ -1,8 +1,4 @@ # 镜像管理 -- [镜像管理](#镜像管理) - - [创建镜像](#创建镜像) - - [查看镜像](#查看镜像) - - [删除镜像](#删除镜像) ## 创建镜像 @@ -10,32 +6,31 @@ docker pull、docker build、docker commit、docker import、docker load都可 ### 注意事项 -1. 避免并发docker load和docker rmi操作。 如果同时满足如下两个条件,可能导致并发性问题: +1. 避免并发docker load和docker rmi操作。 如果同时满足如下两个条件,可能导致并发性问题: - - 某个镜像存在于系统中。 - - 同时对该镜像进行docker rmi和docker load操作。 + - 某个镜像存在于系统中。 + - 同时对该镜像进行docker rmi和docker load操作。 所以使用时应该避免这种场景(注:所有的镜像创建操作如tag,build,load和rmi并发都有可能会导致类似的错误,应该尽量避免这类操作与rmi的并发)。 -2. 如果Docker操作镜像时系统掉电,可能导致镜像损坏,需要手动恢复。 +2. 如果Docker操作镜像时系统掉电,可能导致镜像损坏,需要手动恢复。 由于Docker在操作镜像(pull/load/rmi/build/combine/commit/import等)时,镜像数据的操作是异步的、镜像元数据是同步的。所以如果在镜像数据未全部刷到磁盘时掉电,可能导致镜像数据和元数据不一致。对用户的表现是镜像可以看到\(有可能是none 镜像\),但是无法启动容器,或者启动后的容器有异常。这种情况下应该先使用docker rmi删除该镜像,然后重新进行之前的操作,系统可以恢复。 -3. 生产环境节点应避免存留超大数量镜像,请及时清理不使用的镜像。 +3. 生产环境节点应避免存留超大数量镜像,请及时清理不使用的镜像。 镜像数目过多会导致docker image等命令执行过慢,从而导致docker build/docker commit等相关命令执行失败,并可能导致内存堆积。在生产环境中,请及时清理不再使用的镜像和中间过程镜像。 -4. 使用\--no-parent参数build镜像时,如果有多个build操作同时进行,并且Dockerfile里 FROM的镜像相同,则可能会残留镜像,分为以下两种情况: - - FROM的镜像不是完整镜像,则有可能会残留FROM的镜像运行时生成的镜像。残留的镜像名类似base\_v1.0.0-app\_v2.0.0,或者残留镜像。 - - 如果Dockerfile里的前几条指令相同,则有可能会残留镜像。 - +4. 使用\--no-parent参数build镜像时,如果有多个build操作同时进行,并且Dockerfile里 FROM的镜像相同,则可能会残留镜像,分为以下两种情况: + - FROM的镜像不是完整镜像,则有可能会残留FROM的镜像运行时生成的镜像。残留的镜像名类似base\_v1.0.0-app\_v2.0.0,或者残留镜像。 + - 如果Dockerfile里的前几条指令相同,则有可能会残留镜像。 ### 可能会产生none镜像场景 -1. none镜像是指没有tag的最顶层镜像,比如ubuntu的imageID,只有一个tag是ubuntu,如果这个tag没了,但是imageID还在,那么这个imageID就变成了none镜像。 -2. Save镜像的过程中因为要把镜像的数据导出来,所以对image进行保护,但是如果这个时候来一个删除操作,可能会untag成功,删除镜像ID失败,造成该镜像变成none镜像。 -3. 执行docker pull时掉电,或者系统panic,可能出现none镜像,为保证镜像完整性,此时可通过docker rmi 删除镜像后重新拉取。 -4. 执行docker save保存镜像时,如果指定的名字为镜像ID,则load后的镜像也没有tag,其镜像名为none。 +1. none镜像是指没有tag的最顶层镜像,比如ubuntu的imageID,只有一个tag是ubuntu,如果这个tag没了,但是imageID还在,那么这个imageID就变成了none镜像。 +2. Save镜像的过程中因为要把镜像的数据导出来,所以对image进行保护,但是如果这个时候来一个删除操作,可能会untag成功,删除镜像ID失败,造成该镜像变成none镜像。 +3. 执行docker pull时掉电,或者系统panic,可能出现none镜像,为保证镜像完整性,此时可通过docker rmi 删除镜像后重新拉取。 +4. 执行docker save保存镜像时,如果指定的名字为镜像ID,则load后的镜像也没有tag,其镜像名为none。 ### build镜像的同时删除该镜像,有极低概率导致镜像build失败 @@ -45,7 +40,7 @@ docker pull、docker build、docker commit、docker import、docker load都可 查看本地镜像列表: -``` +```sh docker images ``` @@ -53,11 +48,10 @@ docker images 删除镜像(image处为具体镜像名): -``` +```sh docker rmi image ``` ### 注意事项 禁止使用docker rmi -f XXX删除镜像。如果使用强制删除,docker rmi会忽略过程中的错误,可能导致容器或者镜像元数据残留。如果使用普通删除,如果删除过程出错,则会删除失败,不会导致元数据残留。 - diff --git "a/docs/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-4.md" b/docs/zh/docs/cloud/container_engine/docker_engine/image_management_2.md similarity index 92% rename from "docs/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-4.md" rename to docs/zh/docs/cloud/container_engine/docker_engine/image_management_2.md index 73eca434a..4fea14dfc 100644 --- "a/docs/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206-4.md" +++ b/docs/zh/docs/cloud/container_engine/docker_engine/image_management_2.md @@ -1,21 +1,5 @@ # 镜像管理 -- [镜像管理](#镜像管理) - - [build](#build) - - [history](#history) - - [images](#images) - - [import](#import) - - [load](#load) - - [login](#login) - - [logout](#logout) - - [pull](#pull) - - [push](#push) - - [rmi](#rmi) - - [save](#save) - - [search](#search) - - [tag](#tag) - - ## build 用法:**docker build \[OPTIONS\] PATH | URL | -** @@ -85,16 +69,12 @@ Dockerfile介绍: Dockerfile是一个镜像的表示,可以通过Dockerfile来描述构建镜像的步骤,并自动构建一个容器,所有的 Dockerfile 命令格式都是:**INSTRUCTION arguments** -   - **FROM命令** 格式:FROM 或 FROM : 功能:该命令指定基本镜像,是所有Dockerfile文件的第一个命令,如果没有指定基本镜像的tag,使用默认tag名latest。 -   - **RUN命令** 格式:RUN \(the command is run in a shell - \`/bin/sh -c\`\) 或者 @@ -107,78 +87,58 @@ docker run image command docker commit container\_id -   - **注释** 使用\#注释 -   - **MAINTAINER命令** 格式:MAINTAINER 功能:命令用来指定维护者的姓名和联系方式 -   - **ENTRYPOINT命令** 格式:ENTRYPOINT cmd param1 param2 ... 或者ENTRYPOINT \["cmd", "param1", "param2"...\] 功能:设置在容器启动时执行命令 -   - **USER命令** 格式:USER name 功能:指定 memcached 的运行用户 -   - **EXPOSE命令** 格式:EXPOSE \[...\] 功能:开放镜像的一个或多个端口 -   - **ENV命令** 格式:ENV 功能:设置环境变量,设置了后,后续的RUN命令都可以使用 -   - **ADD命令** 格式:ADD 功能:从src复制文件到container的dest路径, 是相对被构建的源目录的相对路径,可以是文件或目录的路径,也可以是一个远程的文件url, 是container中的绝对路径 -   - **VOLUME命令** 格式:VOLUME \[""\] 功能:创建一个挂载点用于共享目录 -   - **WORKDIR命令** 格式:workdir 功能:配置RUN, CMD, ENTRYPOINT 命令设置当前工作路径可以设置多次,如果是相对路径,则相对前一个 WORKDIR 命令 -   - **CMD命令** 格式:CMD \["executable","param1","param2"\] \(like an exec, preferred form\) @@ -189,8 +149,6 @@ CMD command param1 param2 \(as a shell\) 功能:一个Dockerfile里只能有一个CMD,如果有多个,只有最后一个生效 -   - **ONBUILD命令** 格式:ONBUILD \[其他指令\] @@ -199,7 +157,7 @@ CMD command param1 param2 \(as a shell\) 下面是Dockerfile的一个完整例子,该Dockerfile将构建一个安装了sshd服务的image -``` +```txt FROM busybox ENV http_proxy http://192.168.0.226:3128 ENV https_proxy https://192.168.0.226:3128 @@ -209,22 +167,20 @@ EXPOSE 22 ENTRYPOINT /usr/sbin/sshd -D ``` - 示例: -1. 以上文的Dockerfile构建一个image +1. 以上文的Dockerfile构建一个image - ``` + ```sh $ sudo docker build -t busybox:latest ``` -2. 通过以下命令可以看到这个生成的image: +2. 通过以下命令可以看到这个生成的image: - ``` + ```sh docker images | grep busybox ``` - ## history 用法:**docker history \[OPTIONS\] IMAGE** @@ -241,15 +197,13 @@ ENTRYPOINT /usr/sbin/sshd -D 示例: -``` +```sh $ sudo docker history busybox:test IMAGE CREATED CREATED BY SIZE COMMENT be4672959e8b 15 minutes ago bash 23B 21970dfada48 4 weeks ago 128MB Imported from - ``` -   - ## images 用法:**docker images \[OPTIONS\] \[NAME\]** @@ -268,14 +222,12 @@ be4672959e8b 15 minutes ago bash 23B 示例: -``` +```sh $ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest e02e811dd08f 2 years ago 1.09MB ``` -   - ## import 用法:**docker import URL|- \[REPOSITORY\[:TAG\]\]** @@ -288,7 +240,7 @@ busybox latest e02e811dd08f 2 years ago 从上文介绍的docker export命令时导出的busybox.tar用docker import命令生成一个新的image -``` +```sh $ sudo docker import busybox.tar busybox:test sha256:a79d8ae1240388fd3f6c49697733c8bac4d87283920defc51fb0fe4469e30a4f $ sudo docker images @@ -296,8 +248,6 @@ REPOSITORY TAG IMAGE ID CREATED busybox test a79d8ae12403 2 seconds ago 1.3MB ``` -   - ## load 用法:**docker load \[OPTIONS\]** @@ -310,7 +260,7 @@ busybox test a79d8ae12403 2 seconds ago 示例: -``` +```sh $ sudo docker load -i busybox.tar Loaded image ID: sha256:e02e811dd08fd49e7f6032625495118e63f597eb150403d02e3238af1df240ba $ sudo docker images @@ -322,7 +272,7 @@ busybox latest e02e811dd08f 2 years ago 用法:**docker login \[OPTIONS\] \[SERVER\]** -功能:登录到一个镜像服务库,没有指定server时,默认登录到https://index.docker.io/v1/ +功能:登录到一个镜像服务库,没有指定server时,默认登录到 选项: @@ -334,7 +284,7 @@ busybox latest e02e811dd08f 2 years ago 示例: -``` +```sh $ sudo docker login ``` @@ -342,13 +292,13 @@ $ sudo docker login 用法:**docker logout \[SERVER\]** -功能:从一个镜像服务器中登出,没有指定server时,默认登出https://index.docker.io/v1/ +功能:从一个镜像服务器中登出,没有指定server时,默认登出 选项:无 示例: -``` +```sh $ sudo docker logout ``` @@ -364,9 +314,9 @@ $ sudo docker logout 示例: -1. 从官方镜像库中拉取nginx镜像 +1. 从官方镜像库中拉取nginx镜像 - ``` + ```sh $ sudo docker pull nginx Using default tag: latest latest: Pulling from official/nginx @@ -379,15 +329,14 @@ $ sudo docker logout 拉取镜像时会检测所依赖的层是否存在,如果存在就用本地的层。 -2. 从私有镜像库中拉取镜像 +2. 从私有镜像库中拉取镜像 从私有镜像库中拉取Fedora镜像,比如所使用的私有镜像库的地址是192.168.1.110:5000: - ``` + ```sh $ sudo docker pull 192.168.1.110:5000/fedora ``` - ## push 用法:**docker push NAME\[:TAG\]** @@ -398,22 +347,21 @@ $ sudo docker logout 示例: -1. 将一个image推送到私有镜像库192.168.1.110:5000中 -2. 将要推送的镜像打标签(docker tag命令将在下文介绍),本例中要推送的镜像为busybox:sshd +1. 将一个image推送到私有镜像库192.168.1.110:5000中 +2. 将要推送的镜像打标签(docker tag命令将在下文介绍),本例中要推送的镜像为busybox:sshd - ``` + ```sh $ sudo docker tag ubuntu:sshd 192.168.1.110:5000/busybox:sshd ``` -3. 将打好标签的镜像推送到私有镜像库中 +3. 将打好标签的镜像推送到私有镜像库中 - ``` + ```sh $ sudo docker push 192.168.1.110:5000/busybox:sshd ``` 推送的时候会自动检测所依赖的层在镜像库中是否已存在,如果以存在,跳过该层。 - ## rmi 用法:**docker rmi \[OPTIONS\] IMAGE \[IMAGE...\]** @@ -428,7 +376,7 @@ $ sudo docker logout 示例: -``` +```sh $ sudo docker rmi 192.168.1.110:5000/busybox:sshd ``` @@ -444,7 +392,7 @@ $ sudo docker rmi 192.168.1.110:5000/busybox:sshd 示例: -``` +```sh $ sudo docker save -o nginx.tar nginx:latest $ ls nginx.tar @@ -466,12 +414,12 @@ nginx.tar 示例: -1. 在官方镜像库中搜寻nginx +1. 在官方镜像库中搜寻nginx - ``` + ```sh $ sudo docker search nginx NAME DESCRIPTION STARS OFFICIAL AUTOMATED - nginx Official build of Nginx. 11873 [OK] + nginx Official build of Nginx. 11873 [OK] jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1645 [OK] richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 739 [OK] linuxserver/nginx An Nginx container, brought to you by LinuxS… 74 @@ -479,15 +427,12 @@ nginx.tar tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 51 [OK] ``` -    +2. 在私有镜像库中搜寻busybox,在私有镜像库中搜寻时要加上私有镜像库的地址 -2. 在私有镜像库中搜寻busybox,在私有镜像库中搜寻时要加上私有镜像库的地址 - - ``` + ```sh $ sudo docker search 192.168.1.110:5000/busybox ``` - ## tag 用法:**docker tag \[OPTIONS\] IMAGE\[:TAG\] \[REGISTRYHOST/\]\[USERNAME/\]NAME\[:TAG\]** @@ -500,6 +445,6 @@ nginx.tar 示例: -``` +```sh $ sudo docker tag busybox:latest busybox:test -``` \ No newline at end of file +``` diff --git "a/docs/zh/docs/Container/\345\256\211\350\243\205\351\205\215\347\275\256-3.md" b/docs/zh/docs/cloud/container_engine/docker_engine/installation_and_configuration_3.md similarity index 92% rename from "docs/zh/docs/Container/\345\256\211\350\243\205\351\205\215\347\275\256-3.md" rename to docs/zh/docs/cloud/container_engine/docker_engine/installation_and_configuration_3.md index 7896499f1..0274ee3f4 100644 --- "a/docs/zh/docs/Container/\345\256\211\350\243\205\351\205\215\347\275\256-3.md" +++ b/docs/zh/docs/cloud/container_engine/docker_engine/installation_and_configuration_3.md @@ -26,13 +26,15 @@ cat /etc/docker/daemon.json 用户需要明白重新指定各种运行目录和文件(包括--graph、--exec-root等),可能会存在目录冲突,或文件属性变换,对应用的正常使用造成影响。 ->![](./public_sys-resources/icon-notice.gif) **须知:** ->用户指定的目录或文件应为docker专用,避免冲突导致的文件属性变化带来安全问题。 +> [!TIP]须知 +> +> 用户指定的目录或文件应为docker专用,避免冲突导致的文件属性变化带来安全问题。 - 以--graph为例,当我们使用/new/path/作为daemon新的Root Dir时,如果/new/path/下已经存在文件,且目录或文件名与docker需要使用的目录或文件名冲突(例如: containers、hooks、tmp等目录)时,docker可能会更新原有目录或文件的属性,包括属主、权限等为自己的属主和权限。 ->![](./public_sys-resources/icon-notice.gif) **须知:** ->从docker-17.05开始,--graph参数被标记为Deprecated,用新的参数--data-root替代。 +> [!TIP]须知 +> +> 从docker-17.05开始,--graph参数被标记为Deprecated,用新的参数--data-root替代。 ### daemon自带网络配置 @@ -46,8 +48,9 @@ cat /etc/docker/daemon.json docker启动容器时的默认umask值为0027,可以在dockerd启动时,使用--exec-opt native.umask=normal参数将容器启动时的umask修改为0022。 ->![](./public_sys-resources/icon-notice.gif) **须知:** ->如果docker create/run也配置了native.umask参数,则以docker create/run中的配置为准。 +> [!TIP]须知 +> +> 如果docker create/run也配置了native.umask参数,则以docker create/run中的配置为准。 详细的配置见[docker create](./容器管理-4.md#create)和[docker run](./容器管理-4.md#run)章节的参数说明。 @@ -117,8 +120,9 @@ docker支持配置audit,但不是强制的。例如: [root@localhost signal]# auditctl -l | grep docker -w /var/lib/docker/ -p rwxa -k docker ``` ->![](./public_sys-resources/icon-note.gif) **说明:** ->-p \[r|w|x|a\] 和-w一起使用,观察用户对这个目录的读、写、执行或者属性变化(如时间戳变化)。这样的话,在/var/lib/docker目录下的任何文件、目录操作,都会打印日志到audit.log中,从而会有太多的日志往audit.log中记录,会严重地影响auditd, 比如内存、cpu占用等,进而影响os的运行。例如:每次执行"ls /var/lib/docker/containers"都会有类似如下日志记录到/var/log/audit/audit.log中。 +> [!NOTE]说明 +> +> -p \[r|w|x|a\] 和-w一起使用,观察用户对这个目录的读、写、执行或者属性变化(如时间戳变化)。这样的话,在/var/lib/docker目录下的任何文件、目录操作,都会打印日志到audit.log中,从而会有太多的日志往audit.log中记录,会严重地影响auditd, 比如内存、cpu占用等,进而影响os的运行。例如:每次执行"ls /var/lib/docker/containers"都会有类似如下日志记录到/var/log/audit/audit.log中。 ```text type=SYSCALL msg=audit(1517656451.457:8097): arch=c000003e syscall=257 success=yes exit=3 a0=ffffffffffffff9c a1=1b955b0 a2=90800 a3=0 items=1 ppid=17821 pid=1925 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts6 ses=4 comm="ls" exe="/usr/bin/ls" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="docker"type=CWD msg=audit(1517656451.457:8097): cwd="/root"type=PATH msg=audit(1517656451.457:8097): item=0 name="/var/lib/docker/containers" inode=1049112 dev=fd:00 mode=040700 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:container_var_lib_t:s0 objtype=NORMAL @@ -252,10 +256,7 @@ docker rm: Error response from daemon: driver "overlay2" failed to remove root f 输出格式为: A on B type C \(D\) - - A:块设备名称或overlay - - B:挂载点 - - C:文件系统类型 - - D:挂载属性 + 其中,A:块设备名称或overlay,B:挂载点,C:文件系统类型,D:挂载属性。 3. 从下往上逐一umount这些挂载点B。 4. 然后全部docker restart这些容器,或者删除所有容器。 @@ -291,7 +292,7 @@ docker rm: Error response from daemon: driver "overlay2" failed to remove root f #### 注意事项 -- 使用devicemapper必须使用devicemapper+direct-lvm的方式,配置的方法可以参考 [https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/\#configure-direct-lvm-mode-for-production](https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/#configure-direct-lvm-mode-for-production) 。 +- 使用devicemapper必须使用devicemapper+direct-lvm的方式 - 配置devicemapper时,如果系统上没有足够的空间给thinpool做自动扩容,请禁止自动扩容功能。 - 禁止把/etc/lvm/profile/docker-thinpool.profile中如下两个值都改成100。 @@ -399,5 +400,6 @@ Error response from daemon: oci runtime error: container with id exists: xxxxxx - 构建缓存,构建缓存信息会在重启后删除。 - containerd保存的元数据,由于启动容器会重建containerd元数据,重启节点会清理containerd中保存的元数据。 - >![](./public_sys-resources/icon-note.gif) **说明:** - >用户若选择采用手动清理恢复环境的方式,可通过配置环境变量“DISABLE\_CRASH\_FILES\_DELETE=true”屏蔽daemon掉电重启时db文件清理功能。 + > [!NOTE]说明 + > + > 用户若选择采用手动清理恢复环境的方式,可通过配置环境变量“DISABLE\_CRASH\_FILES\_DELETE=true”屏蔽daemon掉电重启时db文件清理功能。 diff --git "a/docs/zh/docs/Container/Docker\345\256\271\345\231\250.md" b/docs/zh/docs/cloud/container_engine/docker_engine/overview.md similarity index 91% rename from "docs/zh/docs/Container/Docker\345\256\271\345\231\250.md" rename to docs/zh/docs/cloud/container_engine/docker_engine/overview.md index 07b0b5833..8cdcf173a 100644 --- "a/docs/zh/docs/Container/Docker\345\256\271\345\231\250.md" +++ b/docs/zh/docs/cloud/container_engine/docker_engine/overview.md @@ -2,8 +2,5 @@ Docker是一个开源的Linux容器引擎项目, 用以实现应用的快速打包、部署和交付。Docker的英文本意是码头工人,码头工人的工作就是将商品打包到container\(集装箱\)并且搬运container、装载container。 对应到Linux中,Docker就是将app打包到container,通过container实现app在各种平台上的部署、运行。Docker通过Linux Container技术将app变成一个标准化的、可移植的、自管理的组件,从而实现应用的“一次构建,到处运行”。Docker技术特点就是:应用快速发布、部署简单、管理方便,应用密度更高。 ->![](./public_sys-resources/icon-note.gif) **说明:** +>![NOTE]说明 >Docker容器的安装和使用需要root权限。 - - - diff --git "a/docs/zh/docs/Container/\347\273\237\350\256\241\344\277\241\346\201\257-4.md" b/docs/zh/docs/cloud/container_engine/docker_engine/statistics.md similarity index 100% rename from "docs/zh/docs/Container/\347\273\237\350\256\241\344\277\241\346\201\257-4.md" rename to docs/zh/docs/cloud/container_engine/docker_engine/statistics.md diff --git a/docs/zh/docs/cloud/container_engine/isula_container_engine/_toc.yaml b/docs/zh/docs/cloud/container_engine/isula_container_engine/_toc.yaml new file mode 100644 index 000000000..b3ab90976 --- /dev/null +++ b/docs/zh/docs/cloud/container_engine/isula_container_engine/_toc.yaml @@ -0,0 +1,51 @@ +label: iSula容器引擎 +isManual: true +description: 在iSula是使用C/C++实现的容器引起,具有轻、灵、巧、快的特点 +sections: + +- label: 概述 + href: ./overview.md +- label: 安装、升级与卸载 + href: ./installation_upgrade_uninstallation.md + sections: + - label: 安装与配置 + href: ./installation_configuration.md + - label: 升级 + href: ./upgrade_methods.md + - label: 卸载 + href: ./uninstallation.md +- label: 使用指南 + href: ./application_scenarios.md + sections: + - label: 容器管理 + href: ./container_management.md + - label: 支持CNI网络 + href: ./interconnection_with_the_cni_network.md + - label: 容器资源管理 + href: ./container_resource_management.md + - label: 特权容器 + href: ./privileged_container.md + - label: CRI_v1alpha2接口 + href: ./cri.md + - label: CRI_v1接口 + href: ./cri_2.md + - label: 镜像管理 + href: ./image_management.md + - label: 容器健康状态检查 + href: ./checking_the_container_health_status.md + - label: 查询信息 + href: ./querying_information.md + - label: 安全特性 + href: ./security_features.md + - label: 支持OCI hooks + href: ./supporting_oci_hooks.md + - label: 本地卷管理 + href: ./local_volume_management.md + - label: iSulad shim v2 对接 StratoVirt + href: ./interconnecting_isula_shim_v2_with_stratovirt.md + - label: iSulad支持cgroup v2 + href: ./isulad_support_cgroup_v2.md + - label: iSulad支持CDI + href: ./isulad_support_cdi.md +- label: 附录 + href: ./appendix.md diff --git "a/docs/zh/docs/Container/\351\231\204\345\275\225.md" b/docs/zh/docs/cloud/container_engine/isula_container_engine/appendix.md similarity index 99% rename from "docs/zh/docs/Container/\351\231\204\345\275\225.md" rename to docs/zh/docs/cloud/container_engine/isula_container_engine/appendix.md index d474b7688..86a2268af 100644 --- "a/docs/zh/docs/Container/\351\231\204\345\275\225.md" +++ b/docs/zh/docs/cloud/container_engine/isula_container_engine/appendix.md @@ -1,10 +1,5 @@ # 附录 -- [附录](#附录.md) - - [命令行参数说明](#命令行参数说明) - - [CNI配置参数](#cni配置参数) - - ## 命令行参数说明 **表 1** login命令参数列表 @@ -884,4 +879,3 @@ - diff --git "a/docs/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227.md" b/docs/zh/docs/cloud/container_engine/isula_container_engine/application_scenarios.md similarity index 35% rename from "docs/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227.md" rename to docs/zh/docs/cloud/container_engine/isula_container_engine/application_scenarios.md index 8a9147aa3..93f2b26a3 100644 --- "a/docs/zh/docs/Container/\344\275\277\347\224\250\346\214\207\345\215\227.md" +++ b/docs/zh/docs/cloud/container_engine/isula_container_engine/application_scenarios.md @@ -1,5 +1,6 @@ # 使用指南 本章介绍iSula容器引擎的使用方法。 ->![](./public_sys-resources/icon-note.gif) **说明:** ->iSulad的所有使用操作均需要使用root权限。 + +> !![NOTE]说明 +> iSulad的所有使用操作均需要使用root权限。 diff --git "a/docs/zh/docs/Container/\345\256\271\345\231\250\345\201\245\345\272\267\347\212\266\346\200\201\346\243\200\346\237\245.md" b/docs/zh/docs/cloud/container_engine/isula_container_engine/checking_the_container_health_status.md similarity index 30% rename from "docs/zh/docs/Container/\345\256\271\345\231\250\345\201\245\345\272\267\347\212\266\346\200\201\346\243\200\346\237\245.md" rename to docs/zh/docs/cloud/container_engine/isula_container_engine/checking_the_container_health_status.md index 93c1a4836..c217b43f6 100644 --- "a/docs/zh/docs/Container/\345\256\271\345\231\250\345\201\245\345\272\267\347\212\266\346\200\201\346\243\200\346\237\245.md" +++ b/docs/zh/docs/cloud/container_engine/isula_container_engine/checking_the_container_health_status.md @@ -1,11 +1,5 @@ # 容器健康状态检查 -- [容器健康状态检查](#容器健康状态检查) - - [场景说明](#场景说明) - - [配置方法](#配置方法) - - [检查规则](#检查规则) - - [使用限制](#使用限制) - ## 场景说明 在实际的生产环境中,开发者提供的应用程序或者平台提供的服务难免存在bug,因此,一套管理系统对运行的应用程序进行周期性的健康检查和修复就是不可或缺的。容器健康检查机制便添加了用户定义的对容器进行健康检查的功能。在容器创建时配置\--health-cmd选项,在容器内部周期性地执行命令,通过命令的返回值来监测容器的健康状态。 @@ -14,31 +8,31 @@ 在容器启动时的配置: -``` +```sh isula run -itd --health-cmd "echo iSulad >> /tmp/health_check_file || exit 1" --health-interval 5m --health-timeout 3s --health-exit-on-unhealthy busybox bash ``` 可配置的选项: -- \--health-cmd,必选,在容器内执行的命令。返回值为0表示成功,非0表示失败。 -- \--health-interval,默认 30s,最大为int64上限(纳秒),自定义配置最小值1s,相邻两次命令执行的间隔时间(注:入参0s时视为default)。 -- \--health-timeout,默认 30s,最大为int64上限(纳秒),自定义配置最小值1s,单次检查命令执行的时间上限,超时则任务命令执行失败(注:入参0s时视为default)。 -- \--health-start-period,默认 0s,最大为int64上限(纳秒),自定义配置最小值1s,容器初始化时间。 -- \--health-retries,默认 3,最大为int32上限,健康检查失败最大的重试次数。 -- \--health-exit-on-unhealthy,默认false,检测到容器非健康时是否杀死容器。 +- \--health-cmd,必选,在容器内执行的命令。返回值为0表示成功,非0表示失败。 +- \--health-interval,默认 30s,最大为int64上限(纳秒),自定义配置最小值1s,相邻两次命令执行的间隔时间(注:入参0s时视为default)。 +- \--health-timeout,默认 30s,最大为int64上限(纳秒),自定义配置最小值1s,单次检查命令执行的时间上限,超时则任务命令执行失败(注:入参0s时视为default)。 +- \--health-start-period,默认 0s,最大为int64上限(纳秒),自定义配置最小值1s,容器初始化时间。 +- \--health-retries,默认 3,最大为int32上限,健康检查失败最大的重试次数。 +- \--health-exit-on-unhealthy,默认false,检测到容器非健康时是否杀死容器。 ## 检查规则 -1. 容器启动后,容器状态中显示health:starting。 -2. 经过start-period时间后开始,以interval为间隔周期性在容器中执行CMD。即:当一次命令执行完毕后,经过interval时间,执行下一次命令。 -3. 若CMD命令在timeout限制的时间内执行完毕,并且返回值为0,则视为一次检查成功。否则视为一次检查失败。检查成功后,容器状态变为health:healthy。 -4. 若CMD命令连续retries次检查失败,则容器状态变为health:unhealthy。失败后容器也会继续进行健康检查。 -5. 容器状态为health:unhealthy时,任意一次检查成功会使得容器状态变为health:healthy。 -6. 设置\--exit-on-unhealthy的情况下,如果容器因为非被杀死退出(退出返回值137)后,健康检查只有容器在重新启动后才会继续生效。 -7. CMD执行完毕或超时时,iSulad daemon会将这次检查的起始时间、返回值和标准输出记录到容器的配置文件中。最多记录5条。此外,容器的配置文件中还存储着健康检查的相关参数。 -8. 运行中的容器的健康检查状态也会被写入容器配置中。通过isula inspect可以看到。 +1. 容器启动后,容器状态中显示health:starting。 +2. 经过start-period时间后开始,以interval为间隔周期性在容器中执行CMD。即:当一次命令执行完毕后,经过interval时间,执行下一次命令。 +3. 若CMD命令在timeout限制的时间内执行完毕,并且返回值为0,则视为一次检查成功。否则视为一次检查失败。检查成功后,容器状态变为health:healthy。 +4. 若CMD命令连续retries次检查失败,则容器状态变为health:unhealthy。失败后容器也会继续进行健康检查。 +5. 容器状态为health:unhealthy时,任意一次检查成功会使得容器状态变为health:healthy。 +6. 设置\--exit-on-unhealthy的情况下,如果容器因为非被杀死退出(退出返回值137)后,健康检查只有容器在重新启动后才会继续生效。 +7. CMD执行完毕或超时时,iSulad daemon会将这次检查的起始时间、返回值和标准输出记录到容器的配置文件中。最多记录5条。此外,容器的配置文件中还存储着健康检查的相关参数。 +8. 运行中的容器的健康检查状态也会被写入容器配置中。通过isula inspect可以看到。 -``` +```conf "Health": { "Status": "healthy", "FailingStreak": 0, @@ -61,8 +55,7 @@ isula run -itd --health-cmd "echo iSulad >> /tmp/health_check_file || exit 1" -- ## 使用限制 -- 容器内健康检查的状态信息最多保存5条。会保存最后得到的5条记录。 -- 容器启动时若健康检查相关参数配置为0,则按照缺省值处理。 -- 带有健康检查配置的容器启动后,若iSulad daemon退出,则健康检查不会执行。iSulad daemon再次启动后,正在运行且带有健康检查配置的容器其健康状态会变为starting。之后检查规则同上。 -- 如果健康检查从第一次开始便一直失败,其状态保持与之前一致(starting),直到达到指定失败次数(--health-retries)后变为unhealthy,或者检查成功后变为healthy。 - +- 容器内健康检查的状态信息最多保存5条。会保存最后得到的5条记录。 +- 容器启动时若健康检查相关参数配置为0,则按照缺省值处理。 +- 带有健康检查配置的容器启动后,若iSulad daemon退出,则健康检查不会执行。iSulad daemon再次启动后,正在运行且带有健康检查配置的容器其健康状态会变为starting。之后检查规则同上。 +- 如果健康检查从第一次开始便一直失败,其状态保持与之前一致(starting),直到达到指定失败次数(--health-retries)后变为unhealthy,或者检查成功后变为healthy。 diff --git "a/docs/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206.md" b/docs/zh/docs/cloud/container_engine/isula_container_engine/container_management.md similarity index 95% rename from "docs/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206.md" rename to docs/zh/docs/cloud/container_engine/isula_container_engine/container_management.md index 9b9bee3a0..3101c3a63 100644 --- "a/docs/zh/docs/Container/\345\256\271\345\231\250\347\256\241\347\220\206.md" +++ b/docs/zh/docs/cloud/container_engine/isula_container_engine/container_management.md @@ -1,27 +1,4 @@ # 容器管理 - -- [容器管理](#容器管理) - - [创建容器](#创建容器) - - [启动容器](#启动容器) - - [运行容器](#运行容器) - - [停止容器](#停止容器) - - [强制停止容器](#强制停止容器) - - [删除容器](#删除容器) - - [接入容器](#接入容器) - - [重命名容器](#重命名容器) - - [在容器中执行新命令](#在容器中执行新命令) - - [查询单个容器信息](#查询单个容器信息) - - [查询所有容器信息](#查询所有容器信息) - - [重启容器](#重启容器) - - [等待容器退出](#等待容器退出) - - [查看容器中进程信息](#查看容器中进程信息) - - [查看容器使用的资源](#查看容器使用的资源) - - [获取容器日志](#获取容器日志) - - [容器与主机之间数据拷贝](#容器与主机之间数据拷贝) - - [暂停容器](#暂停容器) - - [恢复容器](#恢复容器) - - [从服务端实时获取事件消息](#从服务端实时获取事件消息) - ## 创建容器 @@ -31,7 +8,7 @@ isula create 命令用于创建一个新的容器。容器引擎会使用指定 ### 用法 -``` +```sh isula create [OPTIONS] IMAGE [COMMAND] [ARG...] ``` @@ -481,9 +458,9 @@ create命令支持参数参考下表。 ### 约束限制 -- 使用--user或--group-add参数,在容器启动阶段校验user或group时,容器如果使用的是OCI镜像,是从镜像的真实rootfs的etc/passwd和etc/group文件中校验,如果使用的是rootfs文件夹或块设备作为容器的rootfs,则校验的是host中的etc/passwd和etc/group文件;查找时使用的rootfs会忽略-v 和--mount等挂载参数,意味着使用这些参数尝试覆盖etc/passwd和etc/group两个文件时,在查找阶段不生效,只在容器真正启动时生效。生成的配置保存在"iSulad根目录/engine/容器ID/start\_generate\_config.json",文件格式如下: +- 使用--user或--group-add参数,在容器启动阶段校验user或group时,容器如果使用的是OCI镜像,是从镜像的真实rootfs的etc/passwd和etc/group文件中校验,如果使用的是rootfs文件夹或块设备作为容器的rootfs,则校验的是host中的etc/passwd和etc/group文件;查找时使用的rootfs会忽略-v 和--mount等挂载参数,意味着使用这些参数尝试覆盖etc/passwd和etc/group两个文件时,在查找阶段不生效,只在容器真正启动时生效。生成的配置保存在"iSulad根目录/engine/容器ID/start\_generate\_config.json",文件格式如下: - ``` + ```conf { "uid": 0, "gid": 8, @@ -494,12 +471,11 @@ create命令支持参数参考下表。 } ``` - ### 示例 创建一个新容器 -``` +```sh # isula create busybox fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 # isula ps -a @@ -515,7 +491,7 @@ isula start命令用于启动一个或多个容器。 ### 用法 -``` +```sh isula start [OPTIONS] CONTAINER [CONTAINER...] ``` @@ -562,7 +538,7 @@ start命令支持参数参考下表。 启动一个新容器 -``` +```sh # isula start fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 ``` @@ -574,7 +550,7 @@ isula run命令命令用于创建一个新的容器。会使用指定的容器 ### 用法 -``` +```sh isula run [OPTIONS] ROOTFS|IMAGE [COMMAND] [ARG...] ``` @@ -1033,16 +1009,16 @@ run命令支持参数参考下表。 ### 约束限制 -- 容器父进程进程退出时,则对应的容器也自动退出。 -- 创建普通容器时父进程不能为init,因为普通容器的权限不够,导致容器可以创建成功,但是attach进去的时候会卡住。 -- 运行容器时,不指定--net,默认hostname为**localhost**。 -- 使用--files-limit参数传入一个很小的值,如1时,启动容器时,iSulad创建cgroup子组后先设置files.limit值,再将容器进程的PID写入该子组的cgroup.procs文件,此时容器进程已经打开超过1个句柄,因而写入报错导致启动失败启动容器会失败。 -- --mount参数和--volume参数同时存在时,如果目的路径有冲突,则--mount会在--volume之后挂载\(即将--volume中的挂载点覆盖掉\)。 +- 容器父进程进程退出时,则对应的容器也自动退出。 +- 创建普通容器时父进程不能为init,因为普通容器的权限不够,导致容器可以创建成功,但是attach进去的时候会卡住。 +- 运行容器时,不指定--net,默认hostname为**localhost**。 +- 使用--files-limit参数传入一个很小的值,如1时,启动容器时,iSulad创建cgroup子组后先设置files.limit值,再将容器进程的PID写入该子组的cgroup.procs文件,此时容器进程已经打开超过1个句柄,因而写入报错导致启动失败启动容器会失败。 +- --mount参数和--volume参数同时存在时,如果目的路径有冲突,则--mount会在--volume之后挂载\(即将--volume中的挂载点覆盖掉\)。 备注:轻量级容器的参数中type支持bind或squashfs,当type=squashfs时,src是镜像的路径;原生docker的参数type支持bind、volume、tmpfs。 -- restart重启策略不支持unless-stopped。 -- 以下三种情况与docker 返回值不一致,docker返回127,轻量级容器返回125 +- restart重启策略不支持unless-stopped。 +- 以下三种情况与docker 返回值不一致,docker返回127,轻量级容器返回125 --device参数指定主机设备为不存在的设备 @@ -1050,11 +1026,11 @@ run命令支持参数参考下表。 --entrypoint 参数指定不存在的入口参数 -- 使用--volume参数时,由于容器启动时会对/dev/ptmx设备进行删除重建,因此请勿将/dev目录挂载至容器/dev目录,应使用--device对/dev下的设备在容器中进行挂载 -- 使用-it参数时,由于容器启动时会对/dev/ptmx设备进行删除重建,因此请勿将/dev目录挂载至容器/dev目录,应使用--device对/dev下的设备再容器中进行挂载。 -- 禁止使用echo的方式向run命令的stdin输入数据,会导致客户端卡死。应该直接将echo的值作为命令行参数传给容器 +- 使用--volume参数时,由于容器启动时会对/dev/ptmx设备进行删除重建,因此请勿将/dev目录挂载至容器/dev目录,应使用--device对/dev下的设备在容器中进行挂载 +- 使用-it参数时,由于容器启动时会对/dev/ptmx设备进行删除重建,因此请勿将/dev目录挂载至容器/dev目录,应使用--device对/dev下的设备再容器中进行挂载。 +- 禁止使用echo的方式向run命令的stdin输入数据,会导致客户端卡死。应该直接将echo的值作为命令行参数传给容器 - ``` + ```sh # echo ls | isula run -i busybox /bin/sh @@ -1066,7 +1042,7 @@ run命令支持参数参考下表。 正确的执行方式为: - ``` + ```sh # isula run -i busybox ls bin dev @@ -1081,7 +1057,7 @@ run命令支持参数参考下表。 # ``` -- 使用host的根目录(/)作为容器的文件系统,那么在挂载路径时,如果有如下情况 +- 使用host的根目录(/)作为容器的文件系统,那么在挂载路径时,如果有如下情况 **表 2** 挂载情况 @@ -1105,33 +1081,28 @@ run命令支持参数参考下表。 - >![](./public_sys-resources/icon-notice.gif) **须知:** + >![WARNING]注意 >第一种情况,先挂载/home/test1,然后挂载/home/test2,这种情况会导致/home/test1的内容覆盖掉原来/mnt下面的内容,这样可能导致/mnt下面不存在abc目录,这样会导致挂载/home/test2到/mnt/abc失败。 >第二种情况,先挂载/home/test2,然后挂载/home/test1。这种情况,第二次的挂载会把/mnt的内容替换为/home/test1的内容,这样第一次挂载的/home/test2到/mnt/abc的内容就看不到了。 >因此,不支持第一种使用方式;第二种使用用户需要了解这种数据无法访问的风险 -- 请谨慎配置/sys和/proc目录可写。 -/sys和/proc目录包含了linux维护内核参数、设备管理的接口,容器中配置该目录可写可能会导致容器逃逸。 -- 请谨慎配置容器与host共享namespace。 -比如—pid,--ipc, --uts,--net配置该参数为容器和host共享namespace空间,容器和host的namespace隔离没有了,在容器中可对host进行攻击。比如,使用—pid 和host共享pid namespace,容器中可以看到host上的进程pid号,可以随意杀死host的进程。 -- 请谨慎配置使用--device、-v 等可以挂载主机资源的参数,请勿将host的敏感目录或者设备,映射到容器中,以防止敏感信息泄漏。 -- 请谨慎使用--privileged选项启动容器,--privileged选项会导致容器权限过大,影响宿主机配置。 - - >![](./public_sys-resources/icon-notice.gif) **须知:** - >- 高并发场景(并发启动200容器)下,glibc的内存管理机制会导致内存空洞以及虚拟内存较大(例如10GB)的问题。该问题是高并发场景下glibc内存管理机制的限制,而不是内存泄露,不会导致内存消耗无限增大。可以通过设置MALLOC\_ARENA\_MAX环境变量来减少虚拟内存的问题,而且可以增大减少物理内存的概率。但是这个环境变量会导致iSulad的并发性能下降,需要用户根据实际情况做配置。 - > ``` - > 参考实践情况,平衡性能和内存,可以设置MALLOC_ARENA_MAX为4。(在arm64服务器上面对iSulad的性能影响在10%以内) - > 配置方法: - > 1. 手动启动iSulad的场景,可以直接export MALLOC_ARENA_MAX=4,然后再启动iSulad即可。 - > 2. systemd管理iSulad的场景,可以修改/etc/sysconfig/iSulad,增加一条MALLOC_ARENA_MAX=4即可。 - > ``` +- 请谨慎配置/sys和/proc目录可写。/sys和/proc目录包含了linux维护内核参数、设备管理的接口,容器中配置该目录可写可能会导致容器逃逸。 +- 请谨慎配置容器与host共享namespace。比如—pid,--ipc, --uts,--net配置该参数为容器和host共享namespace空间,容器和host的namespace隔离没有了,在容器中可对host进行攻击。比如,使用—pid 和host共享pid namespace,容器中可以看到host上的进程pid号,可以随意杀死host的进程。 +- 请谨慎配置使用--device、-v 等可以挂载主机资源的参数,请勿将host的敏感目录或者设备,映射到容器中,以防止敏感信息泄漏。 +- 请谨慎使用--privileged选项启动容器,--privileged选项会导致容器权限过大,影响宿主机配置。 + >![WARNING]注意 + >- 高并发场景(并发启动200容器)下,glibc的内存管理机制会导致内存空洞以及虚拟内存较大(例如10GB)的问题。该问题是高并发场景下glibc内存管理机制的限制,而不是内存泄露,不会导致内存消耗无限增大。可以通过设置MALLOC\_ARENA\_MAX环境变量来减少虚拟内存的问题,而且可以增大减少物理内存的概率。但是这个环境变量会导致iSulad的并发性能下降,需要用户根据实际情况做配置。 + > 参考实践情况,平衡性能和内存,可以设置MALLOC_ARENA_MAX为4。(在arm64服务器上面对iSulad的性能影响在10%以内) + > 配置方法: + > 1. 手动启动iSulad的场景,可以直接export MALLOC_ARENA_MAX=4,然后再启动iSulad即可。 + > 2. systemd管理iSulad的场景,可以修改/etc/sysconfig/iSulad,增加一条MALLOC_ARENA_MAX=4即可。 ### 示例 运行一个新容器 -``` +```sh # isula run -itd busybox 9c2c13b6c35f132f49fb7ffad24f9e673a07b7fe9918f97c0591f0d7014c713b ``` @@ -1144,7 +1115,7 @@ isula stop命令用于停止一个或多个运行中的容器。首先向容器 ### 用法 -``` +```sh isula stop [OPTIONS] CONTAINER [CONTAINER...] ``` @@ -1194,12 +1165,11 @@ stop命令支持参数参考下表。 ### 约束限制 -- 指定t参数且t<0时,请确保自己容器的应用会处理stop信号。 +- 指定t参数且t<0时,请确保自己容器的应用会处理stop信号。 Stop的原理:Stop会首先给容器发送Stop 信号(SIGTERM),然后等待一定的时间(这个时间就是用户输入的 t),过了指定时间如果容器还仍处于运行状态,那么就发送kill信号(SIGKILL)使容器强制退出。 - -- 输入参数t的含义: +- 输入参数t的含义: t<0 : 表示一直等待,不管多久都等待程序优雅退出,既然用户这么输入了,表示对自己的应用比较放心,认为自己的程序有 合理的stop信号的处理机制。 @@ -1209,12 +1179,11 @@ stop命令支持参数参考下表。 所以如果用户使用t<0 (比如t=-1),请确保自己容器的应用会正确处理SIGTERM. 如果容器忽略了该信号,会导致isula stop一直卡住。 - ### 示例 停止一个容器 -``` +```sh # isula stop fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 ``` @@ -1227,7 +1196,7 @@ isula kill命令用于强制停止一个或多个运行中的容器。 ### 用法 -``` +```sh isula kill [OPTIONS] CONTAINER [CONTAINER...] ``` @@ -1274,7 +1243,7 @@ kill命令支持参数参考下表。 杀掉一个容器 -``` +```sh # isula kill fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 ``` @@ -1287,7 +1256,7 @@ isula rm命令用于删除一个或多个容器。 ### 用法 -``` +```sh isula rm [OPTIONS] CONTAINER [CONTAINER...] ``` @@ -1337,13 +1306,13 @@ rm命令支持参数参考下表。 ### 约束限制 -- 在IO正常情况,空环境(只有1个容器)删除一个running容器的时间为T1,200个容器的环境(容器无大量IO操作,host IO正常)删除一个running容器所需时间为T2。T2的规格为:T2 = max \{ T1 \* 3, 5 \} 秒钟。 +- 在IO正常情况,空环境(只有1个容器)删除一个running容器的时间为T1,200个容器的环境(容器无大量IO操作,host IO正常)删除一个running容器所需时间为T2。T2的规格为:T2 = max \{ T1 \* 3, 5 \} 秒钟。 ### 示例 删除一个停止状态的容器 -``` +```sh # isula rm fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 ``` @@ -1356,7 +1325,7 @@ isula attach命令用于将当前终端的标准输入、标准输出和标准 ### 用法 -``` +```sh isula attach [OPTIONS] CONTAINER ``` @@ -1397,13 +1366,13 @@ attach命令支持参数参考下表。 ### 约束限制 -- 原生docker attach容器会直接进入容器,而isulad attach容器后需要敲一个回车才进入。 +- 原生docker attach容器会直接进入容器,而isulad attach容器后需要敲一个回车才进入。 ### 示例 接入一个运行状态的容器 -``` +```sh # isula attach fd7376591a9c3d8ee9a14f5d2c2e5255b02cc44cddaabca82170efd4497510e1 / # / # @@ -1417,7 +1386,7 @@ isula rename命令用于重命名容器。 ### 用法 -``` +```sh isula rename [OPTIONS] OLD_NAME NEW_NAME ``` @@ -1460,7 +1429,7 @@ rename命令支持参数参考下表。 重命名一个容器 -``` +```sh # isula rename my_container my_new_container ``` @@ -1472,7 +1441,7 @@ isula exec命令用于正在运行的容器中运行一个新命令。新执行 ### 用法 -``` +```sh isula exec [OPTIONS] CONTAINER COMMAND [ARG...] ``` @@ -1543,32 +1512,32 @@ exec命令支持参数参考下表。 ### 约束限制 -- isula exec 不指定任何参数时,会默认使用-it参数, 表示分配一个伪终端,以交互式的方式进入容器 -- 当使用isula exec 执行脚本,在脚本中执行后台进程时,需使用nohup标志忽略SIGHUP信号。 +- isula exec 不指定任何参数时,会默认使用-it参数, 表示分配一个伪终端,以交互式的方式进入容器 +- 当使用isula exec 执行脚本,在脚本中执行后台进程时,需使用nohup标志忽略SIGHUP信号。 使用isula exec运行脚本,在脚本中运行后台进程需使用nohup标志。否则内核会在exec执行的进程(session首进程)退出时,向后台执行的进程发送SIGHUP信号,导致后台进程退出,出现僵尸进程。 -- isula exec 进入容器进程后,不能执行后台程序,否则会出现卡死现象。 +- isula exec 进入容器进程后,不能执行后台程序,否则会出现卡死现象。 isula exec执行后台进程的方式如下: - 1. 使用isula exec进入容器终端,isula exec container\_name bash - 2. 进入容器后,执行 script & - 3. 执行exit,导致终端卡死 + 1. 使用isula exec进入容器终端,isula exec container\_name bash + 2. 进入容器后,执行 script & + 3. 执行exit,导致终端卡死 - ``` + ```markdown isula exec 进入容器后,执行后台程序卡住的原因为isula exec进入容器运行后台while1程序,当bash退出时,while1程序并不会退出,变为孤儿进程由1号 进程接管,while1程序是由容器的初始bash进程fork &exec执行的,while1进程复制了bash进程的文件句柄,导致bash退出时,句柄并未完全关闭,导致 console进程收不到句柄关闭事件,epoll_wait卡住,进程不退出。 ``` -- isula exec 不能用后台方式执行,否则可能会出现卡死现象。 +- isula exec 不能用后台方式执行,否则可能会出现卡死现象。 isula exec后台执行的方式如下: - 使用**isula exec 脚本 & **的方式后台执行exec,如:isula exec container\_name script & ,isula exec 后台执行,执行的脚本中不断cat某一文件,正常时在当前终端有输出,如果在当前终端执行回车操作,客户端会因读IO失败而退出读stdout的动作,使终端不再输出,服务端由于进程仍然在cat文件,会继续往fifo的buffer里写入数据,当缓存写满时,容器内进程会卡死在write动作上。 + 使用**isula exec 脚本 &**的方式后台执行exec,如:isula exec container\_name script & ,isula exec 后台执行,执行的脚本中不断cat某一文件,正常时在当前终端有输出,如果在当前终端执行回车操作,客户端会因读IO失败而退出读stdout的动作,使终端不再输出,服务端由于进程仍然在cat文件,会继续往fifo的buffer里写入数据,当缓存写满时,容器内进程会卡死在write动作上。 -- 轻量级容器使用exec执行带有管道操作的命令时,建议使用/bin/bash -c 方式执行该命令。 +- 轻量级容器使用exec执行带有管道操作的命令时,建议使用/bin/bash -c 方式执行该命令。 典型应用场景: @@ -1576,7 +1545,7 @@ exec命令支持参数参考下表。 原因:使用exec 执行ls /test,输出带有换行,针对该输出进行“| grep "xx" | wc -l“,处理结果为2(两行) - ``` + ```sh # isula exec -it container ls /test xx xx10 xx12 xx14 xx3 xx5 xx7 xx9 xx1 xx11 xx13 xx2 xx4 xx6 xx8 @@ -1585,15 +1554,15 @@ exec命令支持参数参考下表。 建议处理方式:使用run/exec执行带有管道操作的命令时,使用/bin/bash -c 执行命令,在容器中执行管道操作。 - ``` + ```sh # isula exec -it container /bin/sh -c "ls /test | grep "xx" | wc -l" 15 # ``` -- 禁止使用echo的方式向exec命令的stdin输入数据,会导致客户端卡死。应该直接将echo的值作为命令行参数传给容器 +- 禁止使用echo的方式向exec命令的stdin输入数据,会导致客户端卡死。应该直接将echo的值作为命令行参数传给容器 - ``` + ```sh # echo ls | isula exec 38 /bin/sh @@ -1605,17 +1574,16 @@ exec命令支持参数参考下表。 正确的执行方式为: - ``` + ```sh # isula exec 38 ls bin dev etc home proc root sys tmp usr var ``` - ### 示例 在运行中的容器中,执行echo命令 -``` +```sh # isula exec c75284634bee echo "hello,world" hello,world ``` @@ -1628,7 +1596,7 @@ isula inspect提供了容器的详细信息。 ### 用法 -``` +```sh isula inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...] ``` @@ -1677,12 +1645,11 @@ inspect命令支持参数参考下表。 - ### 示例 查询容器信息 -``` +```sh # isula inspect -f '{{.State.Status} {{.State.Running}}}' c75284634bee running true @@ -1823,7 +1790,7 @@ isula ps 用于查询所有容器的信息。 ### 用法 -``` +```sh isula ps [OPTIONS] ``` @@ -1894,7 +1861,7 @@ ps命令支持参数参考下表。 查询所有容器信息 -``` +```sh # isula ps -a ID IMAGE STATUS PID COMMAND EXIT_CODE RESTART_COUNT STARTAT FINISHAT RUNTIME NAMES @@ -1913,7 +1880,7 @@ isula restart 用于重启一个或者多个容器。 ### 用法 -``` +```sh isula restart [OPTIONS] CONTAINER [CONTAINER...] ``` @@ -1958,11 +1925,11 @@ restart命令支持参数参考下表。 ### 约束限制 -- 指定t参数且t<0时,请确保自己容器的应用会处理stop信号。 +- 指定t参数且t<0时,请确保自己容器的应用会处理stop信号。 restart会首先调用stop停止容器。stop会首先给容器发送stop信号(SIGTERM),然后等待一定的时间(这个时间就是用户输入的 t),过了一定时间如果容器仍处于运行状态,那么就发送kill信号(SIGKILL)使容器强制退出。 -- 输入参数t的含义: +- 输入参数t的含义: t<0 : 表示一直等待,不管多久都等待程序优雅退出,既然用户这么输入了,表示对自己的应用比较放心,认为自己的程序有合理的stop信号的处理机制。 @@ -1972,12 +1939,11 @@ restart命令支持参数参考下表。 所以如果用户使用t<0(比如t=-1),请确保自己容器的应用会正确处理SIGTERM. 如果容器忽略了该信号,会导致isula restart一直卡住。 - ### 示例 重启单个容器 -``` +```sh # isula restart c75284634beeede3ab86c828790b439d16b6ed8a537550456b1f94eb852c1c0a c75284634beeede3ab86c828790b439d16b6ed8a537550456b1f94eb852c1c0a ``` @@ -1990,7 +1956,7 @@ isula wait用于等待一个或者多个容器退出。仅支持runtime类型为 ### 用法 -``` +```sh isula wait [OPTIONS] CONTAINER [CONTAINER...] ``` @@ -2032,7 +1998,7 @@ wait命令支持参数参考下表。 等待单个容器退出 -``` +```sh # isula wait c75284634beeede3ab86c828790b439d16b6ed8a537550456b1f94eb852c1c0a 137 ``` @@ -2045,7 +2011,7 @@ isula top用于查看容器中的进程信息。 ### 用法 -``` +```sh isula top [OPTIONS] container [ps options] ``` @@ -2088,7 +2054,7 @@ top命令支持参数参考下表。 查询容器中进程信息 -``` +```sh # isula top 21fac8bb9ea8e0be4313c8acea765c8b4798b7d06e043bbab99fc20efa72629c UID PID PPID C STIME TTY TIME CMD root 22166 22163 0 23:04 pts/1 00:00:00 sh @@ -2102,7 +2068,7 @@ isula stats用于实时显示资源使用的统计信息。 ### 用法 -``` +```sh isula stats [OPTIONS] [CONTAINER...] ``` @@ -2161,7 +2127,7 @@ stats命令支持参数参考下表。 显示资源使用的统计信息 -``` +```sh # isula stats --no-stream 21fac8bb9ea8e0be4313c8acea765c8b4798b7d06e043bbab99fc20efa72629c CONTAINER CPU % MEM USAGE / LIMIT MEM % BLOCK I / O PIDS 21fac8bb9ea8 0.00 56.00 KiB / 7.45 GiB 0.00 0.00 B / 0.00 B 1 ``` @@ -2174,7 +2140,7 @@ isula logs用于获取容器的日志。 ### 用法 -``` +```sh isula logs [OPTIONS] [CONTAINER...] ``` @@ -2230,13 +2196,13 @@ logs命令支持参数参考下表。 ### 约束限制 -- 容器串口logs日志记录功能,默认为开启状态,需要关闭可以通过 isula create --log-opt disable-log=true 或 isula run --log-opt disable-log=true 关闭。 +- 容器串口logs日志记录功能,默认为开启状态,需要关闭可以通过 isula create --log-opt disable-log=true 或 isula run --log-opt disable-log=true 关闭。 ### 示例 获取容器日志 -``` +```sh # isula logs 6a144695f5dae81e22700a8a78fac28b19f8bf40e8827568b3329c7d4f742406 hello, world hello, world @@ -2251,7 +2217,7 @@ isula cp 用于容器与主机之间的数据拷贝,仅支持runtime类型为l ### 用法 -``` +```sh isula cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH isula cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH ``` @@ -2292,17 +2258,17 @@ cp命令支持参数参考下表。 ### 约束限制 -- iSulad在执行拷贝时,不会挂载/etc/hostname, /etc/resolv.conf,/etc/hosts三个文件,也不会对--volume和--mount参数传入的参数挂载到host,所以对这些文件的拷贝使用的是镜像中的原始文件,而不是真实容器中的文件。 +- iSulad在执行拷贝时,不会挂载/etc/hostname, /etc/resolv.conf,/etc/hosts三个文件,也不会对--volume和--mount参数传入的参数挂载到host,所以对这些文件的拷贝使用的是镜像中的原始文件,而不是真实容器中的文件。 - ``` + ```sh # isula cp b330e9be717a:/etc/hostname /tmp/hostname # cat /tmp/hostname # ``` -- iSulad在解压文件时,不会对文件系统中即将被覆盖的文件或文件夹做类型判断,而是直接覆盖,所以在拷贝时,如果源为文件夹,同名的文件会被强制覆盖为文件夹;如果源为文件,同名的文件夹会被强制覆盖为文件。 +- iSulad在解压文件时,不会对文件系统中即将被覆盖的文件或文件夹做类型判断,而是直接覆盖,所以在拷贝时,如果源为文件夹,同名的文件会被强制覆盖为文件夹;如果源为文件,同名的文件夹会被强制覆盖为文件。 - ``` + ```sh # rm -rf /tmp/test_file_to_dir && mkdir /tmp/test_file_to_dir # isula exec b330e9be717a /bin/sh -c "rm -rf /tmp/test_file_to_dir && touch /tmp/test_file_to_dir" # isula cp b330e9be717a:/tmp/test_file_to_dir /tmp @@ -2310,20 +2276,19 @@ cp命令支持参数参考下表。 -rw-r----- 1 root root 0 Apr 26 09:59 test_file_to_dir ``` - -- cp命令仅供维护定位时使用,应避免在生产环境上线使用cp命令。 +- cp命令仅供维护定位时使用,应避免在生产环境上线使用cp命令。 ### 示例 将主机/test/host目录拷贝到容器21fac8bb9ea8的/test目录下。 -``` +```sh isula cp /test/host 21fac8bb9ea8:/test ``` 将容器21fac8bb9ea8的/www目录拷贝到主机的/tmp目录中。 -``` +```sh isula cp 21fac8bb9ea8:/www /tmp/ ``` @@ -2335,7 +2300,7 @@ isula pause用于暂停一个或者多个容器中的所有进程。 ### 用法 -``` +```sh isula pause [OPTIONS] CONTAINER [CONTAINER...] ``` @@ -2371,15 +2336,15 @@ isula pause [OPTIONS] CONTAINER [CONTAINER...] ### 约束限制 -- 只有状态为running的容器可以被执行pause操作 -- 当容器被pause后,无法执行其他生命周期管理操作(如restart/exec/attach/kill/stop/rm等) -- 当带有健康检查配置的容器被pause后,容器状态最终变为unhealthy状态 +- 只有状态为running的容器可以被执行pause操作 +- 当容器被pause后,无法执行其他生命周期管理操作(如restart/exec/attach/kill/stop/rm等) +- 当带有健康检查配置的容器被pause后,容器状态最终变为unhealthy状态 ### 示例 暂停一个正在运行的容器,命令示例如下: -``` +```sh # isula pause 8fe25506fb5883b74c2457f453a960d1ae27a24ee45cdd78fb7426d2022a8bac 8fe25506fb5883b74c2457f453a960d1ae27a24ee45cdd78fb7426d2022a8bac ``` @@ -2392,7 +2357,7 @@ isula unpause用于恢复一个或者多个容器中的所有进程, 为isula pa ### 用法 -``` +```sh isula unpause [OPTIONS] CONTAINER [CONTAINER...] ``` @@ -2428,13 +2393,13 @@ isula unpause [OPTIONS] CONTAINER [CONTAINER...] ### 约束限制 -- 只有状态为paused的容器可以被执行unpause操作 +- 只有状态为paused的容器可以被执行unpause操作 ### 示例 恢复一个被暂停的容器,命令示例如下: -``` +```sh # isula unpause 8fe25506fb5883b74c2457f453a960d1ae27a24ee45cdd78fb7426d2022a8bac 8fe25506fb5883b74c2457f453a960d1ae27a24ee45cdd78fb7426d2022a8bac ``` @@ -2447,7 +2412,7 @@ isula events用于从服务端获取实时事件。 ### 用法 -``` +```sh isula events [OPTIONS] ``` @@ -2497,14 +2462,14 @@ isula events [OPTIONS] ### 约束限制 -- 支持容器相关事件为:create、start、restart、stop、exec_create、exec_die、attach、kill、top、rename、archive-path、extract-to-dir、update、pause、unpause、export、resize。 -- 支持镜像相关事件为:load、remove、pull、login、logout。 + +- 支持容器相关事件为:create、start、restart、stop、exec_create、exec_die、attach、kill、top、rename、archive-path、extract-to-dir、update、pause、unpause、export、resize。 +- 支持镜像相关事件为:load、remove、pull、login、logout。 ### 示例 从服务端实时获取事件消息,命令示例如下: -``` +```sh # isula events ``` - diff --git "a/docs/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\347\256\241\347\220\206.md" b/docs/zh/docs/cloud/container_engine/isula_container_engine/container_resource_management.md similarity index 95% rename from "docs/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\347\256\241\347\220\206.md" rename to docs/zh/docs/cloud/container_engine/isula_container_engine/container_resource_management.md index d62a945e4..a86c40a33 100644 --- "a/docs/zh/docs/Container/\345\256\271\345\231\250\350\265\204\346\272\220\347\256\241\347\220\206.md" +++ b/docs/zh/docs/cloud/container_engine/isula_container_engine/container_resource_management.md @@ -1,18 +1,5 @@ # 容器资源管理 - -- [容器资源管理](#容器资源管理) - - [描述](#描述) - - [资源共享](#资源共享) - - [限制运行时的CPU资源](#限制运行时的CPU资源) - - [限制运行时的内存](#限制运行时的内存) - - [限制运行时的IO资源](#限制运行时的io资源) - - [限制容器rootfs存储空间](#限制容器rootfs存储空间) - - [限制容器内文件句柄数](#限制容器内文件句柄数) - - [限制容器内可以创建的进程/线程数](#限制容器内可以创建的进程-线程数) - - [配置容器内的ulimit值](#配置容器内的ulimit值) - - ## 描述 可以通过namespace和cgroup等功能实现对容器的资源管理。isula支持使用cgroup v1和cgroup v2实现对资源的限制,其中 @@ -26,7 +13,7 @@ cgroup v2来进行资源管理。无论是cgroup v1还是使用cgroup v2对容 容器间或者容器与host之间可以共享namespace信息,包括pid, net, ipc, uts。 ->![](./public_sys-resources/icon-note.gif) **说明:** +>![NOTE]说明 >当使用与主机共享namespace信息时,即缺少了对应的namespace隔离机制,在容器中可以查询、操作主机上的信息,存在安全 隐患。比如使用--pid=host共享主机pid namespace时,即可以看到主机上其他进程信息,造成信息泄露,甚至直接kill杀死主机 进程。请在确保安全的场景下,谨慎使用共享主机host namespace功能。 @@ -93,7 +80,7 @@ create/run时可以指定下列参数。 如果两个容器需要共享同一个pid namespace,在运行容器时,直接加上--pid container: 即可,如: -``` +```sh isula run -tid --name test_pid busybox sh isula run -tid --name test --pid container:test_pid busybox sh ``` @@ -193,11 +180,11 @@ create/run时可以指定下列参数。 如果需要限制容器只是用特定的cpu,在运行容器时,直接加上--cpuset-cpus number 即可,如: -``` +```sh isula run -tid --cpuset-cpus 0,2-3 busybox sh ``` ->![](./public_sys-resources/icon-note.gif) **说明:** +>![NOTE]说明 >是否设置成功,请参见“查询单个容器信息”章节。 ## 限制运行时的内存 @@ -268,7 +255,7 @@ create/run时可以指定下列参数。 如果需要限制容器内内存的上限,在运行容器时,直接加上--memory \[\]即可,如: -``` +```sh isula run -tid --memory 1G busybox sh ``` @@ -313,13 +300,13 @@ create/run时指定--device-read/write-bps参数。 如果需要限制容器内设备的读写速度,在运行容器时,直接加上--device-write-bps/--device-read-bps :\[\]即可,例如,限制容器busybox内设备/dev/sda的读速度为 1MB 每秒,则命令如下: -``` +```sh isula run -tid --device-write /dev/sda:1mb busybox sh ``` 限制写速度的命令如下: -``` +```sh isula run -tid read-bps /dev/sda:1mb busybox sh ``` @@ -333,32 +320,30 @@ isula run -tid read-bps /dev/sda:1mb busybox sh ### 用法 -1. 环境准备 +1. 环境准备 文件系统支持Project ID和Project Quota属性,4.19版本内核已经支持,外围包e2fsprogs版本不低于1.43.4-2。 -2. 在容器挂载overlayfs之前,需要对不同容器的upper目录和work目录设置不同的project id,同时设置继承选项,在容器挂载overlayfs之后不允许再修改project id和继承属性。 -3. 配额的设置需要在容器外以特权用户进行。 -4. daemon中增加如下配置 +2. 在容器挂载overlayfs之前,需要对不同容器的upper目录和work目录设置不同的project id,同时设置继承选项,在容器挂载overlayfs之后不允许再修改project id和继承属性。 +3. 配额的设置需要在容器外以特权用户进行。 +4. daemon中增加如下配置 - ``` + ```sh -s overlay2 --storage-opt overlay2.override_kernel_check=true ``` -5. daemon支持以下选项,用于为容器设置默认的限制, +5. daemon支持以下选项,用于为容器设置默认的限制, --storage-opt overlay2.basesize=128M 指定默认限制的大小,若isula run时也指定 了--storage-opt size选项,则以run时指定来生效,若daemon跟isula run时都不指定大小,则表示不限制。 -6. 需要开启文件系统Project ID和Project Quota属性。 - - 新格式化文件系统并mount +6. 需要开启文件系统Project ID和Project Quota属性。 + - 新格式化文件系统并mount - ``` + ```sh # mkfs.ext4 -O quota,project /dev/sdb # mount -o prjquota /dev/sdb /var/lib/isulad ``` - - ### 参数 create/run时指定--storage-opt参数。 @@ -390,7 +375,7 @@ create/run时指定--storage-opt参数。 在isula run/create命令行上通过已有参数“--storage-opt size=”来设置限额。其中value是一个正数,单位可以是\[kKmMgGtTpP\]?\[iI\]?\[bB\]?,在不带单位的时候默认单位是字节。 -``` +```sh # isula run -ti --storage-opt size=10M busybox / # df -h Filesystem Size Used Available Use% Mounted on @@ -427,35 +412,35 @@ overlay 10.0M 10.0M 0 100% / ### 约束 -1. 限额只针对rw层。 +1. 限额只针对rw层。 overlay2的限额是针对容器的rw层的,镜像的大小不计算在内。 -2. 内核支持并使能。 +2. 内核支持并使能。 内核必须支持ext4的project quota功能,并在mkfs的时候要加上-O quota,project,挂载的时候要加上-o prjquota。任何一个不满足,在使用--storage-opt size=时都将报错。 - ``` + ```sh # isula run -it --storage-opt size=10Mb busybox df -h Error response from daemon: Failed to prepare rootfs with error: time="2019-04-09T05:13:52-04:00" level=fatal msg="error creating read- write layer with ID "a4c0e55e82c55e4ee4b0f4ee07f80cc2261cf31b2c2dfd628fa1fb00db97270f": --storage-opt is supported only for overlay over xfs or ext4 with 'pquota' mount option" ``` -3. 限制额度的说明。 - 1. 限制的额度大于isulad的root所在分区的size时,在容器内用df看到的文件系统的额度是isulad的root所在分区的size,而不是设置的限额。 - 2. --storage-opt size=0代表不限制,且设置值不能小于4096。size的精度为1个字节,如果指定精度含小数个字节,小数部分被忽略,如指定size=0.1实际等同于size=0不限制。(受计算机存储浮点数精度的限制,即0.999999999999999999999999999与1是等价的,具体的9的个数不同计算机可能存在差异,故设置4095.999999999999999999999999999与4096等价,其他情况类似),注意isula inspect显示原始命令行指定形式,如果含小数字节,需自行忽略小数部分。 - 3. 限制的额度过小时,比如--storage-opt size=4k,可能会导致容器无法启动,因为启动容器本身需要创建一些文件。 - 4. 上一次启动isulad时,isulad的root所在分区挂载时加了-o prjquota选项,这次启动时不加,那么上一次启动中创建的带quota的容器的设置值不生效。 - 5. daemon端配额--storage-opt overlay2.basesize,其取值范围与--storage-opt size相同。 +3. 限制额度的说明。 + 1. 限制的额度大于isulad的root所在分区的size时,在容器内用df看到的文件系统的额度是isulad的root所在分区的size,而不是设置的限额。 + 2. --storage-opt size=0代表不限制,且设置值不能小于4096。size的精度为1个字节,如果指定精度含小数个字节,小数部分被忽略,如指定size=0.1实际等同于size=0不限制。(受计算机存储浮点数精度的限制,即0.999999999999999999999999999与1是等价的,具体的9的个数不同计算机可能存在差异,故设置4095.999999999999999999999999999与4096等价,其他情况类似),注意isula inspect显示原始命令行指定形式,如果含小数字节,需自行忽略小数部分。 + 3. 限制的额度过小时,比如--storage-opt size=4k,可能会导致容器无法启动,因为启动容器本身需要创建一些文件。 + 4. 上一次启动isulad时,isulad的root所在分区挂载时加了-o prjquota选项,这次启动时不加,那么上一次启动中创建的带quota的容器的设置值不生效。 + 5. daemon端配额--storage-opt overlay2.basesize,其取值范围与--storage-opt size相同。 -4. 指定storage-opt为4k时,轻量级容器启动与docker有差异 +4. 指定storage-opt为4k时,轻量级容器启动与docker有差异 使用选项 storage-opt size=4k 和镜像 rnd-dockerhub.huawei.com/official/ubuntu-arm64:latest 运行容器。 docker启动失败。 - ``` + ```sh # docker run -itd --storage-opt size=4k rnd-dockerhub.huawei.com/official/ubuntu-arm64:latest docker: Error response from daemon: symlink /proc/mounts /var/lib/docker/overlay2/e6e12701db1a488636c881b44109a807e187b8db51a50015db34a131294fcf70-init/merged/etc/mtab: disk quota exceeded. See 'docker run --help'. @@ -463,7 +448,7 @@ overlay 10.0M 10.0M 0 100% / 轻量级容器不报错,正常启动 - ``` + ```sh # isula run -itd --storage-opt size=4k rnd-dockerhub.huawei.com/official/ubuntu-arm64:latest 636480b1fc2cf8ac895f46e77d86439fe2b359a1ff78486ae81c18d089bbd728 # isula ps @@ -477,21 +462,20 @@ overlay 10.0M 10.0M 0 100% / 轻量级容器在启动容器过程中,使用默认配置时,挂载点较少,如/proc,或/sys等路径不存在时,才会创建。用例中的镜像rnd-dockerhub.huawei.com/official/ubuntu-arm64:latest本身含有/proc, /sys等,因此整个启动容器的过程中,都不会有新文件或路径生成,故轻量级容器启动过程不会报错。为验证这一过程,当把镜像替换为rnd-dockerhub.huawei.com/official/busybox-aarch64:latest时,由于该镜像内无/proc存在,轻量级容器启动一样会报错。 - ``` + ```sh # isula run -itd --storage-opt size=4k rnd-dockerhub.huawei.com/official/busybox-aarch64:latest 8e893ab483310350b8caa3b29eca7cd3c94eae55b48bfc82b350b30b17a0aaf4 Error response from daemon: Start container error: runtime error: 8e893ab483310350b8caa3b29eca7cd3c94eae55b48bfc82b350b30b17a0aaf4:tools/lxc_start.c:main:404 starting container process caused "Failed to setup lxc, please check the config file." ``` -5. 其他说明。 +5. 其他说明。 使用限额功能的isulad切换数据盘时,需要保证被切换的数据盘使用\`prjquota\`选项挂载,且/var/lib/isulad/storage/overlay2目录的挂载方式与/var/lib/isulad相同。 - >![](./public_sys-resources/icon-note.gif) **说明:** + >![NOTE]说明 >切换数据盘时需要保证/var/lib/isulad/storage/overlay2的挂载点被卸载。 - ## 限制容器内文件句柄数 ### 描述 @@ -534,15 +518,15 @@ create/run时指定--files-limit参数。 在运行容器时,直接加上--files-limit n 即可,如: -``` +```sh isula run -ti --files-limit 1024 busybox bash ``` ### 约束 -1. 使用--files-limit参数传入一个很小的值,如1,可能导致容器启动失败。 +1. 使用--files-limit参数传入一个很小的值,如1,可能导致容器启动失败。 - ``` + ```sh # isula run -itd --files-limit 1 rnd-dockerhub.huawei.com/official/busybox-aarch64 004858d9f9ef429b624f3d20f8ba12acfbc8a15bb121c4036de4e5745932eff4 Error response from daemon: Start container error: Container is not running:004858d9f9ef429b624f3d20f8ba12acfbc8a15bb121c4036de4e5745932eff4 @@ -550,7 +534,7 @@ isula run -ti --files-limit 1024 busybox bash 而docker会启动成功,其files.limit cgroup值为max。 - ``` + ```sh # docker run -itd --files-limit 1 rnd-dockerhub.huawei.com/official/busybox-aarch64 ef9694bf4d8e803a1c7de5c17f5d829db409e41a530a245edc2e5367708dbbab # docker exec -it ef96 cat /sys/fs/cgroup/files/files.limit @@ -559,7 +543,6 @@ isula run -ti --files-limit 1024 busybox bash 根因是lxc和runc启动过程的原理不一样,lxc创建cgroup子组后先设置files.limit值,再将容器进程的PID写入该子组的cgroup.procs文件,此时该进程已经打开超过1个句柄,因而写入报错导致启动失败。runc创建cgroup子组后先将容器进程的PID写入该子组的cgroup.procs文件,再设置files.limit值,此时由于该子组内的进程已经打开超过1个句柄,因而写入files.limit不会生效,内核也不会报错,容器启动成功。 - ## 限制容器内可以创建的进程/线程数 ### 描述 @@ -601,7 +584,7 @@ create/run时指定--pids-limit参数。 在运行容器时,直接加上--pids-limit n 即可,如: -``` +```sh isula run -ti --pids-limit 1024 busybox bash ``` @@ -623,7 +606,7 @@ isula run -ti --pids-limit 1024 busybox bash 通过两种方法配置ulimit -1. isula create/run时使用--ulimit =\[:\]来控制shell执行程序的资源。 +1. isula create/run时使用--ulimit =\[:\]来控制shell执行程序的资源。

参数项

@@ -648,7 +631,7 @@ isula run -ti --pids-limit 1024 busybox bash
-2. 通过daemon端参数或配置文件 +2. 通过daemon端参数或配置文件 详见"(命令行参数说明"与"部署方式"的--default-ulimits相关选项。 @@ -745,16 +728,14 @@ isula run -ti --pids-limit 1024 busybox bash - ### 示例 在容器的创建或者运行时,加上--ulimit =\[:\]即可,如: -``` +```sh isula create/run -tid --ulimit nofile=1024:2048 busybox sh ``` ### 约束 不能在daemon.json和/etc/sysconfig/iSulad文件(或isulad命令行)中同时配置ulimit限制,否则isulad启动会报错。 - diff --git "a/docs/zh/docs/Container/CRI-v1\346\216\245\345\217\243.md" b/docs/zh/docs/cloud/container_engine/isula_container_engine/cri-2.md similarity index 68% rename from "docs/zh/docs/Container/CRI-v1\346\216\245\345\217\243.md" rename to docs/zh/docs/cloud/container_engine/isula_container_engine/cri-2.md index 55202eb71..52f1df63d 100644 --- "a/docs/zh/docs/Container/CRI-v1\346\216\245\345\217\243.md" +++ b/docs/zh/docs/cloud/container_engine/isula_container_engine/cri-2.md @@ -5,8 +5,8 @@ CRI(Container Runtime Interface, 容器运行时接口)是kublet与容器引擎通信使用的主要协议。 在K8S 1.25及之前,K8S存在CRI v1alpha2 和 CRI V1两种版本的CRI接口,但从1.26开始,K8S仅提供对于CRI V1的支持。 -iSulad同时提供对[CRI v1alpha2](./CRI-v1alpha2接口.md)和CRI v1的支持, -对于CRI v1,iSulad支持[CRI v1alpha2](./CRI-v1alpha2接口.md)所述功能, +iSulad同时提供对[CRI v1alpha2](./cri.md)和CRI v1的支持, +对于CRI v1,iSulad支持[CRI v1alpha2](./cri.md)所述功能, 并提供对CRI V1中所定义新接口和字段的支持。 目前iSulad支持的CRI V1版本为1.29,对应官网描述API如下: @@ -22,20 +22,20 @@ iSulad使用的API描述文件,与官方API略有出入,以本文档描述 cgroup驱动的enum值列表 -

参数成员

+ - - - - - @@ -46,15 +46,15 @@ iSulad使用的API描述文件,与官方API略有出入,以本文档描述 容器引擎所使用的cgroup驱动 -

参数成员

描述

+

描述

SYSTEMD = 0

+

SYSTEMD = 0

systemd cgroup驱动

+

systemd cgroup驱动

CGROUPFS = 1

+

CGROUPFS = 1

cgroupfs驱动

+

cgroupfs驱动

参数成员

+ - - - @@ -65,30 +65,30 @@ iSulad使用的API描述文件,与官方API略有出入,以本文档描述 容器事件类型枚举值 -

参数成员

描述

+

描述

CgroupDriver cgroup_driver

+

CgroupDriver cgroup_driver

容器引擎所使用的cgroup驱动枚举值

+

容器引擎所使用的cgroup驱动枚举值

参数成员

+ - - - - - - - - - @@ -99,25 +99,25 @@ iSulad使用的API描述文件,与官方API略有出入,以本文档描述 虚拟内存使用情况 -

参数成员

描述

+

描述

CONTAINER_CREATED_EVENT = 0

+

CONTAINER_CREATED_EVENT = 0

容器创建类型

+

容器创建类型

CONTAINER_STARTED_EVENT = 1

+

CONTAINER_STARTED_EVENT = 1

容器启动类型

+

容器启动类型

CONTAINER_STOPPED_EVENT = 1

+

CONTAINER_STOPPED_EVENT = 1

容器停止类型

+

容器停止类型

CONTAINER_DELETED_EVENT = 1

+

CONTAINER_DELETED_EVENT = 1

容器删除类型

+

容器删除类型

参数成员

+ - - - - - - - @@ -306,7 +306,5 @@ iSulad仅提供底层运行时为runc时systemd-cgroup的支持。通过修改iS ## 使用限制 1. 以上新增特性,iSulad仅提供容器运行时设置为runc时的支持。 -2. 由于cgroup oom会同时触发容器cgroup路径删除,若iSulad对oom事件处理发生在 -cgroup路径删除之后,iSulad则无法成功捕捉容器oom事件, -可能导致ContainerStatus中reason字段设置不正确。 +2. 由于cgroup oom会同时触发容器cgroup路径删除,若iSulad对oom事件处理发生在cgroup路径删除之后,iSulad则无法成功捕捉容器oom事件,可能导致ContainerStatus中reason字段设置不正确。 3. iSulad不支持交叉使用不同的cgroup驱动管理容器,启动容器后iSulad的cgroup驱动配置不应该发生变化。 diff --git "a/docs/zh/docs/Container/CRI-v1alpha2\346\216\245\345\217\243.md" b/docs/zh/docs/cloud/container_engine/isula_container_engine/cri.md similarity index 46% rename from "docs/zh/docs/Container/CRI-v1alpha2\346\216\245\345\217\243.md" rename to docs/zh/docs/cloud/container_engine/isula_container_engine/cri.md index 9d1ac2bd9..aa8e14243 100644 --- "a/docs/zh/docs/Container/CRI-v1alpha2\346\216\245\345\217\243.md" +++ b/docs/zh/docs/cloud/container_engine/isula_container_engine/cri.md @@ -12,8 +12,9 @@ CRI API 接口是由kubernetes 推出的容器运行时接口,CRI定义了容 ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出入,以本文档描述的接口为准。 ->![](./public_sys-resources/icon-note.gif) **说明:** ->CRI接口websocket流式服务,服务端侦听地址为127.0.0.1,端口为10350,端口可通过命令行--websocket-server-listening-port参数接口或者daemon.json配置文件进行配置。 +> [!NOTE]说明 +> +> CRI接口websocket流式服务,服务端侦听地址为127.0.0.1,端口为10350,端口可通过命令行--websocket-server-listening-port参数接口或者daemon.json配置文件进行配置。 ## 接口 @@ -25,30 +26,11 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 配置sandbox的DNS服务器和搜索域 - -

参数成员

描述

+

描述

int64 timestamp

+

int64 timestamp

时间戳信息

+

时间戳信息

UInt64Value swap_available_bytes

+

UInt64Value swap_available_bytes

可使用虚拟内存字节数

+

可使用虚拟内存字节数

UInt64Value swap_usage_bytes

+

UInt64Value swap_usage_bytes

已使用虚拟内存字节数

+

已使用虚拟内存字节数

- - - - - - - - - - - - - -

参数成员

-

描述

-

repeated string servers

-

集群的DNS服务器列表

-

repeated string searches

-

集群的DNS搜索域列表

-

repeated string options

-

DNS可选项列表,参考https://linux.die.net/man/5/resolv.conf

-
+ | 参数成员 | 描述 | + |--------------------------|------------------------------------------------------------| + | repeated string servers | 集群的DNS服务器列表 | + | repeated string searches | 集群的DNS搜索域列表 | + | repeated string options | DNS可选项列表,参考 | - **Protocol** @@ -78,37 +60,14 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 指定sandbox的端口映射配置 - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

Protocol protocol

-

端口映射使用的协议

-

int32 container_port

-

容器内的端口号

-

int32 host_port

-

主机上的端口号

-

string host_ip

-

主机IP地址

-
+ | **参数成员** | **描述** | + |----------------------|--------------------| + | Protocol protocol | 端口映射使用的协议 | + | int32 container_port | 容器内的端口号 | + | int32 host_port | 主机上的端口号 | + | string host_ip | 主机IP地址 | -- **MountPropagation** +- **MountPropagation** 挂载传播属性的enum列表 @@ -141,40 +100,13 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 Mount指定host上的一个挂载卷挂载到容器中(只支持文件和文件夹\) - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string container_path

-

容器中的路径

-

string host_path

-

主机上的路径

-

bool readonly

-

是否配置在容器中是只读的, 缺省值: false

-

bool selinux_relabel

-

是否设置SELinux标签(不支持配置)

-

MountPropagation propagation

-

挂载传播属性配置(取值0/1/2,分别对应private/rslave/rshared传播属性) 缺省值:0

-
+ | **参数成员** | **描述** | + |------------------------------|---------------------------------------------------------------------------------| + | string container_path | 容器中的路径 | + | string host_path | 主机上的路径 | + | bool readonly | 是否配置在容器中是只读的, 缺省值: false | + | bool selinux_relabel | 是否设置SELinux标签(不支持配置) | + | MountPropagation propagation | 挂载传播属性配置(取值**0/1/2**,分别对应**private/rslave/rshared**传播属性) **缺省值:0** | - **NamespaceOption** @@ -265,89 +197,31 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出
-- **LinuxSandboxSecurityContext** +- **LinuxSandboxSecurityContext** 配置sandbox的linux安全选项。 - 注意,这些安全选项不会应用到sandbox中的容器中,也可能不适用于没有任何running进程的sandbox + 注意,这些安全选项不会应用到sandbox中的容器中,也可能不适用于没有任何running进程的sandbox。 - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

NamespaceOption namespace_options

-

配置sandbox的命名空间选项

-

SELinuxOption selinux_options

-

配置SELinux选项(不支持)

-

Int64Value run_as_user

-

配置sandbox中进程的uid

-

bool readonly_rootfs

-

配置sandbox的根文件系统是否只读

-

repeated int64 supplemental_groups

-

配置除主GID之外的sandbox的1号进程用户组信息

-

bool privileged

-

配置sandbox是否为特权容器

-

string seccomp_profile_path

-

seccomp配置文件路径,有效值为:

-

// unconfined: 不配置seccomp

-

// localhost/<配置文件的全路径>: 安装在系统上的配置文件路径

-

// <配置文件的全路径>: 配置文件全路径

-

// 默认不配置,即unconfined。

-
+ | **参数成员** | **描述** | + |------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| + | NamespaceOption namespace_options | 配置sandbox的命名空间选项 | + | SELinuxOption selinux_options | 配置SELinux选项(不支持) | + | Int64Value run_as_user | 配置sandbox中进程的uid | + | bool readonly_rootfs | 配置sandbox的根文件系统是否只读 | + | repeated int64 supplemental_groups | 配置除主GID之外的sandbox的1号进程用户组信息 | + | bool privileged | 配置sandbox是否为特权容器 | + | string seccomp_profile_path | seccomp配置文件路径,有效值为:
// unconfined: 不配置seccomp
// localhost/\<配置文件的全路径>: 安装在系统上的配置文件路径
// \<配置文件的全路径>: 配置文件全路径
// 默认不配置,即unconfined。 | - **LinuxPodSandboxConfig** 设定和Linux主机及容器相关的一些配置 - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string cgroup_parent

-

sandbox的cgroup父路径,runtime可根据实际情况使用cgroupfs或systemd的语法。(不支持配置)

-

LinuxSandboxSecurityContext security_context

-

sandbox的安全属性

-

map<string, string> sysctls

-

sandbox的linux sysctls配置

-
+ | **参数成员** | **描述** | + |----------------------------------------------|-----------------------------------------------------------------------------------------| + | string cgroup_parent | sandbox的cgroup父路径,runtime可根据实际情况使用cgroupfs或systemd的语法。(不支持配置) | + | LinuxSandboxSecurityContext security_context | sandbox的安全属性 | + | map\ sysctls | sandbox的linux sysctls配置 | - **PodSandboxMetadata** @@ -387,55 +261,16 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 包含创建sandbox的所有必选和可选配置信息 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

PodSandboxMetadata metadata

-

sandbox的元数据,这项信息唯一标识一个sandbox,runtime必须利用此信息确保操作正确,runtime也可以根据此信息来改善用户体验,例如构建可读的sandbox名称。

-

string hostname

-

sandbox的hostname

-

string log_directory

-

配置sandbox内的容器的日志文件所存储的文件夹

-

DNSConfig dns_config

-

sandbox的DNS配置

-

repeated PortMapping port_mappings

-

sandbox的端口映射

-

map<string, string> labels

-

可用于标识单个或一系列sandbox的键值对

-

map<string, string> annotations

-

存储任意信息的键值对,这些值是不可更改的,且能够利用PodSandboxStatus接口查询

-

LinuxPodSandboxConfig linux

-

与linux主机相关的可选项

-
+ | **参数成员** | **描述** | + |------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------| + | PodSandboxMetadata metadata | sandbox的元数据,这项信息唯一标识一个sandbox,runtime必须利用此信息确保操作正确,runtime也可以根据此信息来改善用户体验,例如构建可读的sandbox名称。 | + | string hostname | sandbox的hostname | + | string log_directory | 配置sandbox内的容器的日志文件所存储的文件夹 | + | DNSConfig dns_config | sandbox的DNS配置 | + | repeated PortMapping port_mappings | sandbox的端口映射 | + | map\ labels | 可用于标识单个或一系列sandbox的键值对 | + | map\ annotations | 存储任意信息的键值对,这些值是不可更改的,且能够利用PodSandboxStatus接口查询 | + | LinuxPodSandboxConfig linux | 与linux主机相关的可选项 | - **PodSandboxNetworkStatus** @@ -470,39 +305,17 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 命名空间选项 - - - - - - - - - -

参数成员

-

描述

-

NamespaceOption options

-

Linux 命名空间选项

-
+ | **参数成员** | **描述** | + |-------------------------|--------------------| + | NamespaceOption options | Linux 命名空间选项 | - **LinuxPodSandboxStatus** 描述Linux sandbox的状态 - - - - - - - - - -

参数成员

-

描述

-

Namespace namespaces

-

sandbox命名空间

-
+ | **参数成员** | **描述** | + |----------------------|-----------------| + | Namespace **namespaces** | sandbox命名空间 | - **PodSandboxState** @@ -532,147 +345,47 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 描述Podsandbox的状态信息 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string id

-

sandbox的ID

-

PodSandboxMetadata metadata

-

sandbox的元数据

-

PodSandboxState state

-

sandbox的状态值

-

int64 created_at

-

sandbox的创建时间戳,单位纳秒

-

repeated PodSandboxNetworkStatus networks

-

sandbox的多平面网络状态

-

LinuxPodSandboxStatus linux

-

Linux规范的sandbox状态

-

map<string, string> labels

-

可用于标识单个或一系列sandbox的键值对

-

map<string, string> annotations

-

存储任意信息的键值对,这些值是不可被runtime更改的

-
+ | **参数成员** | **描述** | + |-------------------------------------------|---------------------------------------------------| + | string id | sandbox的ID | + | PodSandboxMetadata metadata | sandbox的元数据 | + | PodSandboxState state | sandbox的状态值 | + | int64 created_at | sandbox的创建时间戳,单位纳秒 | + | repeated PodSandboxNetworkStatus networks | sandbox的多平面网络状态 | + | LinuxPodSandboxStatus linux | Linux规范的sandbox状态 | + | map\ labels | 可用于标识单个或一系列sandbox的键值对 | + | map\ annotations | 存储任意信息的键值对,这些值是不可被runtime更改的 | - **PodSandboxStateValue** 对PodSandboxState的封装 - - - - - - - - - -

参数成员

-

描述

-

PodSandboxState state

-

sandbox的状态值

-
+ | **参数成员** | **描述** | + |-----------------------|-----------------| + | PodSandboxState state | sandbox的状态值 | - **PodSandboxFilter** 用于列出sandbox时添加过滤条件,多个条件取交集显示 - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string id

-

sandbox的ID

-

PodSandboxStateValue state

-

sandbox的状态

-

map<string, string> label_selector

-

sandbox的labels,label只支持完全匹配,不支持正则匹配

-
+ | **参数成员** | **描述** | + |------------------------------------|------------------------------------------------------| + | string id | sandbox的ID | + | PodSandboxStateValue state | sandbox的状态 | + | map\ label_selector | sandbox的labels,label只支持完全匹配,不支持正则匹配 | - **PodSandbox** 包含最小化描述一个sandbox的数据 - - - - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string id

-

sandbox的ID

-

PodSandboxMetadata metadata

-

sandbox的元数据

-

PodSandboxState state

-

sandbox的状态值

-

int64 created_at

-

sandbox的创建时间戳,单位纳秒

-

map<string, string> labels

-

可用于标识单个或一系列sandbox的键值对

-

map<string, string> annotations

-

存储任意信息的键值对,这些值是不可被runtime更改的

-
+ | **参数成员** | **描述** | + |---------------------------------|---------------------------------------------------| + | string id | sandbox的ID | + | PodSandboxMetadata metadata | sandbox的元数据 | + | PodSandboxState state | sandbox的状态值 | + | int64 created_at | sandbox的创建时间戳,单位纳秒 | + | map\ labels | 可用于标识单个或一系列sandbox的键值对 | + | map\ annotations | 存储任意信息的键值对,这些值是不可被runtime更改的 | - **KeyValue** @@ -794,146 +507,62 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 封装ContainerState的数据结构 - - - - - - - - - -

参数成员

-

描述

-

ContainerState state

-

容器状态值

-
+ | **参数成员** | **描述** | + |----------------------|------------| + | ContainerState **state** | 容器状态值 | - **ContainerFilter** 用于列出container时添加过滤条件,多个条件取交集显示 - - - - - -

参数成员

-

描述

-

string id

+ | **参数成员** | **描述** | + |------------------------------------|--------------------------------------------------------| + | string id | container的ID | + | PodSandboxStateValue state | container的状态 | + | string pod_sandbox_id | sandbox的ID | + | map\ label_selector | container的labels,label只支持完全匹配,不支持正则匹配 | + +- **LinuxContainerSecurityContext** + + 指定应用于容器的安全配置 + + | **参数成员** | **描述** | + |------------------------------------|------------------------------------------------------------------------------------------------------------------------------------| + | Capability capabilities | 新增或去除的权能 | + | bool privileged | 指定容器是否未特权模式, **缺省值:false** | + | NamespaceOption namespace_options | 指定容器的namespace选项 | + | SELinuxOption selinux_options | SELinux context(可选配置项) **暂不支持** | + | Int64Value run_as_user | 运行容器进程的UID。 一次只能指定run_as_user与run_as_username其中之一,run_as_username优先生效 | + | string run_as_username | 运行容器进程的用户名。 如果指定,用户必须存在于容器映像中(即在映像内的/etc/passwd中),并由运行时在那里解析; 否则,运行时必须出错 | + | bool readonly_rootfs | 设置容器中根文件系统是否为只读 **缺省值由config.json配置** | + | repeated int64 supplemental_groups | 容器运行的除主GID外首进程组的列表 | + | string apparmor_profile | 容器的AppArmor配置文件 **暂不支持** | + | string seccomp_profile_path | 容器的seccomp配置文件路径 | + | bool no_new_privs | 是否在容器上设置no_new_privs的标志 | + +- **LinuxContainerResources** + + 指定Linux容器资源的特定配置 + + + - - - - - - - - - -

参数成员

container的ID

+

描述

PodSandboxStateValue state

+

int64 cpu_period

container的状态

+

CPU CFS(完全公平调度程序)周期。 缺省值:0

string pod_sandbox_id

+

int64 cpu_quota

sandbox的ID

+

CPU CFS(完全公平调度程序)配额。 缺省值:0

map<string, string> label_selector

+

int64 cpu_shares

container的labels,label只支持完全匹配,不支持正则匹配

-
- -- **LinuxContainerSecurityContext** - - 指定应用于容器的安全配置 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

Capability capabilities

-

新增或去除的权能

-

bool privileged

-

指定容器是否未特权模式, 缺省值:false

-

NamespaceOption namespace_options

-

指定容器的namespace选项

-

SELinuxOption selinux_options

-

SELinux context(可选配置项) 暂不支持

-

Int64Value run_as_user

-

运行容器进程的UID。 一次只能指定run_as_user与run_as_username其中之一,run_as_username优先生效

-

string run_as_username

-

运行容器进程的用户名。 如果指定,用户必须存在于容器映像中(即在映像内的/etc/passwd中),并由运行时在那里解析; 否则,运行时必须出错

-

bool readonly_rootfs

-

设置容器中根文件系统是否为只读 缺省值由config.json配置

-

repeated int64 supplemental_groups

-

容器运行的除主GID外首进程组的列表

-

string apparmor_profile

-

容器的AppArmor配置文件 暂不支持

-

string seccomp_profile_path

-

容器的seccomp配置文件路径

-

bool no_new_privs

-

是否在容器上设置no_new_privs的标志

-
- -- **LinuxContainerResources** - - 指定Linux容器资源的特定配置 - - - - - - - - - - - - -

参数成员

-

描述

-

int64 cpu_period

-

CPU CFS(完全公平调度程序)周期。 缺省值:0

-

int64 cpu_quota

-

CPU CFS(完全公平调度程序)配额。 缺省值:0

-

int64 cpu_shares

-

所占CPU份额(相对于其他容器的相对权重)。 缺省值:0

+

所占CPU份额(相对于其他容器的相对权重)。 缺省值:0

int64 memory_limit_in_bytes

@@ -963,44 +592,14 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 Image信息描述一个镜像的基本数据。 - - - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string id

-

镜像ID

-

repeated string repo_tags

-

镜像tag 名称 repo_tags

-

repeated string repo_digests

-

镜像digest信息

-

uint64 size

-

镜像大小

-

Int64Value uid

-

镜像默认用户UID

-

string username

-

镜像默认用户名称

-
+ | **参数成员** | **描述** | + |------------------------------|------------------------| + | string id | 镜像ID | + | repeated string repo_tags | 镜像tag 名称 repo_tags | + | repeated string repo_digests | 镜像digest信息 | + | uint64 size | 镜像大小 | + | Int64Value uid | 镜像默认用户UID | + | string username | 镜像默认用户名称 | - **ImageSpec** @@ -1042,34 +641,12 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 - **FilesystemUsage** - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

int64 timestamp

-

收集文件系统信息时的时间戳

-

StorageIdentifier storage_id

-

存储镜像的文件系统UUID

-

UInt64Value used_bytes

-

存储镜像元数据的大小

-

UInt64Value inodes_used

-

存储镜像元数据的inodes个数

-
+ | **参数成员** | **描述** | + |------------------------------|----------------------------| + | int64 timestamp | 收集文件系统信息时的时间戳 | + | StorageIdentifier storage_id | 存储镜像的文件系统UUID | + | UInt64Value used_bytes | 存储镜像元数据的大小 | + | UInt64Value inodes_used | 存储镜像元数据的inodes个数 | - **AuthConfig** @@ -1116,149 +693,39 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 用于描述容器信息,例如ID, 状态等。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string id

-

container的ID

-

string pod_sandbox_id

-

该容器所属的sandbox的ID

-

ContainerMetadata metadata

-

container的元数据

-

ImageSpec image

-

镜像规格

-

string image_ref

-

代表容器使用的镜像,对大多数runtime来产,这是一个image ID值

-

ContainerState state

-

container的状态

-

int64 created_at

-

container的创建时间戳,单位为纳秒

-

map<string, string> labels

-

可用于标识单个或一系列container的键值对

-

map<string, string> annotations

-

存储任意信息的键值对,这些值是不可被runtime更改的

-
+ | **参数成员** | **描述** | + |---------------------------------|-------------------------------------------------------------| + | string id | container的ID | + | string pod_sandbox_id | 该容器所属的sandbox的ID | + | ContainerMetadata metadata | container的元数据 | + | ImageSpec image | 镜像规格 | + | string image_ref | 代表容器使用的镜像,对大多数runtime来产,这是一个image ID值 | + | ContainerState state | container的状态 | + | int64 created_at | container的创建时间戳,单位为纳秒 | + | map\ labels | 可用于标识单个或一系列container的键值对 | + | map\ annotations | 存储任意信息的键值对,这些值是不可被runtime更改的 | - **ContainerStatus** 用于描述容器状态信息 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string id

-

container的ID

-

ContainerMetadata metadata

-

container的元数据

-

ContainerState state

-

container的状态

-

int64 created_at

-

container的创建时间戳,单位为纳秒

-

int64 started_at

-

container启动时的时间戳,单位为纳秒

-

int64 finished_at

-

container退出时的时间戳,单位为纳秒

-

int32 exit_code

-

容器退出码

-

ImageSpec image

-

镜像规格

-

string image_ref

-

代表容器使用的镜像,对大多数runtime来产,这是一个image ID值

-

string reason

-

简要描述为什么容器处于当前状态

-

string message

-

易于人工阅读的信息,用于表述容器处于当前状态的原因

-

map<string, string> labels

-

可用于标识单个或一系列container的键值对

-

map<string, string> annotations

-

存储任意信息的键值对,这些值是不可被runtime更改的

-

repeated Mount mounts

-

容器的挂载点信息

-

string log_path

-

容器日志文件路径,该文件位于PodSandboxConfig中配置的log_directory文件夹下

-
+ | **参数成员** | **描述** | + |---------------------------------|---------------------------------------------------------------------------| + | string id | container的ID | + | ContainerMetadata metadata | container的元数据 | + | ContainerState state | container的状态 | + | int64 created_at | container的创建时间戳,单位为纳秒 | + | int64 started_at | container启动时的时间戳,单位为纳秒 | + | int64 finished_at | container退出时的时间戳,单位为纳秒 | + | int32 exit_code | 容器退出码 | + | ImageSpec image | 镜像规格 | + | string image_ref | 代表容器使用的镜像,对大多数runtime来产,这是一个image ID值 | + | string reason | 简要描述为什么容器处于当前状态 | + | string message | 易于人工阅读的信息,用于表述容器处于当前状态的原因 | + | map\ labels | 可用于标识单个或一系列container的键值对 | + | map\ annotations | 存储任意信息的键值对,这些值是不可被runtime更改的 | + | repeated Mount mounts | 容器的挂载点信息 | + | string log_path | 容器日志文件路径,该文件位于PodSandboxConfig中配置的log_directory文件夹下 | - **ContainerStatsFilter** @@ -1293,69 +760,23 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 用于列出container stats时添加过滤条件,多个条件取交集显示 - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

ContainerAttributes attributes

-

容器的信息

-

CpuUsage cpu

-

CPU使用情况

-

MemoryUsage memory

-

内存使用情况

-

FilesystemUsage writable_layer

-

可写层使用情况

-
+ | **参数成员** | **描述** | + |--------------------------------|----------------| + | ContainerAttributes attributes | 容器的信息 | + | CpuUsage cpu | CPU使用情况 | + | MemoryUsage memory | 内存使用情况 | + | FilesystemUsage writable_layer | 可写层使用情况 | - **ContainerAttributes** 列出container的基本信息 - - - - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string id

-

容器的ID

-

ContainerMetadata metadata

-

容器的metadata

-

map<string,string> labels

-

可用于标识单个或一系列container的键值对

-

map<string,string> annotations

-

存储任意信息的键值对,这些值是不可被runtime更改的

-
+ | **参数成员** | **描述** | + |--------------------------------|---------------------------------------------------| + | string id | 容器的ID | + | ContainerMetadata metadata | 容器的metadata | + | map\ labels | 可用于标识单个或一系列container的键值对 | + | map\ annotations | 存储任意信息的键值对,这些值是不可被runtime更改的 | - **CpuUsage** @@ -1412,207 +833,99 @@ ISulad使用的为pass使用的1.14版本API描述文件,与官方API略有出 - - - - - - - - - - - - - - - - -

参数成员

描述

-

int64 timestamp

-

时间戳

-

StorageIdentifier storage_id

-

可写层目录

-

UInt64Value used_bytes

-

镜像在可写层的占用字节

-

UInt64Value inodes_used

-

镜像在可写层的占用inode数

-
- -- **Device** - - 指定待挂载至容器的主机卷 - - - - - - - - - - - - - - - -

参数成员

-

描述

-

string container_path

-

容器内的挂载路径

-

string host_path

-

主机上的挂载路径

-

string permissions

-

设备的Cgroup权限,(r允许容器从指定的设备读取; w允许容器从指定的设备写入; m允许容器创建尚不存在的设备文件)

-
- -- **LinuxContainerConfig** - - 包含特定于Linux平台的配置 - - - - - - - - - - - - -

参数成员

-

描述

-

LinuxContainerResources resources

-

容器的资源规范

-

LinuxContainerSecurityContext security_context

-

容器的Linux容器安全配置

-
- -- **ContainerConfig** - - 包含用于创建容器的所有必需和可选字段 - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - +

参数成员

-

描述

-

ContainerMetadata metadata

-

容器的元数据。 此信息将唯一标识容器,运行时应利用此信息来确保正确操作。 运行时也可以使用此信息来提升UX(用户体检设计),例如通过构造可读名称。(必选)

-

ImageSpec image

-

容器使用的镜像 (必选)

-

repeated string command

-

待执行的命令 缺省值: "/bin/sh"

-

repeated string args

-

待执行命令的参数

-

string working_dir

-

命令执行的当前工作路径

-

repeated KeyValue envs

-

在容器中配置的环境变量

-

repeated Mount mounts

-

待在容器中挂载的挂载点信息

-

描述

+

repeated Device devices

+ +

int64 timestamp

待在容器中映射的设备信息

+

时间戳

map<string, string> labels

+

StorageIdentifier storage_id

可用于索引和选择单个资源的键值对。

+

可写层目录

map<string, string> annotations

+

UInt64Value used_bytes

可用于存储和检索任意元数据的非结构化键值映射。

+

镜像在可写层的占用字节

string log_path

+

UInt64Value inodes_used

相对于PodSandboxConfig.LogDirectory的路径,用于存储容器主机上的日志(STDOUT和STDERR)。

+

镜像在可写层的占用inode数

bool stdin

+
+ +- **Device** + + 指定待挂载至容器的主机卷 + + + - - - - - - -

参数成员

是否打开容器的stdin

+

描述

bool stdin_once

+

string container_path

当某次连接stdin的数据流断开时,是否立即断开其他与stdin连接的数据流(暂不支持

+

容器内的挂载路径

bool tty

+

string host_path

是否使用伪终端连接容器的stdio

+

主机上的挂载路径

LinuxContainerConfig linux

+

string permissions

linux系统上容器的特定配置信息

+

设备的Cgroup权限,(r允许容器从指定的设备读取; w允许容器从指定的设备写入; m允许容器创建尚不存在的设备文件)

-- **NetworkConfig** +- **LinuxContainerConfig** - Runtime的网络配置 + 包含特定于Linux平台的配置 - - - - - - - - -

参数成员

-

描述

-

string pod_cidr

-

Pod IP 地址使用的CIDR

-
+ | **参数成员** | **描述** | + |------------------------------------------------|-------------------------| + | LinuxContainerResources resources | 容器的资源规范 | + | LinuxContainerSecurityContext security_context | 容器的Linux容器安全配置 | + +- **ContainerConfig** + + 包含用于创建容器的所有必需和可选字段 + + | **参数成员** | **描述** | + |---------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------| + | ContainerMetadata metadata | 容器的元数据。 此信息将唯一标识容器,运行时应利用此信息来确保正确操作。 运行时也可以使用此信息来提升UX(用户体检设计),例如通过构造可读名称。(必选) | + | ImageSpec image | 容器使用的镜像 (**必选**) | + | repeated string command | 待执行的命令 **缺省值: "/bin/sh"** | + | repeated string args | 待执行命令的参数 | + | string working_dir | 命令执行的当前工作路径 | + | repeated KeyValue envs | 在容器中配置的环境变量 | + | repeated Mount mounts | 待在容器中挂载的挂载点信息 | + | repeated Device devices | 待在容器中映射的设备信息 | + | map\ labels | 可用于索引和选择单个资源的键值对。 | + | map\ annotations | 可用于存储和检索任意元数据的非结构化键值映射。 | + | string log_path | 相对于PodSandboxConfig.LogDirectory的路径,用于存储容器主机上的日志(STDOUT和STDERR)。 | + | bool stdin | 是否打开容器的stdin | + | bool stdin_once | 当某次连接stdin的数据流断开时,是否立即断开其他与stdin连接的数据流 **(暂不支持)** | + | bool tty | 是否使用伪终端连接容器的stdio | + | LinuxContainerConfig linux | linux系统上容器的特定配置信息 | - **RuntimeConfig** Runtime的网络配置 - - - - - - - - -

参数成员

-

描述

-

NetworkConfig network_config

-

Runtime的网络配置

-
+ | **参数成员** | **描述** | + |------------------------------|-------------------| + | NetworkConfig network_config | Runtime的网络配置 | - **RuntimeCondition** @@ -1673,7 +986,7 @@ Runtime服务中包含操作pod和容器的接口,以及查询runtime自身配 #### 接口原型 -``` +```text rpc RunPodSandbox(RunPodSandboxRequest) returns (RunPodSandboxResponse) {} ``` @@ -1688,24 +1001,10 @@ rpc RunPodSandbox(RunPodSandboxRequest) returns (RunPodSandboxResponse) {} #### 参数 - - - - - - - - - - - -

参数成员

-

描述

-

PodSandboxConfig config

-

sandbox的配置

-

string runtime_handler

-

指定创建sandbox的runtime运行时,当前支持lcr、kata-runtime运行时类型。

-
+| **参数成员** | **描述** | +|-------------------------|-----------------------------------------------------------------------| +| PodSandboxConfig config | sandbox的配置 | +| string runtime_handler | 指定创建sandbox的runtime运行时,当前支持lcr、kata-runtime运行时类型。 | #### 返回值 @@ -1727,7 +1026,7 @@ rpc RunPodSandbox(RunPodSandboxRequest) returns (RunPodSandboxResponse) {} #### 接口原型 -``` +```text rpc StopPodSandbox(StopPodSandboxRequest) returns (StopPodSandboxResponse) {} ``` @@ -1851,24 +1150,10 @@ rpc PodSandboxStatus(PodSandboxStatusRequest) returns (PodSandboxStatusResponse) #### 返回值 - - - - - - - - - - - -

返回值

-

描述

-

PodSandboxStatus status

-

sandbox的状态信息

-

map<string, string> info

-

sandbox的额外信息,key是任意string,value是json格式的字符串,这些信息可以是任意调试内容。当verbose为true时info不能为空。(暂不支持配置)

-
+| **返回值** | **描述** | +|--------------------------|------------------------------------------------------------------------------------------------------------------------------------------| +| PodSandboxStatus status | sandbox的状态信息 | +| map\ info | sandbox的额外信息,key是任意string,value是json格式的字符串,这些信息可以是任意调试内容。当verbose为true时info不能为空。(暂不支持配置) | #### ListPodSandbox @@ -1884,35 +1169,15 @@ rpc ListPodSandbox(ListPodSandboxRequest) returns (ListPodSandboxResponse) {} #### 参数 - - - - - - - - -

参数成员

-

描述

-

PodSandboxFilter filter

-

条件过滤参数

-
+| **参数成员** | **描述** | +|-------------------------|--------------| +| PodSandboxFilter filter | 条件过滤参数 | #### 返回值 - - - - - - - - -

返回值

-

描述

-

repeated PodSandbox items

-

sandbox信息的列表

-
+| **返回值** | **描述** | +|---------------------------|-------------------| +| repeated PodSandbox items | sandbox信息的列表 | #### CreateContainer @@ -1934,29 +1199,11 @@ rpc CreateContainer(CreateContainerRequest) returns (CreateContainerResponse) {} #### 参数 - - - - - - - - - - - - - - -

参数成员

-

描述

-

string pod_sandbox_id

-

待在其中创建容器的PodSandbox的ID。

-

ContainerConfig config

-

容器的配置信息

-

PodSandboxConfig sandbox_config

-

PodSandbox的配置信息

-
+| **参数成员** | **描述** | +|---------------------------------|------------------------------------| +| string pod_sandbox_id | 待在其中创建容器的PodSandbox的ID。 | +| ContainerConfig config | 容器的配置信息 | +| PodSandboxConfig sandbox_config | PodSandbox的配置信息 | #### 补充 @@ -2121,35 +1368,15 @@ rpc ListContainers(ListContainersRequest) returns (ListContainersResponse) {} #### 参数 - - - - - - - - -

参数成员

-

描述

-

ContainerFilter filter

-

条件过滤参数

-
+| **参数成员** | **描述** | +|------------------------|--------------| +| ContainerFilter filter | 条件过滤参数 | #### 返回值 - - - - - - - - -

返回值

-

描述

-

repeated Container containers

-

容器信息的列表

-
+| **返回值** | **描述** | +|-------------------------------|----------------| +| repeated Container containers | 容器信息的列表 | #### ContainerStatus @@ -2186,24 +1413,10 @@ rpc ContainerStatus(ContainerStatusRequest) returns (ContainerStatusResponse) {} #### 返回值 - - - - - - - - - - - -

返回值

-

描述

-

ContainerStatus status

-

容器的状态信息

-

map<string, string> info

-

sandbox的额外信息,key是任意string,value是json格式的字符串,这些信息可以是任意调试内容。当verbose为true时info不能为空。(暂不支持配置)

-
+| **返回值** | **描述** | +|--------------------------|------------------------------------------------------------------------------------------------------------------------------------------| +| ContainerStatus status | 容器的状态信息 | +| map\ info | sandbox的额外信息,key是任意string,value是json格式的字符串,这些信息可以是任意调试内容。当verbose为true时info不能为空。(暂不支持配置) | #### UpdateContainerResources @@ -2224,24 +1437,10 @@ rpc UpdateContainerResources(UpdateContainerResourcesRequest) returns (UpdateCon #### 参数 - - - - - - - - - - - -

参数成员

-

描述

-

string container_id

-

容器id

-

LinuxContainerResources linux

-

linux资源配置信息

-
+| **参数成员** | **描述** | +|-------------------------------|-------------------| +| string container_id | 容器id | +| LinuxContainerResources linux | linux资源配置信息 | #### 返回值 @@ -2482,19 +1681,9 @@ rpc ContainerStats(ContainerStatsRequest) returns (ContainerStatsResponse) {} #### 返回值 - - - - - - - - -

返回值

-

描述

-

ContainerStats stats

-

容器信息。注:disk和inodes只支持oci格式镜像起的容器查询

-
+| **返回值** | **描述** | +|----------------------|---------------------------------------------------------| +| ContainerStats stats | 容器信息。
注:disk和inodes只支持oci格式镜像起的容器查询 | #### ListContainerStats @@ -2510,35 +1699,15 @@ rpc ListContainerStats(ListContainerStatsRequest) returns (ListContainerStatsRes #### 参数 - - - - - - - - -

参数成员

-

描述

-

ContainerStatsFilter filter

-

条件过滤参数

-
+| **参数成员** | **描述** | +|-----------------------------|--------------| +| ContainerStatsFilter filter | 条件过滤参数 | #### 返回值 - - - - - - - - -

返回值

-

描述

-

repeated ContainerStats stats

-

容器信息的列表。注:disk和inodes只支持oci格式镜像启动的容器查询

-
+| **返回值** | **描述** | +|-------------------------------|-----------------------------------------------------------------| +| repeated ContainerStats stats | 容器信息的列表。注:disk和inodes只支持oci格式镜像启动的容器查询 | #### UpdateRuntimeConfig @@ -2558,19 +1727,9 @@ rpc UpdateRuntimeConfig(UpdateRuntimeConfigRequest) returns (UpdateRuntimeConfig #### 参数 - - - - - - - - -

参数成员

-

描述

-

RuntimeConfig runtime_config

-

包含Runtime要配置的信息

-
+| **参数成员** | **描述** | +|------------------------------|-------------------------| +| RuntimeConfig runtime_config | 包含Runtime要配置的信息 | #### 返回值 @@ -2610,24 +1769,10 @@ rpc Status(StatusRequest) returns (StatusResponse) {}; #### 返回值 - - - - - - - - - - - -

返回值

-

描述

-

RuntimeStatus status

-

Runtime的状态

-

map<string, string> info

-

Runtime额外的信息,info的key为任意值,value为json格式,可包含任何debug信息;只有Verbose为true是才应该被赋值

-
+| **返回值** | **描述** | +|--------------------------|-------------------------------------------------------------------------------------------------------------| +| RuntimeStatus status | Runtime的状态 | +| map\ info | Runtime额外的信息,info的key为任意值,value为json格式,可包含任何debug信息;只有Verbose为true是才应该被赋值 | ### Image服务 @@ -2654,35 +1799,15 @@ rpc ListImages(ListImagesRequest) returns (ListImagesResponse) {} #### 参数 - - - - - - - - -

参数成员

-

描述

-

ImageSpec filter

-

筛选的镜像名称

-
+| **参数成员** | **描述** | +|------------------|----------------| +| ImageSpec filter | 筛选的镜像名称 | #### 返回值 - - - - - - - - -

返回值

-

描述

-

repeated Image images

-

镜像信息列表

-
+| **返回值** | **描述** | +|-----------------------|--------------| +| repeated Image images | 镜像信息列表 | #### ImageStatus @@ -2703,45 +1828,17 @@ rpc ImageStatus(ImageStatusRequest) returns (ImageStatusResponse) {} #### 参数 - - - - - - - - - - - -

参数成员

-

描述

-

ImageSpec image

-

镜像名称

-

bool verbose

-

查询额外信息,暂不支持,无额外信息返回

-
+| **参数成员** | **描述** | +|-----------------|----------------------------------------| +| ImageSpec image | 镜像名称 | +| bool verbose | 查询额外信息,暂不支持,无额外信息返回 | #### 返回值 - - - - - - - - - - - -

返回值

-

描述

-

Image image

-

镜像信息

-

map<string, string> info

-

镜像额外信息,暂不支持,无额外信息返回

-
+| **返回值** | **描述** | +|--------------------------|----------------------------------------| +| Image image | 镜像信息 | +| map\ info | 镜像额外信息,暂不支持,无额外信息返回 | #### PullImage @@ -2761,29 +1858,11 @@ rpc ImageStatus(ImageStatusRequest) returns (ImageStatusResponse) {} #### 参数 - - - - - - - - - - - - - - -

参数成员

-

描述

-

ImageSpec image

-

要下载的镜像名称

-

AuthConfig auth

-

下载私有镜像时的验证信息

-

PodSandboxConfig sandbox_config

-

在Pod上下文中下载镜像(暂不支持)

-
+| **参数成员** | **描述** | +|---------------------------------|-----------------------------------| +| ImageSpec image | 要下载的镜像名称 | +| AuthConfig auth | 下载私有镜像时的验证信息 | +| PodSandboxConfig sandbox_config | 在Pod上下文中下载镜像(暂不支持) | #### 返回值 @@ -2819,19 +1898,9 @@ rpc RemoveImage(RemoveImageRequest) returns (RemoveImageResponse) {} #### 参数 - - - - - - - - -

参数成员

-

描述

-

ImageSpec image

-

要删除的镜像名称或者ID

-
+| **参数成员** | **描述** | +|-----------------|------------------------| +| ImageSpec image | 要删除的镜像名称或者ID | #### 返回值 @@ -2859,19 +1928,9 @@ rpc ImageFsInfo(ImageFsInfoRequest) returns (ImageFsInfoResponse) {} #### 返回值 - - - - - - - - -

返回值

-

描述

-

repeated FilesystemUsage image_filesystems

-

镜像存储文件系统信息

-
+| **返回值** | **描述** | +|--------------------------------------------|----------------------| +| repeated FilesystemUsage image_filesystems | 镜像存储文件系统信息 | ### 约束 diff --git a/docs/zh/docs/Container/figures/zh-cn_image_0183048952.png b/docs/zh/docs/cloud/container_engine/isula_container_engine/figures/zh-cn_image_0183048952.png similarity index 100% rename from docs/zh/docs/Container/figures/zh-cn_image_0183048952.png rename to docs/zh/docs/cloud/container_engine/isula_container_engine/figures/zh-cn_image_0183048952.png diff --git "a/docs/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206.md" b/docs/zh/docs/cloud/container_engine/isula_container_engine/image_management.md similarity index 86% rename from "docs/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206.md" rename to docs/zh/docs/cloud/container_engine/isula_container_engine/image_management.md index fd948bc5d..df1489889 100644 --- "a/docs/zh/docs/Container/\351\225\234\345\203\217\347\256\241\347\220\206.md" +++ b/docs/zh/docs/cloud/container_engine/isula_container_engine/image_management.md @@ -1,26 +1,5 @@ # 镜像管理 - - -- [镜像管理](#镜像管理) - - [docker镜像管理](#docker镜像管理) - - [登录到镜像仓库](#登录到镜像仓库) - - [从镜像仓库退出登录](#从镜像仓库退出登录) - - [从镜像仓库拉取镜像](#从镜像仓库拉取镜像) - - [删除镜像](#删除镜像) - - [加载镜像](#加载镜像) - - [列出镜像](#列出镜像) - - [检视镜像](#检视镜像) - - [双向认证](#双向认证) - - [embedded镜像管理](#embedded镜像管理) - - [加载镜像](#加载镜像-1) - - [列出镜像](#列出镜像-1) - - [检视镜像](#检视镜像-1) - - [删除镜像](#删除镜像-1) - - - - ## docker镜像管理 ### 登录到镜像仓库 @@ -31,7 +10,7 @@ isula login命令用于登录到镜像仓库。登录成功后可以使用isula #### 用法 -``` +```sh isula login [OPTIONS] SERVER ``` @@ -41,7 +20,7 @@ login命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表1 #### 示例 -``` +```sh $ isula login -u abc my.csp-edge.com:5000 Login Succeeded @@ -55,7 +34,7 @@ isula logout命令用于从镜像仓库退出登录。退出登录成功后再 #### 用法 -``` +```sh isula logout SERVER ``` @@ -65,7 +44,7 @@ logout命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表 #### 示例 -``` +```sh $ isula logout my.csp-edge.com:5000 Logout Succeeded ``` @@ -78,7 +57,7 @@ Logout Succeeded #### 用法 -``` +```sh isula pull [OPTIONS] NAME[:TAG] ``` @@ -88,7 +67,7 @@ login命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表3 #### 示例 -``` +```sh $ isula pull localhost:5000/official/busybox Image "localhost:5000/official/busybox" pulling Image "localhost:5000/official/busybox@sha256:bf510723d2cd2d4e3f5ce7e93bf1e52c8fd76831995ac3bd3f90ecc866643aff" pulled @@ -102,7 +81,7 @@ Image "localhost:5000/official/busybox@sha256:bf510723d2cd2d4e3f5ce7e93bf1e52c8f #### 用法 -``` +```sh isula rmi [OPTIONS] IMAGE [IMAGE...] ``` @@ -112,7 +91,7 @@ rmi命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表4 r #### 示例 -``` +```sh $ isula rmi rnd-dockerhub.huawei.com/official/busybox Image "rnd-dockerhub.huawei.com/official/busybox" removed ``` @@ -125,7 +104,7 @@ tag命令用于添加镜像标签 #### 用法 -``` +```sh isula tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] ``` @@ -135,7 +114,7 @@ tag命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表8 t #### 示例 -``` +```sh $ isula tag busybox:latest test:latest ``` @@ -147,7 +126,7 @@ $ isula tag busybox:latest test:latest #### 用法 -``` +```sh isula load [OPTIONS] ``` @@ -157,7 +136,7 @@ load命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表5 #### 示例 -``` +```sh $ isula load -i busybox.tar Load image from "/root/busybox.tar" success ``` @@ -170,7 +149,7 @@ Load image from "/root/busybox.tar" success #### 用法 -``` +```sh isula images [OPTIONS] ``` @@ -180,7 +159,7 @@ images命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表 #### 示例 -``` +```sh $ isula images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest beae173ccac6 2021-12-31 03:19:41 1.184MB @@ -194,7 +173,7 @@ busybox latest beae173ccac6 202 #### 用法 -``` +```sh isula inspect [options] CONTAINER|IMAGE [CONTAINER|IMAGE...] ``` @@ -204,7 +183,7 @@ inspect命令支持参数请参见"附录 > 命令行参数说明" 章节的 " #### 示例 -``` +```sh $ isula inspect -f "{{json .image.id}}" rnd-dockerhub.huawei.com/official/busybox "e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b" ``` @@ -219,19 +198,18 @@ $ isula inspect -f "{{json .image.id}}" rnd-dockerhub.huawei.com/official/busybo 要支持该功能,需要镜像仓库支持该功能,同时isulad也需要做相应的配置: -1. 修改isulad的配置\(默认路径/etc/isulad/daemon.json\),将配置里的use-decrypted-key项配置为false。 -2. 需要将相关的证书放置到/etc/isulad/certs.d目录下对应的镜像仓库命名的文件夹下,证书具体的生成方法见docker的官方链接: - - [https://docs.docker.com/engine/security/certificates/](https://docs.docker.com/engine/security/certificates/) - - [https://docs.docker.com/engine/security/https/](https://docs.docker.com/engine/security/https/) - +1. 修改isulad的配置\(默认路径/etc/isulad/daemon.json\),将配置里的use-decrypted-key项配置为false。 +2. 需要将相关的证书放置到/etc/isulad/certs.d目录下对应的镜像仓库命名的文件夹下,证书具体的生成方法见docker的官方链接: + - [https://docs.docker.com/engine/security/certificates/](https://docs.docker.com/engine/security/certificates/) + - [https://docs.docker.com/engine/security/https/](https://docs.docker.com/engine/security/https/) -1. 执行systemctl restart isulad重启isulad。 +3. 执行systemctl restart isulad重启isulad。 #### 参数 可以在/etc/isulad/daemon.json中配置参数,也可以在启动isulad时携带参数: -``` +```sh isulad --use-decrypted-key=false ``` @@ -239,7 +217,7 @@ isulad --use-decrypted-key=false 配置use-decrypted-key参数为false -``` +```sh $ cat /etc/isulad/daemon.json { "group": "isulad", @@ -281,7 +259,7 @@ $ cat /etc/isulad/daemon.json 将证书放到对应的目录下 -``` +```sh $ pwd /etc/isulad/certs.d/my.csp-edge.com:5000 $ ls @@ -290,13 +268,13 @@ ca.crt tls.cert tls.key 重启isulad -``` +```sh $ systemctl restart isulad ``` 执行pull命令从仓库下载镜像 -``` +```sh $ isula pull my.csp-edge.com:5000/busybox Image "my.csp-edge.com:5000/busybox" pulling Image "my.csp-edge.com:5000/busybox@sha256:f1bdc62115dbfe8f54e52e19795ee34b4473babdeb9bc4f83045d85c7b2ad5c0" pulled @@ -311,9 +289,10 @@ Image "my.csp-edge.com:5000/busybox@sha256:f1bdc62115dbfe8f54e52e19795ee34b4473b #### 用法 -``` +```sh isula import file REPOSITORY[:TAG] ``` + 导入成功后打印的字符串是导入的rootfs生成的镜像id #### 参数 @@ -322,7 +301,7 @@ import命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表 #### 示例 -``` +```sh $ isula import busybox.tar test sha256:441851e38dad32478e6609a81fac93ca082b64b366643bafb7a8ba398301839d $ isula images @@ -338,7 +317,7 @@ test latest 441851e38dad 2020-09-01 11:14:35 1.168 MB #### 用法 -``` +```sh isula export [OPTIONS] [ID|NAME] ``` @@ -348,7 +327,7 @@ export命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表 #### 示例 -``` +```sh $ isula run -tid --name container_test test sh d7e601c2ef3eb8d378276d2b42f9e58a2f36763539d3bfcaf3a0a77dc668064b $ isula export -o rootfs.tar d7e601c @@ -356,7 +335,6 @@ $ ls rootfs.tar ``` - ## embedded镜像管理 ### 加载镜像 @@ -367,7 +345,7 @@ rootfs.tar #### 用法 -``` +```sh isula load [OPTIONS] --input=FILE --type=TYPE ``` @@ -377,7 +355,7 @@ load命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表5 #### 示例 -``` +```sh $ isula load -i test.manifest --type embedded Load image from "/root/work/bugfix/tmp/ci_testcase_data/embedded/img/test.manifest" success ``` @@ -390,7 +368,7 @@ Load image from "/root/work/bugfix/tmp/ci_testcase_data/embedded/img/test.manife #### 用法 -``` +```sh isula images [OPTIONS] ``` @@ -400,7 +378,7 @@ images命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表 #### 示例 -``` +```sh $ isula images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest beae173ccac6 2021-12-31 03:19:41 1.184MB @@ -414,7 +392,7 @@ busybox latest beae173ccac6 202 #### 用法 -``` +```sh isula inspect [options] CONTAINER|IMAGE [CONTAINER|IMAGE...] ``` @@ -424,7 +402,7 @@ inspect命令支持参数请参见"附录 > 命令行参数说明" 章节的 " #### 示例 -``` +```sh $ isula inspect -f "{{json .created}}" test:v1 "2018-03-01T15:55:44.322987811Z" ``` @@ -437,7 +415,7 @@ $ isula inspect -f "{{json .created}}" test:v1 #### 用法 -``` +```sh isula rmi [OPTIONS] IMAGE [IMAGE...] ``` @@ -447,7 +425,7 @@ rmi命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表4 r #### 示例 -``` +```sh $ isula rmi test:v1 Image "test:v1" removed ``` @@ -460,7 +438,7 @@ Image "test:v1" removed #### 用法 -``` +```sh isula tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] ``` @@ -470,7 +448,7 @@ tag命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表8 t #### 示例 -``` +```sh $ isula tag test:v1 test:v2 ``` @@ -482,7 +460,7 @@ $ isula tag test:v1 test:v2 #### 用法 -``` +```sh isula export [command options] [ID|NAME] ``` @@ -492,6 +470,6 @@ export命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表 #### 示例 -``` +```sh $ isula export -o test.tar containername ``` diff --git "a/docs/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256.md" b/docs/zh/docs/cloud/container_engine/isula_container_engine/installation_configuration.md similarity index 35% rename from "docs/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256.md" rename to docs/zh/docs/cloud/container_engine/isula_container_engine/installation_configuration.md index 8f36bbb05..9758f2a60 100644 --- "a/docs/zh/docs/Container/\345\256\211\350\243\205\344\270\216\351\205\215\347\275\256.md" +++ b/docs/zh/docs/cloud/container_engine/isula_container_engine/installation_configuration.md @@ -1,15 +1,9 @@ # 安装与配置 -本章介绍iSulad的安装、安装后配置,以及升级和卸载的方法。 ->![](./public_sys-resources/icon-note.gif) **说明:** ->iSulad的安装、升级、卸载均需要使用root权限。 - - -- [安装与配置](#安装与配置) - - [安装方法](#安装方法) - - [配置方法](#配置方法) - - +本章介绍iSulad的安装、安装后配置,以及升级和卸载的方法。 +> [!NOTE]说明 +> +> iSulad的安装、升级、卸载均需要使用root权限。 ## 安装方法 @@ -17,16 +11,15 @@ iSulad可以通过yum或rpm命令两种方式安装,由于yum会自动安装 这里给出两种安装方式的操作方法。 -- (推荐)使用yum安装iSulad,参考命令如下: +- (推荐)使用yum安装iSulad,参考命令如下: - ``` + ```bash # sudo yum install -y iSulad ``` +- 使用rpm安装iSulad,需要下载iSulad及其所有依赖库的RPM包,然后手动安装。安装单个iSulad的RPM包(依赖包安装方式相同),参考命令如下: -- 使用rpm安装iSulad,需要下载iSulad及其所有依赖的RPM包,然后手动安装。安装单个iSulad的RPM包(依赖包安装方式相同),参考命令如下: - - ``` + ```bash # sudo rpm -ihv iSulad-xx.xx.xx-xx.xxx.aarch64.rpm ``` @@ -38,14 +31,15 @@ iSulad 安装完成后,可以根据需要进行相关配置。 轻量级容器引擎(iSulad)服务端daemon为isulad,isulad可以通过配置文件进行配置,也可以通过命令行的方式进行配置,例如:isulad --xxx,优先级从高到低是:命令行方式\>配置文件\>代码中默认配置。 ->![](./public_sys-resources/icon-note.gif) **说明:** ->如果采用systemd管理iSulad进程,修改/etc/sysconfig/iSulad文件中的OPTIONS字段,等同于命令行方式进行配置。 +> [!NOTE]说明 +> +> 如果采用systemd管理iSulad进程,修改/etc/sysconfig/iSulad文件中的OPTIONS字段,等同于命令行方式进行配置。 -- **命令行方式** +- **命令行方式** 在启动服务的时候,直接通过命令行进行配置。其配置选项可通过以下命令查阅: - ``` + ```bash # isulad --help isulad @@ -68,14 +62,14 @@ iSulad 安装完成后,可以根据需要进行相关配置。 --help Show help --hook-spec Default hook spec file applied to all containers -H, --host The socket name used to create gRPC server - --image-layer-check Check layer intergrity when needed + --image-layer-check Check layer integrity when needed --insecure-registry Disable TLS verification for the given registry --insecure-skip-verify-enforce Force to skip the insecure verify(default false) --log-driver Set daemon log driver, such as: file -l, --log-level Set log level, the levels can be: FATAL ALERT CRIT ERROR WARN NOTICE INFO DEBUG TRACE --log-opt Set daemon log driver options, such as: log-path=/tmp/logs/ to set directory where to store daemon logs --native.umask Default file mode creation mask (umask) for containers - --network-plugin Set network plugin, default is null, suppport null and cni + --network-plugin Set network plugin, default is null, support null and cni -p, --pidfile Save pid into this file --pod-sandbox-image The image whose network/ipc namespaces containers in each pod will use. (default "pause-${machine}:3.0") --registry-mirrors Registry to be prepended when pulling unqualified images, can be specified multiple times @@ -97,128 +91,127 @@ iSulad 安装完成后,可以根据需要进行相关配置。 示例: 启动isulad,并将日志级别调整成DEBUG - ``` + ```bash # isulad -l DEBUG ``` - -- **配置文件方式** +- **配置文件方式** isulad配置文件为/etc/isulad/daemon.json和/etc/isulad/daemon_constants.json,各配置字段说明如下: 配置文件/etc/isulad/daemon.json -

配置参数

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

配置参数

配置文件示例

+

配置文件示例

参数解释

+

参数解释

备注

+

备注

-e, --engine

+

-e, --engine

"engine": "lcr"

+

"engine": "lcr"

iSulad的运行时,默认是lcr

+

iSulad的运行时,默认是lcr

+

-G, --group

+

-G, --group

"group": "isulad"

+

"group": "isulad"

socket所属组

+

socket所属组

+

--hook-spec

+

--hook-spec

"hook-spec": "/etc/default/isulad/hooks/default.json"

+

"hook-spec": "/etc/default/isulad/hooks/default.json"

针对所有容器的默认钩子配置文件

+

针对所有容器的默认钩子配置文件

+

-H, --host

+

-H, --host

"hosts": "unix:///var/run/isulad.sock"

+

"hosts": "unix:///var/run/isulad.sock"

通信方式

+

通信方式

除本地socket外,还支持tcp://ip:port方式,port范围(0-65535,排除被占用端口)

+

除本地socket外,还支持tcp://ip:port方式,port范围(0-65535,排除被占用端口)

--log-driver

+

--log-driver

"log-driver": "file"

+

"log-driver": "file"

日志驱动配置

+

日志驱动配置

+

-l, --log-level

+

-l, --log-level

"log-level": "ERROR"

+

"log-level": "ERROR"

设置日志输出级别

+

设置日志输出级别

+

--log-opt

+

--log-opt

"log-opts": {

+

"log-opts": {

"log-file-mode": "0600",

"log-path": "/var/lib/isulad",

"max-file": "1",

"max-size": "30KB"

}

日志相关的配置

+

日志相关的配置

可以指定max-file,max-size,log-path。max-file指日志文件个数;max-size指日志触发防爆的阈值,若max-file为1,max-size失效;log-path指定日志文件存储路径;log-file-mode用于设置日志文件的读写权限,格式要求必须为八进制格式,如0666。

+

可以指定max-file,max-size,log-path。max-file指日志文件个数;max-size指日志触发防爆的阈值,若max-file为1,max-size失效;log-path指定日志文件存储路径;log-file-mode用于设置日志文件的读写权限,格式要求必须为八进制格式,如0666。

--container-log-driver

+

--container-log-driver

"container-log": {

+

"container-log": {

"driver": "json-file"

}

容器串口日志驱动默认配置

+

容器串口日志驱动默认配置

指定所有容器的默认串口日志的驱动

+

指定所有容器的默认串口日志的驱动

--start-timeout

+

--start-timeout

"start-timeout": "2m"

+

"start-timeout": "2m"

启动容器的耗时

+

启动容器的耗时

+

+

"default-runtime": "lcr"

+

"default-runtime": "lcr"

创建容器时的runtime运行时,默认是lcr

+

创建容器时的runtime运行时,默认是lcr

当命令行和配置文件均未指定时,默认为lcr,runtime的三种指定方式优先级:命令行>配置文件>默认lcr,当前支持lcr、kata-runtime。

+

当命令行和配置文件均未指定时,默认为lcr,runtime的三种指定方式优先级:命令行>配置文件>默认lcr,当前支持lcr、kata-runtime。

+

"runtimes":  {
+    
"runtimes":  {
         "kata-runtime": {
           "path": "/usr/bin/kata-runtime",
           "runtime-args": [
@@ -228,203 +221,203 @@ iSulad 安装完成后,可以根据需要进行相关配置。
         }
     }

启动容器时,通过此字段指定多runtimes配置,在此集合中的元素均为有效的启动容器的runtime运行时。

+

启动容器时,通过此字段指定多runtimes配置,在此集合中的元素均为有效的启动容器的runtime运行时。

容器的runtime白名单,在此集合中的自定义runtime才是有效的。示例为以kata-runtime为例的配置。

+

容器的runtime白名单,在此集合中的自定义runtime才是有效的。示例为以kata-runtime为例的配置。

-p, --pidfile

+

-p, --pidfile

"pidfile": "/var/run/isulad.pid"

+

"pidfile": "/var/run/isulad.pid"

保存pid的文件

+

保存pid的文件

当启动一个容器引擎的时候不需要配置,当需要启动两个以上的容器引擎时才需要配置。

+

当启动一个容器引擎的时候不需要配置,当需要启动两个以上的容器引擎时才需要配置。

-g, --graph

+

-g, --graph

"graph": "/var/lib/isulad"

+

"graph": "/var/lib/isulad"

iSulad运行时的根目录

+

iSulad运行时的根目录

-S, --state

+

-S, --state

"state": "/var/run/isulad"

+

"state": "/var/run/isulad"

执行文件的根目录

+

执行文件的根目录

--storage-driver

+

--storage-driver

"storage-driver": "overlay2"

+

"storage-driver": "overlay2"

镜像存储驱动,默认为overlay2

+

镜像存储驱动,默认为overlay2

当前只支持overlay2

+

当前只支持overlay2

-s, --storage-opt

+

-s, --storage-opt

"storage-opts": [ "overlay2.override_kernel_check=true" ]

+

"storage-opts": [ "overlay2.override_kernel_check=true" ]

镜像存储驱动配置选项

+

镜像存储驱动配置选项

可使用的选项为:

+

可使用的选项为:

overlay2.override_kernel_check=true # 忽略内核版本检查
     overlay2.size=${size} # 设置rootfs quota限额为${size}大小
     overlay2.basesize=${size} #等价于overlay2.size

--registry-mirrors

+

--registry-mirrors

"registry-mirrors": [ "docker.io" ]

+

"registry-mirrors": [ "docker.io" ]

镜像仓库地址

+

镜像仓库地址

+

--insecure-registry

+

--insecure-registry

"insecure-registries": [ ]

+

"insecure-registries": [ ]

不使用TLS校验的镜像仓库

+

不使用TLS校验的镜像仓库

+

--native.umask

+

--native.umask

"native.umask": "secure"

+

"native.umask": "secure"

容器umask策略,默认"secure",normal为不安全配置

+

容器umask策略,默认"secure",normal为不安全配置

设置容器umask值。

+

设置容器umask值。

支持配置空字符(使用缺省值0027)、"normal"、"secure":

normal    # 启动的容器umask值为0022
     secure    # 启动的容器umask值为0027(缺省值)

--pod-sandbox-image

+

--pod-sandbox-image

"pod-sandbox-image": "rnd-dockerhub.huawei.com/library/pause-aarch64:3.0"

+

"pod-sandbox-image": "rnd-dockerhub.huawei.com/library/pause-aarch64:3.0"

pod默认使用镜像,默认为"rnd-dockerhub.huawei.com/library/pause-${machine}:3.0"

+

pod默认使用镜像,默认为"rnd-dockerhub.huawei.com/library/pause-${machine}:3.0"

+

--network-plugin

+

--network-plugin

"network-plugin": ""

+

"network-plugin": ""

指定网络插件,默认为空字符,表示无网络配置,创建的sandbox只有loop网卡。

+

指定网络插件,默认为空字符,表示无网络配置,创建的sandbox只有loop网卡。

支持cni和空字符,其他非法值会导致isulad启动失败。

+

支持cni和空字符,其他非法值会导致isulad启动失败。

--cni-bin-dir

+

--cni-bin-dir

"cni-bin-dir": ""

+

"cni-bin-dir": ""

指定cni插件依赖的二进制的存储位置

+

指定cni插件依赖的二进制的存储位置

默认为/opt/cni/bin

+

默认为/opt/cni/bin

--cni-conf-dir

+

--cni-conf-dir

"cni-conf-dir": ""

+

"cni-conf-dir": ""

指定cni网络配置文件的存储位置

+

指定cni网络配置文件的存储位置

默认为/etc/cni/net.d

+

默认为/etc/cni/net.d

--image-layer-check=false

+

--image-layer-check=false

"image-layer-check": false

+

"image-layer-check": false

开启镜像层完整性检查功能,设置为true;关闭该功能,设置为false。默认为关闭。

+

开启镜像层完整性检查功能,设置为true;关闭该功能,设置为false。默认为关闭。

isulad启动时会检查镜像层的完整性,如果镜像层被破坏,则相关的镜像不可用。isulad进行镜像完整性校验时,无法校验内容为空的文件和目录,以及链接文件。因此若镜像因掉电导致上述类型文件丢失,isulad的镜像数据完整性校验可能无法识别。isulad版本变更时需要检查是否支持该参数,如果不支持,需要从配置文件中删除。

+

isulad启动时会检查镜像层的完整性,如果镜像层被破坏,则相关的镜像不可用。isulad进行镜像完整性校验时,无法校验内容为空的文件和目录,以及链接文件。因此若镜像因掉电导致上述类型文件丢失,isulad的镜像数据完整性校验可能无法识别。isulad版本变更时需要检查是否支持该参数,如果不支持,需要从配置文件中删除。

--insecure-skip-verify-enforce=false

+

--insecure-skip-verify-enforce=false

"insecure-skip-verify-enforce": false

+

"insecure-skip-verify-enforce": false

Bool类型,是否强制跳过证书的主机名/域名验证,默认为false。当设置为true时,为不安全配置,会跳过证书的主机名/域名验证

+

Bool类型,是否强制跳过证书的主机名/域名验证,默认为false。当设置为true时,为不安全配置,会跳过证书的主机名/域名验证

默认为false(不跳过),注意:因isulad使用的yajl json 解析库限制,若在/etc/isulad/daemon.json配置文件中配置非Bool类型的其他符合json格式的值时,isulad将使用缺省值false。

+

默认为false(不跳过),注意:因isulad使用的yajl json 解析库限制,若在/etc/isulad/daemon.json配置文件中配置非Bool类型的其他符合json格式的值时,isulad将使用缺省值false。

--use-decrypted-key=true

+

--use-decrypted-key=true

"use-decrypted-key": true

+

"use-decrypted-key": true

Bool类型,指定是否使用不加密的私钥。指定为true,表示使用不加密的私钥;指定为false,表示使用的为加密后的私钥,即需要进行双向认证。

+

Bool类型,指定是否使用不加密的私钥。指定为true,表示使用不加密的私钥;指定为false,表示使用的为加密后的私钥,即需要进行双向认证。

默认配置为true(使用不加密的私钥),注意:因isulad使用的yajl json 解析库限制,若在/etc/isulad/daemon.json配置文件中配置非Bool类型的其他符合json格式的值时,isulad将使用缺省值true。

+

默认配置为true(使用不加密的私钥),注意:因isulad使用的yajl json 解析库限制,若在/etc/isulad/daemon.json配置文件中配置非Bool类型的其他符合json格式的值时,isulad将使用缺省值true。

--tls

+

--tls

"tls":false

+

"tls":false

Bool类型,是否使用TLS

+

Bool类型,是否使用TLS

缺省值为false, 仅用于-H tcp://IP:PORT方式

+

缺省值为false, 仅用于-H tcp://IP:PORT方式

--tlsverify

+

--tlsverify

"tlsverify":false

+

"tlsverify":false

Bool类型,是否使用TLS,并验证远程访问

+

Bool类型,是否使用TLS,并验证远程访问

仅用于-H tcp://IP:PORT方式

+

仅用于-H tcp://IP:PORT方式

--tlscacert

+

--tlscacert

--tlscert

--tlskey

"tls-config": {

+

"tls-config": {

"CAFile": "/root/.iSulad/ca.pem",

"CertFile": "/root/.iSulad/server-cert.pem",

"KeyFile":"/root/.iSulad/server-key.pem"

}

TLS证书相关的配置

+

TLS证书相关的配置

仅用于-H tcp://IP:PORT方式

+

仅用于-H tcp://IP:PORT方式

--authorization-plugin

+

--authorization-plugin

"authorization-plugin": "authz-broker"

+

"authorization-plugin": "authz-broker"

用户权限认证插件

+

用户权限认证插件

当前只支持authz-broker

+

当前只支持authz-broker

--cgroup-parent

+

--cgroup-parent

"cgroup-parent": "lxc/mycgroup"

+

"cgroup-parent": "lxc/mycgroup"

字符串类型,容器默认cgroup父路径

+

字符串类型,容器默认cgroup父路径

指定daemon端容器默认的cgroup父路径,如果客户端指定了--cgroup-parent,以客户端参数为准。

+

指定daemon端容器默认的cgroup父路径,如果客户端指定了--cgroup-parent,以客户端参数为准。

注意:如果启了一个容器A,然后启一个容器B,容器B的cgroup父路径指定为容器A的cgroup路径,在删除容器的时候需要先删除容器B再删除容器A,否则会导致cgroup资源残留。

--default-ulimits

+

--default-ulimits

"default-ulimits": {

+

"default-ulimits": {

"nofile": {

"Name": "nofile",

"Hard": 6400,

@@ -432,68 +425,67 @@ iSulad 安装完成后,可以根据需要进行相关配置。

}

}

ulimit指定限制的类型,soft值及hard值

+

ulimit指定限制的类型,soft值及hard值

指定限制的资源类型,如“nofile”。两个字段名字必须相同,即都为nofile,否则会报错。Hard指定的值需要大于等于Soft'。如果Hard字段或者Soft字段未设置,则默认该字段默认为0。

+

指定限制的资源类型,如“nofile”。两个字段名字必须相同,即都为nofile,否则会报错。Hard指定的值需要大于等于Soft'。如果Hard字段或者Soft字段未设置,则默认该字段默认为0。

--websocket-server-listening-port

+

--websocket-server-listening-port

"websocket-server-listening-port": 10350

+

"websocket-server-listening-port": 10350

设置CRI websocket流式服务侦听端口,默认端口号10350

+

设置CRI websocket流式服务侦听端口,默认端口号10350

指定CRI websocket流式服务侦听端,如果客户端指定了

+

指定CRI websocket流式服务侦听端,如果客户端指定了

--websocket-server-listening-port,以客户端参数为准。端口范围1024-49151

+

"cri-runtimes": {

+

"cri-runtimes": {

"kata": "io.containerd.kata.v2"

}

自定义cri runtimes的映射

+

自定义cri runtimes的映射

isulad通过自定义的cri runtimes映射,可以将runtimeclass转换为对应的runtime。

+

isulad通过自定义的cri runtimes映射,可以将runtimeclass转换为对应的runtime。

- 配置文件/etc/isulad/daemon_constants.json -

配置参数

+ - - - - - - - - - - - @@ -501,7 +493,7 @@ iSulad 安装完成后,可以根据需要进行相关配置。 示例: - ``` + ```bash # cat /etc/isulad/daemon.json { "group": "isulad", @@ -554,75 +546,75 @@ iSulad 安装完成后,可以根据需要进行相关配置。 ``` - >![](./public_sys-resources/icon-notice.gif) **须知:** - >默认配置文件/etc/isulad/daemon.json仅供参考,请根据实际需要进行配置 - + > [!TIP]须知 + > + > 默认配置文件/etc/isulad/daemon.json仅供参考,请根据实际需要进行配置。 ### 存储说明 -

配置参数

配置文件示例

+

配置文件示例

参数解释

+

参数解释

备注

+

备注

不支持

+

不支持

"default-host": "docker.io"

+

"default-host": "docker.io"

如果镜像名以该镜像仓库名为前缀,则保存和显示时会去除该镜像仓库名前缀

+

如果镜像名以该镜像仓库名为前缀,则保存和显示时会去除该镜像仓库名前缀

一般情况下该参数不需要修改

+

一般情况下该参数不需要修改

不支持

+

不支持

"registry-transformation": {

+

"registry-transformation": {

"docker.io": "registry-1.docker.io",

"index.docker.io": "registry-1.docker.io"

}

"key":"value"格式,表示从key指定的仓库拉取镜像时实际从value指定的仓库拉取镜像

+

"key":"value"格式,表示从key指定的仓库拉取镜像时实际从value指定的仓库拉取镜像

一般情况下该参数不需要修改

+

一般情况下该参数不需要修改

文件名

+ - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -632,50 +624,48 @@ iSulad 安装完成后,可以根据需要进行相关配置。 ### 约束限制 -- 高并发场景(并发启动200容器)下,glibc的内存管理机制会导致内存空洞以及虚拟内存较大(例如10GB)的问题。该问题是高并发场景下glibc内存管理机制的限制,而不是内存泄露,不会导致内存消耗无限增大。可以通过设置MALLOC\_ARENA\_MAX环境变量来减少虚拟内存的问题,而且可以增大减少物理内存的概率。但是这个环境变量会导致iSulad的并发性能下降,需要用户根据实际情况做配置。 +- 高并发场景(并发启动200容器)下,glibc的内存管理机制会导致内存空洞以及虚拟内存较大(例如10GB)的问题。该问题是高并发场景下glibc内存管理机制的限制,而不是内存泄露,不会导致内存消耗无限增大。可以通过设置MALLOC\_ARENA\_MAX环境变量来减少虚拟内存的问题,而且可以增大减少物理内存的概率。但是这个环境变量会导致iSulad的并发性能下降,需要用户根据实际情况做配置。 - ``` 参考实践情况,平衡性能和内存,可以设置MALLOC_ARENA_MAX为4。(在arm64服务器上面对iSulad的性能影响在10%以内) 配置方法: 1. 手动启动iSulad的场景,可以直接export MALLOC_ARENA_MAX=4,然后再启动iSulad即可。 2. systemd管理iSulad的场景,可以修改/etc/sysconfig/iSulad,增加一条MALLOC_ARENA_MAX=4即可。 - ``` -- 为daemon指定各种运行目录时的注意事项 +- 为daemon指定各种运行目录时的注意事项 以--root为例,当使用/new/path/作为daemon新的Root Dir时,如果/new/path/下已经存在文件,且目录或文件名与isulad需要使用的目录或文件名冲突(例如:engines、mnt等目录)时,isulad可能会更新原有目录或文件的属性,包括属主、权限等为自己的属主和权限。 所以,用户需要明白重新指定各种运行目录和文件,会对冲突目录、文件属性的影响。建议用户指定的新目录或文件为isulad专用,避免冲突导致的文件属性变化以及带来的安全问题。 -- 日志文件管理: +- 日志文件管理: - >![](./public_sys-resources/icon-notice.gif) **须知:** - >日志功能对接: iSulad由systemd管理,日志也由systemd管理,然后传输给rsyslogd。rsyslog默认会对写日志速度有限制,可以通过修改/etc/rsyslog.conf文件,增加"$imjournalRatelimitInterval 0"配置项,然后重启rsyslogd的服务即可。 + > [!TIP]须知 + > + > 日志功能对接: iSulad由systemd管理,日志也由systemd管理,然后传输给rsyslogd。rsyslog默认会对写日志速度有限制,可以通过修改/etc/rsyslog.conf文件,增加"$imjournalRatelimitInterval 0"配置项,然后重启rsyslogd的服务即可。 -- 命令行参数解析限制 +- 命令行参数解析限制 使用iSulad命令行接口时,其参数解析方式与docker略有不同,对于命令行中带参数的flag,不管使用长flag还是短flag,只会将该flag后第一个空格或与flag直接相连接的'='后的字符串作为flag的参数,具体如下: - 1. 使用短flag时,与“-”连接的字符串中的每个字符都被当作短flag(当有=号时,=号后的字符串当成=号前的短flag的参数)。 + 1. 使用短flag时,与“-”连接的字符串中的每个字符都被当作短flag(当有=号时,=号后的字符串当成=号前的短flag的参数)。 isula run -du=root busybox 等价于 isula run -du root busybox 或 isula run -d -u=root busybox 或 isula run -d -u root busybox ,当使用isula run -du:root时,由于-:不是有效的短flag,因此会报错。前述的命令行也等价于isula run -ud root busybox,但不推荐这种使用方式,可能带来语义困扰。 - 1. 使用长flag时,与“--”连接的字符串作为一个整体当成长flag,若包含=号,则=号前的字符串为长flag,=号后的为参数。 + 2. 使用长flag时,与“--”连接的字符串作为一个整体当成长flag,若包含=号,则=号前的字符串为长flag,=号后的为参数。 - ``` + ```bash isula run --user=root busybox ``` 等价于 - ``` + ```bash isula run --user root busybox ``` - -- 启动一个isulad容器,不能够以非root用户进行isula run -i/-t/-ti以及isula attach/exec操作。 -- isulad的临时文件存放路径默认为/var/lib/isulad/isulad_tmpdir,如果更换了isulad的根目录,则路径为`$isulad_root/isulad_tmpdir`。如果需要修改isulad存放临时文件的目录,可以通过在启动isulad前配置ISULAD_TMPDIR环境变量来实现,isulad启动时会进行检查,如果发现配置了ISULAD_TMPDIR环境变量,则会将`$ISULAD_TMPDIR/isulad_tmpdir`目录作为临时文件存放的路径,注意`$ISULAD_TMPDIR`下面的不要存放名称为isulad_tmpdir的文件/文件夹等,因为isulad启动时会递归删除`$ISULAD_TMPDIR/isulad_tmpdir`目录来防止数据残留。同时请确保`$ISULAD_TMPDIR`路径只有root用户可以访问,防止其他用户操作导致的安全问题。 +- 启动一个isulad容器,不能够以非root用户进行isula run -i/-t/-ti以及isula attach/exec操作。 +- isulad的临时文件存放路径默认为/var/lib/isulad/isulad_tmpdir,如果更换了isulad的根目录,则路径为`$isulad_root/isulad_tmpdir`。如果需要修改isulad存放临时文件的目录,可以通过在启动isulad前配置ISULAD_TMPDIR环境变量来实现,isulad启动时会进行检查,如果发现配置了ISULAD_TMPDIR环境变量,则会将`$ISULAD_TMPDIR/isulad_tmpdir`目录作为临时文件存放的路径,注意`$ISULAD_TMPDIR`下面的不要存放名称为isulad_tmpdir的文件/文件夹等,因为isulad启动时会递归删除`$ISULAD_TMPDIR/isulad_tmpdir`目录来防止数据残留。同时请确保`$ISULAD_TMPDIR`路径只有root用户可以访问,防止其他用户操作导致的安全问题。 ### DAEMON多端口的绑定 @@ -687,7 +677,7 @@ daemon端可以绑定多个unix socket或者tcp端口,并在这些端口上侦 用户可以在/etc/isulad/daemon.json文件的hosts字段配置一个或者多个端口。当然用户也可以不指定hosts。 -``` +```conf { "hosts": [ "unix:///var/run/isulad.sock", @@ -699,7 +689,7 @@ daemon端可以绑定多个unix socket或者tcp端口,并在这些端口上侦 用户也可以在/etc/sysconfig/iSulad中通过-H或者--host配置端口。用户同样可以不指定hosts。 -``` +```conf OPTIONS='-H unix:///var/run/isulad.sock --host tcp://127.0.0.1:6789' ``` @@ -707,27 +697,27 @@ OPTIONS='-H unix:///var/run/isulad.sock --host tcp://127.0.0.1:6789' ## 限制 -- 用户不可以在/etc/isulad/daemon.json和/etc/sysconfig/iSulad两个文件中同时指定hosts,如果这样做将会出现错误,isulad无法正常启动; +- 用户不可以在/etc/isulad/daemon.json和/etc/sysconfig/iSulad两个文件中同时指定hosts,如果这样做将会出现错误,isulad无法正常启动; - ``` + ```text unable to configure the isulad with file /etc/isulad/daemon.json: the following directives are specified both as a flag and in the configuration file: hosts: (from flag: [unix:///var/run/isulad.sock tcp://127.0.0.1:6789], from file: [unix:///var/run/isulad.sock tcp://localhost:5678 tcp://127.0.0.1:6789]) ``` -- 若指定的host是unix socket,则必须是合法的unix socket,需要以"unix://"开头,后跟合法的socket绝对路径; -- 若指定的host是tcp端口,则必须是合法的tcp端口,需要以"tcp://"开头,后跟合法的IP地址和端口,IP地址可以为localhost; -- 可以指定至多10个有效的端口,超过10个则会出现错误,isulad无法正常启动。 +- 若指定的host是unix socket,则必须是合法的unix socket,需要以"unix://"开头,后跟合法的socket绝对路径; +- 若指定的host是tcp端口,则必须是合法的tcp端口,需要以"tcp://"开头,后跟合法的IP地址和端口,IP地址可以为localhost; +- 可以指定至多10个有效的端口,超过10个则会出现错误,isulad无法正常启动。 ### 配置TLS认证与开启远程访问 #### 描述 -iSulad采用C/S模式进行设计,在默认情况,iSulad守护进程isulad只侦听本地/var/run/isulad.sock,因此只能在本地通过客户端isula执行相关命令操作容器。为了能使isula可以远程访问容器,isulad守护进程需要通过tcp:ip的方式侦听远程访问的端口。然而,仅通过简单配置tcp ip:port进行侦听,这样会导致所有的ip都可以通过调用isula -H tcp://:port与isulad通信,容易导致安全问题,因此推荐使用较安全版本的TLS\(**Transport Layer Security - 安全传输层协议**)方式进行远程访问。 +iSulad采用C/S模式进行设计,在默认情况,iSulad守护进程isulad只侦听本地/var/run/isulad.sock,因此只能在本地通过客户端isula执行相关命令操作容器。为了能使isula可以远程访问容器,isulad守护进程需要通过tcp:ip的方式侦听远程访问的端口。然而,仅通过简单配置tcp ip:port进行侦听,这样会导致所有的ip都可以通过调用`isula -H tcp://:port`与isulad通信,容易导致安全问题,因此推荐使用较安全版本的TLS(**Transport Layer Security - 安全传输层协议**)方式进行远程访问。 #### 生成TLS证书 -- 明文私钥和证书生成方法示例 +- 明文私钥和证书生成方法示例 - ``` + ```bash #!/bin/bash set -e echo -n "Enter pass phrase:" @@ -768,10 +758,9 @@ iSulad采用C/S模式进行设计,在默认情况,iSulad守护进程isulad chmod -v 0444 ca.pem server-cert.pem cert.pem ``` +- 加密私钥和证书请求文件生成方法示例 -- 加密私钥和证书请求文件生成方法示例 - - ``` + ```bash #!/bin/bash echo -n "Enter public network ip:" @@ -813,17 +802,16 @@ iSulad采用C/S模式进行设计,在默认情况,iSulad守护进程isulad rm -f ca-key.pem ca.srl client.csr extfile.cnf server.csr ``` - #### 接口 -``` +```conf { "tls": true, "tls-verify": true, "tls-config": { - "CAFile": "/root/.iSulad/ca.pem", - "CertFile": "/root/.iSulad/server-cert.pem", - "KeyFile":"/root/.iSulad/server-key.pem" + "CAFile": "/root/.iSulad/ca.pem", + "CertFile": "/root/.iSulad/server-cert.pem", + "KeyFile":"/root/.iSulad/server-key.pem" } } ``` @@ -832,35 +820,35 @@ iSulad采用C/S模式进行设计,在默认情况,iSulad守护进程isulad 服务端支持的模式如下: -- 模式1(验证客户端):tlsverify, tlscacert, tlscert, tlskey。 -- 模式2(不验证客户端):tls, tlscert, tlskey。 +- 模式1(验证客户端):tlsverify, tlscacert, tlscert, tlskey。 +- 模式2(不验证客户端):tls, tlscert, tlskey。 客户端支持的模式如下: -- 模式1\(使用客户端证书进行身份验证,并根据给定的CA验证服务器\):tlsverify, tlscacert, tlscert, tlskey。 -- 模式2\(验证服务器\):tlsverify, tlscacert。 +- 模式1\(使用客户端证书进行身份验证,并根据给定的CA验证服务器\):tlsverify, tlscacert, tlscert, tlskey。 +- 模式2\(验证服务器\):tlsverify, tlscacert。 如果需要采用双向认证方式进行通讯,则服务端采用模式1,客户端采用模式1; 如果需要采用单向认证方式进行通讯,则服务端采用模式2,客户端采用模式2。 ->![](./public_sys-resources/icon-notice.gif) **须知:** ->- 采用RPM安装方式时,服务端配置可通过/etc/isulad/daemon.json以及/etc/sysconfig/iSulad配置修改 ->- 相比非认证或者单向认证方式,双向认证具备更高的安全性,推荐使用双向认证的方式进行通讯 ->- GRPC开源组件日志不由iSulad进行接管,如果需要查看GRPC相关日志,请按需设置GRPC\_VERBOSITY和GRPC\_TRACE环境变量 ->   +> [!TIP]须知 +> +> - 采用RPM安装方式时,服务端配置可通过/etc/isulad/daemon.json以及/etc/sysconfig/iSulad配置修改。 +> - 相比非认证或者单向认证方式,双向认证具备更高的安全性,推荐使用双向认证的方式进行通讯。 +> - GRPC开源组件日志不由iSulad进行接管,如果需要查看GRPC相关日志,请按需设置GRPC\_VERBOSITY和GRPC\_TRACE环境变量。 #### 示例 服务端: -``` +```bash isulad -H=tcp://0.0.0.0:2376 --tlsverify --tlscacert ~/.iSulad/ca.pem --tlscert ~/.iSulad/server-cert.pem --tlskey ~/.iSulad/server-key.pem ``` 客户端: -``` +```bash isula version -H=tcp://$HOSTIP:2376 --tlsverify --tlscacert ~/.iSulad/ca.pem --tlscert ~/.iSulad/cert.pem --tlskey ~/.iSulad/key.pem ``` @@ -870,40 +858,40 @@ iSulad采用C/S模式进行设计,在默认情况,iSulad守护进程isulad **一、配置thinpool** -1. 停止isulad服务。 +1. 停止isulad服务。 - ``` + ```bash # systemctl stop isulad ``` -2. 基于块设备创建一个lvm卷。 +2. 基于块设备创建一个lvm卷。 - ``` + ```bash # pvcreate /dev/xvdf ``` -3. 使用刚才创建的物理卷创建一个卷组。 +3. 使用刚才创建的物理卷创建一个卷组。 - ``` + ```bash # vgcreate isula /dev/xvdf Volume group "isula" successfully created: ``` -4. 创建名为thinpool和thinpoolmeta的两个逻辑卷。 +4. 创建名为thinpool和thinpoolmeta的两个逻辑卷。 - ``` + ```bash # lvcreate --wipesignatures y -n thinpool isula -l 95%VG Logical volume "thinpool" created. ``` - ``` + ```bash # lvcreate --wipesignatures y -n thinpoolmeta isula -l 1%VG Logical volume "thinpoolmeta" created. ``` -5. 将新创建的两个逻辑卷转换成thinpool以及thinpool所使用的metadata,这样就完成了thinpool配置。 +5. 将新创建的两个逻辑卷转换成thinpool以及thinpool所使用的metadata,这样就完成了thinpool配置。 - ``` + ```bash # lvconvert -y --zero n -c 512K --thinpool isula/thinpool --poolmetadata isula/thinpoolmeta WARNING: Converting logical volume isula/thinpool and isula/thinpoolmeta to @@ -912,48 +900,44 @@ iSulad采用C/S模式进行设计,在默认情况,iSulad守护进程isulad Converted isula/thinpool to thin pool. ``` - -   - **二、修改isulad配置文件** -1. 如果环境之前运行过isulad,请先备份之前的数据。 +1. 如果环境之前运行过isulad,请先备份之前的数据。 - ``` + ```bash # mkdir /var/lib/isulad.bk # mv /var/lib/isulad/* /var/lib/isulad.bk ``` -2. 修改配置文件 +2. 修改配置文件 这里提供了两种配置方式,用户可根据实际情况的选择合适的方式。 - - 编辑/etc/isulad/daemon.json,配置storage-driver字段值为devicemapper,并配置storage-opts字段的相关参数,支持参数请参见[参数说明](#zh-cn_topic_0222861454_section1712923715282)。配置参考如下所示: + - 编辑/etc/isulad/daemon.json,配置storage-driver字段值为devicemapper,并配置storage-opts字段的相关参数,支持参数请参见[参数说明](#zh-cn_topic_0222861454_section1712923715282)。配置参考如下所示: - ``` + ```conf { "storage-driver": "devicemapper" "storage-opts": [ - "dm.thinpooldev=/dev/mapper/isula-thinpool", - "dm.fs=ext4", + "dm.thinpooldev=/dev/mapper/isula-thinpool", + "dm.fs=ext4", "dm.min_free_space=10%" ] } ``` - - 或者也可以通过编辑/etc/sysconfig/iSulad,在isulad启动参数里显式指定,支持参数请参见[参数说明](#zh-cn_topic_0222861454_section1712923715282)。配置参考如下所示: + - 或者也可以通过编辑/etc/sysconfig/iSulad,在isulad启动参数里显式指定,支持参数请参见[参数说明](#zh-cn_topic_0222861454_section1712923715282)。配置参考如下所示: - ``` + ```conf OPTIONS="--storage-driver=devicemapper --storage-opt dm.thinpooldev=/dev/mapper/isula-thinpool --storage-opt dm.fs=ext4 --storage-opt dm.min_free_space=10%" ``` -3. 启动isulad,使配置生效。 +3. 启动isulad,使配置生效。 - ``` + ```bash # systemctl start isulad ``` - #### 参数说明 storage-opts 支持的参数请参见[表1](#zh-cn_topic_0222861454_table3191161993812)。 @@ -961,54 +945,54 @@ storage-opts 支持的参数请参见[表1](#zh-cn_topic_0222861454_table3191161 **表 1** storage-opts字段参数说明 -

文件名

文件路径

+

文件路径

内容

+

内容

\*

+

\*

/etc/default/isulad/

+

/etc/default/isulad/

存放isulad的OCI配置文件和钩子模板文件,文件夹下的配置文件权限设置为0640,sysmonitor检查脚本权限为0550

+

存放isulad的OCI配置文件和钩子模板文件,文件夹下的配置文件权限设置为0640,sysmonitor检查脚本权限为0550

\*

+

\*

/etc/isulad/

+

/etc/isulad/

isulad的默认配置文件和seccomp的默认配置文件

+

isulad的默认配置文件和seccomp的默认配置文件

isulad.sock

+

isulad.sock

/var/run/

+

/var/run/

管道通信文件,客户端和isulad的通信使用的socket文件

+

管道通信文件,客户端和isulad的通信使用的socket文件

isulad.pid

+

isulad.pid

/var/run/

+

/var/run/

存放isulad的PID,同时也是一个文件锁防止启动多个isulad实例

+

存放isulad的PID,同时也是一个文件锁防止启动多个isulad实例

\*

+

\*

/run/lxc/

+

/run/lxc/

文件锁文件,isula运行过程创建的文件

+

文件锁文件,isula运行过程创建的文件

\*

+

\*

/var/run/isulad/

+

/var/run/isulad/

实时通讯缓存文件,isulad运行过程创建的文件

+

实时通讯缓存文件,isulad运行过程创建的文件

\*

+

\*

/var/run/isula/

+

/var/run/isula/

实时通讯缓存文件,isula运行过程创建的文件

+

实时通讯缓存文件,isula运行过程创建的文件

\*

+

\*

/var/lib/isulad/

+

/var/lib/isulad/

isulad运行的根目录,存放创建的容器配置、日志的默认路径、数据库文件、mount点等

+

isulad运行的根目录,存放创建的容器配置、日志的默认路径、数据库文件、mount点等

/var/lib/isulad/mnt/ :容器rootfs的mount点

/var/lib/isulad/engines/lcr/ :存放lcr容器配置目录,每个容器一个目录(以容器名命名)

参数

+ - - - - - - - - - - - - - - - - - - - - @@ -1016,24 +1000,23 @@ storage-opts 支持的参数请参见[表1](#zh-cn_topic_0222861454_table3191161 #### 注意事项 -- 配置devicemapper时,如果系统上没有足够的空间给thinpool做自动扩容,请禁止自动扩容功能。 +- 配置devicemapper时,如果系统上没有足够的空间给thinpool做自动扩容,请禁止自动扩容功能。 禁止自动扩容的方法是把/etc/lvm/profile/isula-thinpool.profile中thin\_pool\_autoextend\_threshold和thin\_pool\_autoextend\_percent两个值都改成100,如下所示: - ``` + ```conf activation { thin_pool_autoextend_threshold=100 thin_pool_autoextend_percent=100 } ``` -- 使用devicemapper时,容器文件系统必须配置为ext4,需要在isulad的配置参数中加上--storage-opt dm.fs=ext4。 -- 当graphdriver为devicemapper时,如果metadata文件损坏且不可恢复,需要人工介入恢复。禁止直接操作或篡改daemon存储devicemapper的元数据。 -- 使用devicemapper lvm时,异常掉电导致的devicemapper thinpool损坏,无法保证thinpool损坏后可以修复,也不能保证数据的完整性,需重建thinpool。 +- 使用devicemapper时,容器文件系统必须配置为ext4,需要在isulad的配置参数中加上--storage-opt dm.fs=ext4。 +- 当graphdriver为devicemapper时,如果metadata文件损坏且不可恢复,需要人工介入恢复。禁止直接操作或篡改daemon存储devicemapper的元数据。 +- 使用devicemapper lvm时,异常掉电导致的devicemapper thinpool损坏,无法保证thinpool损坏后可以修复,也不能保证数据的完整性,需重建thinpool。 **iSula开启了user namespace特性,切换devicemapper存储池时的注意事项** -- 一般启动容器时,deviceset-metadata文件为:/var/lib/isulad/devicemapper/metadata/deviceset-metadata。 -- 使用了user namespace场景下,deviceset-metadata文件使用的是:/var/lib/isulad/\{userNSUID.GID\}/devicemapper/metadata/deviceset-metadata。 -- 使用devicemapper存储驱动,容器在user namespace场景和普通场景之间切换时,需要将对应deviceset-metadata文件中的BaseDeviceUUID内容清空;针对thinpool扩容或者重建的场景下,也同样的需要将对应deviceset-metadata文件中的BaseDeviceUUID内容清空,否则isulad服务会重启失败。 - +- 一般启动容器时,deviceset-metadata文件为:/var/lib/isulad/devicemapper/metadata/deviceset-metadata。 +- 使用了user namespace场景下,deviceset-metadata文件使用的是:/var/lib/isulad/\{userNSUID.GID\}/devicemapper/metadata/deviceset-metadata。 +- 使用devicemapper存储驱动,容器在user namespace场景和普通场景之间切换时,需要将对应deviceset-metadata文件中的BaseDeviceUUID内容清空;针对thinpool扩容或者重建的场景下,也同样的需要将对应deviceset-metadata文件中的BaseDeviceUUID内容清空,否则isulad服务会重启失败。 diff --git "a/docs/zh/docs/Container/\345\256\211\350\243\205-\345\215\207\347\272\247\344\270\216\345\215\270\350\275\275.md" b/docs/zh/docs/cloud/container_engine/isula_container_engine/installation_upgrade_uninstallation.md similarity index 82% rename from "docs/zh/docs/Container/\345\256\211\350\243\205-\345\215\207\347\272\247\344\270\216\345\215\270\350\275\275.md" rename to docs/zh/docs/cloud/container_engine/isula_container_engine/installation_upgrade_uninstallation.md index 6c4e4208f..f6d55640a 100644 --- "a/docs/zh/docs/Container/\345\256\211\350\243\205-\345\215\207\347\272\247\344\270\216\345\215\270\350\275\275.md" +++ b/docs/zh/docs/cloud/container_engine/isula_container_engine/installation_upgrade_uninstallation.md @@ -1,3 +1,3 @@ # 安装、升级与卸载 -本章介绍 iSulad 的安装、安装后配置,以及升级和卸载的方法。 \ No newline at end of file +本章介绍 iSulad 的安装、安装后配置,以及升级和卸载的方法。 diff --git "a/docs/zh/docs/Container/iSula-shim-v2\345\257\271\346\216\245stratovirt.md" b/docs/zh/docs/cloud/container_engine/isula_container_engine/interconnecting_isula_shim_v2_with_stratovirt.md similarity index 93% rename from "docs/zh/docs/Container/iSula-shim-v2\345\257\271\346\216\245stratovirt.md" rename to docs/zh/docs/cloud/container_engine/isula_container_engine/interconnecting_isula_shim_v2_with_stratovirt.md index c604fb8e6..298971556 100755 --- "a/docs/zh/docs/Container/iSula-shim-v2\345\257\271\346\216\245stratovirt.md" +++ b/docs/zh/docs/cloud/container_engine/isula_container_engine/interconnecting_isula_shim_v2_with_stratovirt.md @@ -1,7 +1,5 @@ # iSula对接shim v2安全容器 - - ## 概述 shim v2 是新一代 shim 架构方案,相比于 shim v1, 具有调用链更短、架构清晰的优势,在多业务容器场景,具备明显的低内存开销优势。iSula 运行安全容器可以通过 isulad-shim 或者 containerd-shim-kata-v2 来实现,其中 isulad-shim 组件是 shim v1 方案的具体实现,containerd-shim-kata-v2 组件是 shim v2 方案在安全容器场景的一种具体实现,本文介绍 iSula 与 containerd-shim-kata-v2 的对接。 @@ -58,7 +56,7 @@ iSula 对接 containerd-shim-kata-v2 前,需要满足如下前提: Logical volume "thinpoolmeta" created. ``` -4. 将上面创建的逻辑卷转换为 thinpool +4. 将上面创建的逻辑卷转换为 thinpool ```shell $ lvconvert -y --zero n -c 64K \ @@ -117,7 +115,7 @@ iSula 对接 containerd-shim-kata-v2 前,需要满足如下前提: 若回显有如下信息,说明配置成功。 - ``` + ```sh Storage Driver: devicemapper ``` @@ -135,7 +133,7 @@ containerd-shim-kata-v2 使用的虚拟化组件为 QEMU 时,iSula 对接 cont sandbox_cgroup_with_emulator 需要设置为 false, 目前 shimv2 不支该改功能, 其他参数与 shim v1 中 kata 配置参数保持一致或者保持缺省值。 - ``` + ```sh sandbox_cgroup_with_emulator = false ``` @@ -198,11 +196,11 @@ containerd-shim-kata-v2 使用的虚拟化组件为 StratoVirt 时,iSula 对 $ lsmod |grep vhost_vsock ``` - 下载对应版本和架构的 kernel 并放到 /var/lib/kata/ 路径下, [openeuler repo](): + 下载对应版本和架构的 kernel 并放到 /var/lib/kata/ 路径下, [openeuler repo](https://repo.openeuler.org/): ```bash $ cd /var/lib/kata - $ wget https://repo.openeuler.org/openEuler-{version}/stratovirt_img/x86_64/vmlinux.bin + $ wget https://dl-cdn.openeuler.openatom.cn/openEuler-24.03-LTS-SP1/stratovirt_img/x86_64/vmlinux.bin ``` 3. 使用 busybox 镜像运行安全容器并检查使用的 runtime 为 io.containerd.kata.v2 diff --git "a/docs/zh/docs/Container/\346\224\257\346\214\201CNI\347\275\221\347\273\234.md" b/docs/zh/docs/cloud/container_engine/isula_container_engine/interconnection_with_the_cni_network.md similarity index 32% rename from "docs/zh/docs/Container/\346\224\257\346\214\201CNI\347\275\221\347\273\234.md" rename to docs/zh/docs/cloud/container_engine/isula_container_engine/interconnection_with_the_cni_network.md index 0a3fa4692..8ceda130d 100644 --- "a/docs/zh/docs/Container/\346\224\257\346\214\201CNI\347\275\221\347\273\234.md" +++ b/docs/zh/docs/cloud/container_engine/isula_container_engine/interconnection_with_the_cni_network.md @@ -1,15 +1,5 @@ # 支持CNI网络 - -- [支持CNI网络](#支持cni网络) - - [描述](#描述) - - [接口](#接口) - - [CNI网络配置说明](#cni网络配置说明) - - [加入CNI网络列表](#加入cni网络列表) - - [退出CNI网络列表](#退出cni网络列表) - - [使用限制](#使用限制) - - ## 描述 实现CRI接口对接CNI网络的能力,包括CNI网络配置文件的解析、CNI网络的加入和退出。Pod需要支持网络时,例如通过canal等容器网络插件提供网络能力,那么需要CRI接口能够和canal实现对接,并且调用canal的接口,为Pod提供网络能力。 @@ -24,47 +14,47 @@ CNI配置文件相关行为描述: CNI对用户可见的接口,主要涉及CNI网络配置和Pod配置中CNI网络相关的项。 -- CNI网络配置相关的接口,主要是isulad指定CNI网络配置文件所在路径、CNI网络插件二进制文件所在的路径以及使用的网络模式。详情请参见[表1 CNI网络配置接口](#zh-cn_topic_0183259146_table18221919589)。 -- Pod配置中CNI网络相关的项,主要是设置Pod加入的附加CNI网络列表,默认情况Pod只会加入到default CNI网络平面中,可以通过该配置把Pod加入到多个CNI网络平面中。 +- CNI网络配置相关的接口,主要是isulad指定CNI网络配置文件所在路径、CNI网络插件二进制文件所在的路径以及使用的网络模式。详情请参见[表1 CNI网络配置接口](#zh-cn_topic_0183259146_table18221919589)。 +- Pod配置中CNI网络相关的项,主要是设置Pod加入的附加CNI网络列表,默认情况Pod只会加入到default CNI网络平面中,可以通过该配置把Pod加入到多个CNI网络平面中。 **表 1** CNI网络配置接口 -

参数

是否必选

+

是否必选

含义

+

含义

dm.fs

+

dm.fs

+

用于指定容器使用的文件系统类型。当前必须配置为ext4,即dm.fs=ext4

+

用于指定容器使用的文件系统类型。当前必须配置为ext4,即dm.fs=ext4

dm.basesize

+

dm.basesize

+

用于指定单个容器的最大存储空间大小,单位为k/m/g/t/p,也可以使用大写字母,例如dm.basesize=50G。该参数只在首次初始化时有效。

+

用于指定单个容器的最大存储空间大小,单位为k/m/g/t/p,也可以使用大写字母,例如dm.basesize=50G。该参数只在首次初始化时有效。

dm.mkfsarg

+

dm.mkfsarg

+

用于在创建基础设备时指定额外的mkfs参数。例如“dm.mkfsarg=-O ^has_journal”

+

用于在创建基础设备时指定额外的mkfs参数。例如“dm.mkfsarg=-O ^has_journal”

dm.mountopt

+

dm.mountopt

+

用于在挂载容器时指定额外的mount参数。例如dm.mountopt=nodiscard

+

用于在挂载容器时指定额外的mount参数。例如dm.mountopt=nodiscard

dm.thinpooldev

+

dm.thinpooldev

+

用于指定容器/镜像存储时使用的thinpool设备。

+

用于指定容器/镜像存储时使用的thinpool设备。

dm.min_free_space

+

dm.min_free_space

+

用于指定最小的预留空间,用百分比表示。例如dm.min_free_space=10%,表示当剩余存储空间只剩10%左右时,创建容器等和存储相关操作就会失败。

+

用于指定最小的预留空间,用百分比表示。例如dm.min_free_space=10%,表示当剩余存储空间只剩10%左右时,创建容器等和存储相关操作就会失败。

  

+ - - - - - - - - - - - - - - - @@ -76,28 +66,23 @@ CNI对用户可见的接口,主要涉及CNI网络配置和Pod配置中CNI网 网络平面配置为json格式,包含两项: -- name:指定CNI网络平面的名字 -- interface:指定网络接口的名字 +- name:指定CNI网络平面的名字 +- interface:指定网络接口的名字 附加CNI网络配置方式示例如下: -``` +```conf "annotations" : { "network.alpha.kubernetes.io/network": "{\"name\": \"mynet\", \"interface\": \"eth1\"}" } ``` -   - - - - ### CNI网络配置说明 CNI网络配置包含两种类型,文件格式都为json: -- 单网络平面配置,以.conf和.json为后缀的文件:具体的配置项请参见"附录 > CNI配置参数" 章节的 "表1 CNI单网络配置参数"。 -- 多网络平面配置,以.conflist为后缀的文件:具体的配置项请参见"附录 > CNI配置参数" 章节的 "表3 CNI多网络配置参数"。 +- 单网络平面配置,以.conf和.json为后缀的文件:具体的配置项请参见"附录 > CNI配置参数" 章节的 "表1 CNI单网络配置参数"。 +- 多网络平面配置,以.conflist为后缀的文件:具体的配置项请参见"附录 > CNI配置参数" 章节的 "表3 CNI多网络配置参数"。 ### 加入CNI网络列表 @@ -105,7 +90,7 @@ CNI网络配置包含两种类型,文件格式都为json: Pod配置中和网络相关的还有port\_mappings项,用于设置Pod的端口映射关系。配置方式如下: -``` +```conf "port_mappings":[ { "protocol": 1, @@ -115,22 +100,22 @@ Pod配置中和网络相关的还有port\_mappings项,用于设置Pod的端口 ] ``` -- protocol:表示映射使用的协议,支持tcp(用0标识)、udp(用1标识); -- container\_port:表示容器映射出去的port; -- host\_port:表示映射到主机的port。 +- protocol:表示映射使用的协议,支持tcp(用0标识)、udp(用1标识); +- container\_port:表示容器映射出去的port; +- host\_port:表示映射到主机的port。 ### 退出CNI网络列表 StopPodSandbox的时候,会调用退出CNI网络的接口,清理网络相关的资源。 ->![](./public_sys-resources/icon-note.gif) **说明:** ->1. 在调用RemovePodSandbox接口之前,至少要调用一次StopPodSandbox接口 ->2. StopPodSandbox调用CNI接口失败,导致的网络资源残留,由CNI网络插件负责清理。 +>[!NOTE]说明 +> +> - 在调用RemovePodSandbox接口之前,至少要调用一次StopPodSandbox接口。 +> - StopPodSandbox调用CNI接口失败,导致的网络资源残留,由CNI网络插件负责清理。 ## 使用限制 -- cniVersion的版本,当前只支持0.3.0和0.3.1。由于后期可能需要支持0.1.0和0.2.0,错误日志打印时,保留了0.1.0和0.2.0的提示信息。 -- name:必须是小写字符、数字、'-'以及'.'组成; '.'和'-'不能作为首字符和尾字符; 而且长度不超过200个字符。 -- 配置文件个数不超过200个,单个配置文件大小不超过1MB。 -- 扩展之后的参数,需要根据实际网络需求来配置,不需要使用的可选参数可以不写入到netconf.json文件中。 - +- cniVersion的版本,当前只支持0.3.0和0.3.1。由于后期可能需要支持0.1.0和0.2.0,错误日志打印时,保留了0.1.0和0.2.0的提示信息。 +- name:必须是小写字符、数字、'-'以及'.'组成; '.'和'-'不能作为首字符和尾字符; 而且长度不超过200个字符。 +- 配置文件个数不超过200个,单个配置文件大小不超过1MB。 +- 扩展之后的参数,需要根据实际网络需求来配置,不需要使用的可选参数可以不写入到netconf.json文件中。 diff --git "a/docs/zh/docs/Container/iSulad\346\224\257\346\214\201CDI.md" b/docs/zh/docs/cloud/container_engine/isula_container_engine/isulad_support_cdi.md similarity index 87% rename from "docs/zh/docs/Container/iSulad\346\224\257\346\214\201CDI.md" rename to docs/zh/docs/cloud/container_engine/isula_container_engine/isulad_support_cdi.md index f066dd81d..ea89ed944 100644 --- "a/docs/zh/docs/Container/iSulad\346\224\257\346\214\201CDI.md" +++ b/docs/zh/docs/cloud/container_engine/isula_container_engine/isulad_support_cdi.md @@ -87,32 +87,32 @@ EOF 在容器json文件中,使用以下两种方式指定设备均可: -1. annotations中指定设备 - - ```json - { - ... ... - "annotations": [ - ... ... - {"cdi.k8s.io/test": "vendor.com/device=myDevice"}, - ... ... - ] - ... ... - } - ``` - -2. CDI_Devices中指定设备 - - ```json - { - ... ... - "CDI_Devices": [ - ... ... - {"Name": "vendor.com/device=myDevice"}, - ... ... - ] - ... ... - } +方式1:annotations中指定设备 + + ```json + { + ... ... + "annotations": [ + ... ... + {"cdi.k8s.io/test": "vendor.com/device=myDevice"}, + ... ... + ] + ... ... + } + ``` + +方式2:CDI_Devices中指定设备 + + ```json + { + ... ... + "CDI_Devices": [ + ... ... + {"Name": "vendor.com/device=myDevice"}, + ... ... + ] + ... ... + } ``` ## 使用限制 diff --git "a/docs/zh/docs/Container/iSulad\346\224\257\346\214\201cgroup v2.md" b/docs/zh/docs/cloud/container_engine/isula_container_engine/isulad_support_cgroup_v2.md similarity index 99% rename from "docs/zh/docs/Container/iSulad\346\224\257\346\214\201cgroup v2.md" rename to docs/zh/docs/cloud/container_engine/isula_container_engine/isulad_support_cgroup_v2.md index 0ac8e82a6..2f57e7802 100644 --- "a/docs/zh/docs/Container/iSulad\346\224\257\346\214\201cgroup v2.md" +++ b/docs/zh/docs/cloud/container_engine/isula_container_engine/isulad_support_cgroup_v2.md @@ -1,9 +1,11 @@ # iSulad支持cgroup v2 ## 概述 + cgroup是linux中用于限制进程组资源的机制。cgroup目前包括两个版本,cgroup v1和cgroup v2。 cgroup v2的目标是取代cgroup v1,cgroup v2相较于cgroup v1具有以下优势: + - 统一层次结构:cgroup v2 引入了一个统一的层次结构,将不同的资源控制(如 CPU、内存等)合并到一个层次结构中。这消除了 cgroup v1 中的分离层次结构,使得资源配置更加直观和简化。 - 细粒度资源控制:cgroup v2 提供了更细粒度的资源控制,允许用户对各个进程组进行更精细的资源限制和分配。它支持对 CPU、内存、IO、网络、设备等资源进行精确的控制和配额分配。 - 改进的性能:cgroup v2 在性能方面进行了一些改进,包括减少锁竞争和提高资源分配的效率。这可能导致更好的性能和扩展性,特别是在大规模部署和高负载环境下。 @@ -32,7 +34,6 @@ grubby --args="cgroup_no_v1=all" --update-kernel="/boot/vmlinuz-$(uname -r)" cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime) ``` - ## iSulad使用cgroup v2限制资源 无论是cgroup v1还是cgroup v2,iSulad提供给用户使用的接口都是一致的(在`isula create/isula run/isula update`有相应接口)。不过由于有部分cgroup v1支持的功能在cgroup v2中被去掉了或者实现方式有所变化,因此部分接口在cgroup v2中不可用或者含义发生变化。iSulad支持限制如下资源: @@ -47,13 +48,14 @@ cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime) | pids | 限制容器使用的pid | 无差异 | | freeze | 暂停容器 | 无差异 | - 例如:若在cgroup v2环境下v2使用不支持的选项(以`--memory-swappiness`为例),isula命令会有如下报错: + ```sh [root@openEuler ~]# isula run -tid --memory-swappiness 90 busybox /bin/sh Error response from daemon: Your kernel does not support memory swappiness capabilities, memory swappiness discarded. ``` ## 使用限制 + 1. iSulad只识别挂载在`/sys/fs/cgroup`目录下的cgroup。 -2. iSulad不支持cgroup v1与cgroup v2混用场景,仅根据`/sys/fs/cgroup`目录下的cgroup版本决定iSulad内部使用的cgroup版本。 \ No newline at end of file +2. iSulad不支持cgroup v1与cgroup v2混用场景,仅根据`/sys/fs/cgroup`目录下的cgroup版本决定iSulad内部使用的cgroup版本。 diff --git "a/docs/zh/docs/Container/\346\234\254\345\234\260\345\215\267\347\256\241\347\220\206.md" b/docs/zh/docs/cloud/container_engine/isula_container_engine/local_volume_management.md similarity index 86% rename from "docs/zh/docs/Container/\346\234\254\345\234\260\345\215\267\347\256\241\347\220\206.md" rename to docs/zh/docs/cloud/container_engine/isula_container_engine/local_volume_management.md index f13b4492e..3c0ecf073 100644 --- "a/docs/zh/docs/Container/\346\234\254\345\234\260\345\215\267\347\256\241\347\220\206.md" +++ b/docs/zh/docs/cloud/container_engine/isula_container_engine/local_volume_management.md @@ -1,39 +1,5 @@ # 本地卷管理 -- [本地卷管理](#本地卷管理) - - [概述](#概述) - - [注意事项](#注意事项) - - [使用方法](#使用方法) - - [使用-v参数挂载数据](#使用-v参数挂载数据) - - [**命令格式**](#命令格式) - - [**功能描述**](#功能描述) - - [**参数说明**](#参数说明) - - [**示例**](#示例) - - [使用--mount参数挂载数据](#使用--mount参数挂载数据) - - [**命令格式**](#命令格式-1) - - [**功能描述**](#功能描述-1) - - [**参数说明**](#参数说明-1) - - [**示例**](#示例-1) - - [复用其他容器中的挂载配置](#复用其他容器中的挂载配置) - - [**命令格式**](#命令格式-2) - - [**功能描述**](#功能描述-2) - - [**参数说明**](#参数说明-2) - - [**示例**](#示例-2) - - [使用镜像中的匿名卷](#使用镜像中的匿名卷) - - [卷的查询](#卷的查询) - - [**命令格式**](#命令格式-3) - - [**功能描述**](#功能描述-3) - - [**参数说明**](#参数说明-3) - - [**示例**](#示例-3) - - [卷的删除](#卷的删除) - - [**命令格式**](#命令格式-4) - - [**功能描述**](#功能描述-4) - - [**参数说明**](#参数说明-4) - - [**示例**](#示例-4) - - [注意事项](#注意事项-1) - - [冲突合并规则](#冲突合并规则) - - [iSula和Docker的差异](#isula和docker的差异) - ## 概述 iSula 管理的容器销毁后,容器内自身所有的数据都会被销毁。如果用户希望容器销毁后依然保留数据,则需要有一种持久化数据的机制。iSula 允许将主机上的文件、目录或卷在容器运行时挂载到容器内。用户可以将需要持久化的数据写入容器内的挂载点。则容器销毁后,主机上的文件、目录、卷依然保留。如果用户需要销毁主机上的文件、目录、卷,可以手动删除文件、目录或者执行 iSula 的相关命令删除卷。对于卷的管理目前 iSula 只支持本地卷,本地卷又分为有名卷和匿名卷。由用户指定名称生产的卷叫有名卷,用户没有指定卷名称,由 iSula 自动生成卷名(一个64位的随机数)的卷为匿名卷。 diff --git "a/docs/zh/docs/Container/iSula\345\256\271\345\231\250\345\274\225\346\223\216.md" b/docs/zh/docs/cloud/container_engine/isula_container_engine/overview.md similarity index 99% rename from "docs/zh/docs/Container/iSula\345\256\271\345\231\250\345\274\225\346\223\216.md" rename to docs/zh/docs/cloud/container_engine/isula_container_engine/overview.md index 3386c47f4..96ab83963 100644 --- "a/docs/zh/docs/Container/iSula\345\256\271\345\231\250\345\274\225\346\223\216.md" +++ b/docs/zh/docs/cloud/container_engine/isula_container_engine/overview.md @@ -6,6 +6,4 @@ iSula通用容器引擎相比Docker,是一种新的容器解决方案,提供 **图 1** 容器统一架构 - ![](./figures/zh-cn_image_0183048952.png) - diff --git "a/docs/zh/docs/Container/\347\211\271\346\235\203\345\256\271\345\231\250.md" b/docs/zh/docs/cloud/container_engine/isula_container_engine/previleged_container.md similarity index 98% rename from "docs/zh/docs/Container/\347\211\271\346\235\203\345\256\271\345\231\250.md" rename to docs/zh/docs/cloud/container_engine/isula_container_engine/previleged_container.md index 77fb58e4a..e4bc715ca 100644 --- "a/docs/zh/docs/Container/\347\211\271\346\235\203\345\256\271\345\231\250.md" +++ b/docs/zh/docs/cloud/container_engine/isula_container_engine/previleged_container.md @@ -1,12 +1,4 @@ # 特权容器 - - -- [特权容器](#特权容器) - - [场景说明](#场景说明) - - [使用限制](#使用限制) - - [使用指导](#使用指导) - - ## 场景说明 @@ -16,11 +8,11 @@ iSulad默认启动的是普通容器,普通容器适合启动普通进程, 特权容器为容器提供了所有功能,还解除了设备cgroup控制器强制执行的所有限制,具备以下特性: -- Secomp不block任何系统调用 -- /sys、/proc路径可写 -- 容器内能访问主机上所有设备 +- Secomp不block任何系统调用 +- /sys、/proc路径可写 +- 容器内能访问主机上所有设备 -- 系统的权能将全部打开 +- 系统的权能将全部打开 普通容器默认权能为: @@ -235,7 +227,6 @@ iSulad默认启动的是普通容器,普通容器适合启动普通进程, iSulad使用--privileged给容器添加特权模式,在非必要情况下,不要给容器添加特权,遵循最小特权原则,减少存在的安全风险。 -``` +```sh isula run --rm -it --privileged busybox ``` - diff --git "a/docs/zh/docs/Container/\346\237\245\350\257\242\344\277\241\346\201\257.md" b/docs/zh/docs/cloud/container_engine/isula_container_engine/query_information.md similarity index 92% rename from "docs/zh/docs/Container/\346\237\245\350\257\242\344\277\241\346\201\257.md" rename to docs/zh/docs/cloud/container_engine/isula_container_engine/query_information.md index 50c1f20c9..48e10e011 100644 --- "a/docs/zh/docs/Container/\346\237\245\350\257\242\344\277\241\346\201\257.md" +++ b/docs/zh/docs/cloud/container_engine/isula_container_engine/query_information.md @@ -1,9 +1,5 @@ # 查询信息 -- [查询信息](#查询信息) - - [查询服务版本信息](#查询服务版本信息) - - [查询系统级信息](#查询系统级信息) - ## 查询信息 ## 查询服务版本信息 diff --git "a/docs/zh/docs/Container/\345\256\211\345\205\250\347\211\271\346\200\247.md" b/docs/zh/docs/cloud/container_engine/isula_container_engine/security_features.md similarity index 55% rename from "docs/zh/docs/Container/\345\256\211\345\205\250\347\211\271\346\200\247.md" rename to docs/zh/docs/cloud/container_engine/isula_container_engine/security_features.md index 3865f4cae..b43a097b4 100644 --- "a/docs/zh/docs/Container/\345\256\211\345\205\250\347\211\271\346\200\247.md" +++ b/docs/zh/docs/cloud/container_engine/isula_container_engine/security_features.md @@ -1,8 +1,4 @@ # 安全特性 -- [安全特性](#安全特性.md) - - [seccomp安全配置场景](#seccomp安全配置场景) - - [capabilities安全配置场景](#capabilities安全配置场景) - - [SELinux安全配置场景](#selinux安全配置场景) ## seccomp安全配置场景 @@ -10,7 +6,7 @@ seccomp(**secure computing** **mode**)是linux kernel从2.6.23版本开始引入的一种简洁的sandboxing机制。在一些特定场景下,用户需要在容器中执行一些“特权”操作,但又不想启动特权容器,用户经常会在run时添加--cap-add来获得一些“小范围”的权限。对于安全要求比较严格的容器实例,上述的CAP粒度不一定能够满足安全需要,可使用一些办法精细化控制权限范围。 -- 举例 +- 举例 普通容器场景中,用户使用-v将宿主机某目录(包含某普通用户无法执行的二进制),映射到容器中。 @@ -18,40 +14,40 @@ seccomp(**secure computing** **mode**)是linux kernel从2.6.23版本开始 这个场景,如果在严格安全要求下,需要使用seccomp裁剪chmod、fchmod、fchmodat系统调用。 - ### 使用限制 -- 不要禁用iSulad的seccomp特性 +- 不要禁用iSulad的seccomp特性 默认的iSulad有一个seccomp的配置,配置中使用的是白名单,不在配置的sys_call会被seccomp禁掉,使用接口--security-opt 'seccomp:unconfined'可以禁止使用seccomp特性。如果禁用seccomp或使用自定义seccomp配置但过滤名单不全,都会增加容器对内核的攻击面。 -- 默认的Seccomp配置是白名单,不在白名单的syscall默认会返回SCMP_ACT_ERRNO,同时会根据不同的Cap开放不同的系统调用,不在白名单上面的权限,iSulad默认不会将权限给到容器。 +- 默认的Seccomp配置是白名单,不在白名单的syscall默认会返回SCMP_ACT_ERRNO,同时会根据不同的Cap开放不同的系统调用,不在白名单上面的权限,iSulad默认不会将权限给到容器。 ### 使用指导 通过--security-opt将配置文件传给要过滤系统调用的容器。 -``` +```bash isula run -itd --security-opt seccomp=/path/to/seccomp/profile.json rnd-dockerhub.huawei.com/official/busybox ``` ->![](./public_sys-resources/icon-note.gif) **说明:** ->1. 创建容器时通过--security-opt将配置文件传给容器时,采用默认配置文件(/etc/isulad/seccomp\_default.json)。 ->2. 创建容器时--security-opt设置为unconfined时,对容器不过滤系统调用。 ->3. “/path/to/seccomp/profile.json”需要是绝对路径。 ->4. --security-opt采用“=”号进行分割,不支持使用“:”号分割。 +> [!NOTE]说明 +> +> - 创建容器时通过--security-opt将配置文件传给容器时,采用默认配置文件(/etc/isulad/seccomp\_default.json)。 +> - 创建容器时--security-opt设置为unconfined时,对容器不过滤系统调用。 +> - “/path/to/seccomp/profile.json”需要是绝对路径。 +> - --security-opt采用“=”号进行分割,不支持使用“:”号分割。 #### 获取普通容器的默认seccomp配置 -- 启动一个普通容器(或者是带--cap-add的容器),并查看默认权限配置: +- 启动一个普通容器(或者是带--cap-add的容器),并查看默认权限配置: - ``` + ```bash cat /etc/isulad/seccomp_default.json | python -m json.tool > profile.json ``` 可以看到"seccomp"字段中,有很多的"syscalls",在此基础上,仅提取syscalls的部分,参考定制seccomp配置文件,进行定制化操作。 - ``` + ```conf "defaultAction": "SCMP_ACT_ERRNO", "syscalls": [ { @@ -77,14 +73,13 @@ isula run -itd --security-opt seccomp=/path/to/seccomp/profile.json rnd-dockerhu ]... ``` +- 查看转换为lxc可识别的seccomp配置 -- 查看转换为lxc可识别的seccomp配置 - - ``` + ```bash cat /var/lib/isulad/engines/lcr/74353e38021c29314188e29ba8c1830a4677ffe5c4decda77a1e0853ec8197cd/seccomp ``` - ``` + ```text ... waitpid allow write allow @@ -98,18 +93,17 @@ isula run -itd --security-opt seccomp=/path/to/seccomp/profile.json rnd-dockerhu ... ``` - #### 定制seccomp配置文件 在启动容器的时候使用--security-opt引入seccomp配置文件,容器实例会按照配置文件规则进行限制系统API的运行。首先获取普通容器的默认seccomp,得到完整模板,然后按照本节定制配置文件,启动容器: -``` +```bash isula run --rm -it --security-opt seccomp:/path/to/seccomp/profile.json rnd-dockerhub.huawei.com/official/busybox ``` 配置文件模板: -``` +```conf { "defaultAction": "SCMP_ACT_ALLOW", "syscalls": [ @@ -122,29 +116,32 @@ isula run --rm -it --security-opt seccomp:/path/to/seccomp/profile.json rnd-dock } ``` ->![](./public_sys-resources/icon-notice.gif) **须知:** ->- defaultAction、syscalls:对应的action的类型是一样的,但其值是不能一样的,目的就是让所有的syscall都有一个默认的action,并且如果syscalls数组中有明确的定义,就以syscalls中的为准,由于defaultAction、action的值不一样,就能保证action不会有冲突。当前支持的action有: -> "SCMP\_ACT\_ERRNO":禁止,并打印错误信息。 -> "SCMP\_ACT\_ALLOW":允许。 ->- syscalls: 数组,可以只有一个syscall,也可以有多个,可以带args,也可以不带。 ->- name:要过滤的syscall。 ->- args:数组,里面的每个object的定义如下: +> [!TIP]须知 +> +> - defaultAction、syscalls:对应的action的类型是一样的,但其值是不能一样的,目的就是让所有的syscall都有一个默认的action,并且如果syscalls数组中有明确的定义,就以syscalls中的为准,由于defaultAction、action的值不一样,就能保证action不会有冲突。当前支持的action有: +> - "SCMP\_ACT\_ERRNO":禁止,并打印错误信息。 +> - "SCMP\_ACT\_ALLOW":允许。 +> - syscalls: 数组,可以只有一个syscall,也可以有多个,可以带args,也可以不带。 +> - name:要过滤的syscall。 +> - args:数组,里面的每个object的定义如下: +> +> ```conf +> type Arg struct { +> Index uint `json:"index"` //参数的序号,如open(fd, buf, len),fd 对应的就是0,buf为1 +> Value uint64 `json:"value"` //跟参数进行比较的值 +> ValueTwo uint64 `json:"value_two"` //仅当Op=MaskEqualTo时起作用,用户传入值跟Value按位与操作后,跟ValueTwo进行比较,若相等则执行action。 +> Op Operator `json:"op"` +> } > ``` -> type Arg struct { -> Index uint `json:"index"` //参数的序号,如open(fd, buf, len),fd 对应的就是0,buf为1 -> Value uint64 `json:"value"` //跟参数进行比较的值 -> ValueTwo uint64 `json:"value_two"` //仅当Op=MaskEqualTo时起作用,用户传入值跟Value按位与操作后,跟ValueTwo进行比较,若相等则执行action。 -> Op Operator `json:"op"` -> } -> ``` -> args中的Op,其取值可以下页面的任意一种: -> "SCMP\_CMP\_NE": NotEqualTo -> "SCMP\_CMP\_LT": LessThan -> "SCMP\_CMP\_LE": LessThanOrEqualTo -> "SCMP\_CMP\_EQ": EqualTo -> "SCMP\_CMP\_GE": GreaterThanOrEqualTo -> "SCMP\_CMP\_GT": GreaterThan -> "SCMP\_CMP\_MASKED\_EQ": MaskEqualTo +> +> args中的Op,其取值可以下页面的任意一种: +> "SCMP\_CMP\_NE": NotEqualTo +> "SCMP\_CMP\_LT": LessThan +> "SCMP\_CMP\_LE": LessThanOrEqualTo +> "SCMP\_CMP\_EQ": EqualTo +> "SCMP\_CMP\_GE": GreaterThanOrEqualTo +> "SCMP\_CMP\_GT": GreaterThan +> "SCMP\_CMP\_MASKED\_EQ": MaskEqualTo ## capabilities安全配置场景 @@ -152,15 +149,15 @@ isula run --rm -it --security-opt seccomp:/path/to/seccomp/profile.json rnd-dock capabilities机制是linux kernel 2.2之后引入的安全特性,用更小的粒度控制超级管理员权限,可以避免使用 root 权限,将root用户的权限细分为不同的领域,可以分别启用或禁用。capabilities详细信息可通过Linux Programmer's Manual进行查看([capabilities\(7\) - Linux man page](http://man7.org/linux/man-pages/man7/capabilities.7.html)): -``` +```bash man capabilities ``` ### 使用限制 -- isulad默认Capabilities(白名单)配置如下,普通容器进程将默认携带: +- isulad默认Capabilities(白名单)配置如下,普通容器进程将默认携带: - ``` + ```conf "CAP_CHOWN", "CAP_DAC_OVERRIDE", "CAP_FSETID", @@ -177,14 +174,14 @@ man capabilities "CAP_AUDIT_WRITE" ``` -- 默认的权能配置,包含了CAP\_SETUID和CAP\_FSETID,如host和容器共享目录,容器可对共享目录的二进制文件进行文件权限设置,host上的普通用户可能使用该特性进行提权攻击。CAP\_AUDIT\_WRITE,容器可以对host写入,存在一定的风险,如果使用场景不需要,推荐在启动容器的时候使用--cap-drop将其删除。 -- 增加Capabilities意味着容器进程具备更大的能力,同时也会开放更多的系统调用接口。 +- 默认的权能配置,包含了CAP\_SETUID和CAP\_FSETID,如host和容器共享目录,容器可对共享目录的二进制文件进行文件权限设置,host上的普通用户可能使用该特性进行提权攻击。CAP\_AUDIT\_WRITE,容器可以对host写入,存在一定的风险,如果使用场景不需要,推荐在启动容器的时候使用--cap-drop将其删除。 +- 增加Capabilities意味着容器进程具备更大的能力,同时也会开放更多的系统调用接口。 ### 使用指导 iSulad使用--cap-add/--cap-drop给容器增加/删去特定的权限,在非必要情况下,不要给容器增加额外的权限,推荐将容器默认但非必要的权限也去掉。 -``` +```bash isula run --rm -it --cap-add all --cap-drop SYS_ADMIN rnd-dockerhub.huawei.com/official/busybox ``` @@ -196,30 +193,29 @@ SELinux\(Security-Enhanced Linux\)是一个Linux内核的安全模块,提供 ### 使用限制 -- 确保宿主机已使能SELinux,且daemon端已打开SELinux使能开发(/etc/isulad/daemon.json中“selinux-enabled”字段为true, 或者命令行参数添加--selinux-enabled) -- 确保宿主机上已配置合适的selinux策略,推荐使用container-selinux进行配置 -- 引入SELinux会影响性能,设置SELinux之前需要对场景进行评估,确定必要时打开daemon端SELinux开关并设置容器SELinux配置 -- 对挂载卷进行标签配置时,源目录不允许为/、/usr、/etc、/tmp、/home、/run、/var、/root以及/usr的子目录。 +- 确保宿主机已使能SELinux,且daemon端已打开SELinux使能开发(/etc/isulad/daemon.json中“selinux-enabled”字段为true, 或者命令行参数添加--selinux-enabled) +- 确保宿主机上已配置合适的selinux策略,推荐使用container-selinux进行配置 +- 引入SELinux会影响性能,设置SELinux之前需要对场景进行评估,确定必要时打开daemon端SELinux开关并设置容器SELinux配置 +- 对挂载卷进行标签配置时,源目录不允许为/、/usr、/etc、/tmp、/home、/run、/var、/root以及/usr的子目录。 ->![](./public_sys-resources/icon-note.gif) **说明:** ->- 目前iSulad不支持对容器的文件系统打标签,确保容器文件系统及配置目录打上容器可访问标签,需使用chcon命令对其打上标签。 ->- 若iSulad启用SELinux访问控制,建议daemon启动前对/var/lib/isulad目录打上标签,容器容器创建时目录下生产的文件及文件夹将默认继承其标签,例如: -> ``` -> chcon -R system_u:object_r:container_file_t:s0 /var/lib/isulad -> ``` +> [!NOTE]说明 +> +> - 目前iSulad不支持对容器的文件系统打标签,确保容器文件系统及配置目录打上容器可访问标签,需使用chcon命令对其打上标签。 +> - 若iSulad启用SELinux访问控制,建议daemon启动前对/var/lib/isulad目录打上标签,容器容器创建时目录下生产的文件及文件夹将默认继承其标签,例如: +> +> ```bash +> chcon -R system_u:object_r:container_file_t:s0 /var/lib/isulad +> ``` ### 使用指导 -- daemon端使能selinux: +- daemon端使能selinux: - ``` + ```bash isulad --selinux-enabled ``` - -   - -- 启动容器时配置selinux标签安全上下文 +- 启动容器时配置selinux标签安全上下文 --security-opt="label=user:USER" 配置安全上下文用户 @@ -231,24 +227,17 @@ SELinux\(Security-Enhanced Linux\)是一个Linux内核的安全模块,提供 --security-opt="label=disable" 容器禁用SELinux配置 - ``` + ```bash $ isula run -itd --security-opt label=type:container_t --security-opt label=level:s0:c1,c2 rnd-dockerhub.huawei.com/official/centos 9be82878a67e36c826b67f5c7261c881ff926a352f92998b654bc8e1c6eec370 ``` +- 为挂载卷打selinux标签\('z'为共享模式\) -   - -- 为挂载卷打selinux标签\('z'为共享模式\) - - ``` + ```bash $ isula run -itd -v /test:/test:z rnd-dockerhub.huawei.com/official/centos 9be82878a67e36c826b67f5c7261c881ff926a352f92998b654bc8e1c6eec370 $ls -Z /test system_u:object_r:container_file_t:s0 file ``` - -    - - diff --git "a/docs/zh/docs/Container/\346\224\257\346\214\201OCI-hooks.md" b/docs/zh/docs/cloud/container_engine/isula_container_engine/supporting_oci_hooks.md similarity index 100% rename from "docs/zh/docs/Container/\346\224\257\346\214\201OCI-hooks.md" rename to docs/zh/docs/cloud/container_engine/isula_container_engine/supporting_oci_hooks.md diff --git "a/docs/zh/docs/Container/\345\215\270\350\275\275.md" b/docs/zh/docs/cloud/container_engine/isula_container_engine/uninstallation.md similarity index 37% rename from "docs/zh/docs/Container/\345\215\270\350\275\275.md" rename to docs/zh/docs/cloud/container_engine/isula_container_engine/uninstallation.md index 19245cfdb..55f883df1 100644 --- "a/docs/zh/docs/Container/\345\215\270\350\275\275.md" +++ b/docs/zh/docs/cloud/container_engine/isula_container_engine/uninstallation.md @@ -2,23 +2,21 @@ 卸载iSulad的操作步骤如下: -1. 卸载iSulad及其依赖软件包 - - 若使用yum方式安装,卸载的参考命令如下: +1. 卸载iSulad及其依赖软件包 + - 若使用yum方式安装,卸载的参考命令如下: - ``` + ```sh # yum remove iSulad ``` - - 若使用rpm方式安装,需卸载iSulad及其依赖包,卸载单个RPM包的参考命令如下: + - 若使用rpm方式安装,需卸载iSulad及其依赖包,卸载单个RPM包的参考命令如下: - ``` + ```sh # rpm -e iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm ``` -2. 镜像、容器、volumes以及相关配置文件不会自动删除,需要手动删除。参考命令如下: +2. 镜像、容器、volumes以及相关配置文件不会自动删除,需要手动删除。参考命令如下: - ``` + ```sh # rm -rf /var/lib/iSulad ``` - - diff --git a/docs/zh/docs/cloud/container_engine/isula_container_engine/upgrade_methods.md b/docs/zh/docs/cloud/container_engine/isula_container_engine/upgrade_methods.md new file mode 100644 index 000000000..959624d09 --- /dev/null +++ b/docs/zh/docs/cloud/container_engine/isula_container_engine/upgrade_methods.md @@ -0,0 +1,32 @@ +# 升级 + +- 若为相同大版本之间的升级,例如从2.x.x版本升级到2.x.x版本,请执行如下命令: + + ```sh + # sudo yum update -y iSulad + ``` + +- 若为不同大版本之间的升级,例如从1.x.x版本升级到2.x.x版本,请先保存当前的配置文件/etc/isulad/daemon.json,并卸载已安装的iSulad软件包,然后安装待升级的iSulad软件包,随后恢复配置文件。 + +>![NOTE]说明 +> +> - 可通过**sudo rpm -qa |grep iSulad** 或 **isula version** 命令确认当前iSulad的版本号。 +> - 相同大版本之间,如果希望手动升级,请下载iSulad及其所有依赖的RPM包进行升级,参考命令如下: +> +> ```sh +> # sudo rpm -Uhv iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm +> ``` +> +> 若升级失败,可通过--force选项进行强制升级,参考命令如下: +> +> ```sh +> # sudo rpm -Uhv --force iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm +> ``` +> +> - 如若iSulad依赖的libisula组件发生升级,iSulad应该与对应版本的libisula一起升级,参考命令如下: +> +> ```sh +> # sudo rpm -Uvh libisula-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm iSulad-xx.xx.xx-YYYYmmdd.HHMMSS.gitxxxxxxxx.aarch64.rpm +> ``` +> +> - iSulad在openeuler 22.03-LTS-SP3之前的版本使用lcr作为默认容器运行时。因此,跨此版本升级时,在升级之前创建的容器仍是使用lcr作为容器运行时,只有在升级之后创建的容器才会采用新版本的默认运行时runc。若在新版本中仍需使用lcr容器运行时,需要修改isulad默认配置文件(默认为/etc/isulad/daemon.json)中的default-runtime为lcr或者在运行容器时指定容器运行时为lcr(--runtime lcr), 在升级时若对应的lcr、lxc版本发生升级,同样应该与iSulad一起升级。 -- Gitee

  

命令行

+

命令行

配置文件

+

配置文件

说明

+

说明

设置CNI网络插件二进制文件所在路径

+

设置CNI网络插件二进制文件所在路径

--cni-bin-dir

+

--cni-bin-dir

"cni-bin-dir": "",

+

"cni-bin-dir": "",

缺省值为/opt/cni/bin

+

缺省值为/opt/cni/bin

设置CNI网络配置文件所在路径

+

设置CNI网络配置文件所在路径

--cni-conf-dir

+

--cni-conf-dir

"cni-conf-dir": "",

+

"cni-conf-dir": "",

系统会遍历目录下面所有后缀名为".conf"、".conflist"和 ".json"的文件。缺省值为/etc/cni/net.d

+

系统会遍历目录下面所有后缀名为".conf"、".conflist"和 ".json"的文件。缺省值为/etc/cni/net.d

指定网络模式

+

指定网络模式

--network-plugin

+

--network-plugin

"network-plugin": "",

+

"network-plugin": "",

指定网络插件,默认为空字符,表示无网络配置,创建的sandbox只有loop网卡。支持cni和空字符,其他非法值会导致isulad启动失败。

+

指定网络插件,默认为空字符,表示无网络配置,创建的sandbox只有loop网卡。支持cni和空字符,其他非法值会导致isulad启动失败。