|
|
楼主 |
发表于 2025-1-16 17:29:46
|
显示全部楼层
1、Containerd镜像管理
- F3 _1 F8 K; D! O/ K0 ^5 J8 K1.1 Containerd容器镜像管理命令
, Z: k! W( w, q6 W; a- Fdocker使用docker images命令管理镜像
/ W$ K( `; O2 Q" T8 }单机containerd使用ctr images命令管理镜像,containerd本身的CLI
/ F0 a# O% |6 m& c. g, _k8s中containerd使用crictl images命令管理镜像,Kubernetes社区的专用CLI工具
: u: }# Q0 ], s代码语言:text
2 ^1 x/ a; l2 B5 z% ]+ F复制; ?" V3 i/ p$ J8 u. I2 r! D
获取命令帮助9 W( D# j6 x7 q$ Y) C
# ctr --help( L3 o6 M% N: ?/ n: f% O9 O
NAME:
, R6 F. L1 ]: w# M5 N) ?; Q ctr -% b) M' _; |- K$ p! ]
__
. \2 t" v# n: a _____/ /______* G2 y1 F* W/ u; @* t( ]
/ ___/ __/ ___/1 r7 c0 U) d: `) `4 q
/ /__/ /_/ /
# V4 X6 G3 K& |2 a% a3 |\___/\__/_/3 e; ?* ?/ E X, R& X. b! ?8 [
: p& Q6 u0 _. C8 H......
; W+ G( C( x6 m, Y* S8 f代码语言:text$ h, X; w% t w9 T2 h% |5 ~
复制7 \# l6 x: Z& s+ K) U" t
获取命令帮助
( j& R: p5 n1 e7 e# ctr images, x% ^3 b: ?- e. M; m- d4 l
NAME:! c; r7 x/ y4 W2 Q7 O2 {6 S% L' ]
ctr images - manage images
" \' ]) F0 s! `: G* N
& r" S% _. W; z+ eUSAGE:
1 ~; ]& K! I I7 f+ B ctr images command [command options] [arguments...]
" u$ [5 ^5 e- m5 a
* Z6 ^4 i, w5 s9 S! lCOMMANDS:
/ @0 x' X4 M' Z' ~( q2 F3 X7 u check check existing images to ensure all content is available locally
/ _4 l$ K8 q' R! f5 b9 z8 c& r export export images
9 h* h2 `* I9 E% f' ~: K; |/ y5 g+ n import import images
3 o6 |( J0 h. S. ]* G, x list, ls list images known to containerd
) I) R& K: w; l1 Z mount mount an image to a target path1 z& a S7 O; V* I
unmount unmount the image from the target
6 i1 n5 Z4 L5 ^. b- c pull pull an image from a remote9 k Y5 x$ E- A8 y {( \
push push an image to a remote
5 |5 b2 z9 ]5 g4 }+ S1 w+ `0 a/ W delete, del, remove, rm remove one or more images by reference
# ]4 t% m, L1 o9 n- y tag tag an image, x1 _# i! O1 [1 H T
label set and clear labels for an image& W# M {/ p2 i u* k8 H; Y
convert convert an image) E, R8 L- t8 J
8 k9 y5 s7 c& [$ B4 ^8 {
OPTIONS:
3 H5 o. i n" Z" A0 U, ]2 { --help, -h show help
5 \- P4 J5 l% \( i( v# t- @ B9 ^1.2 查看镜像
+ ^* ~- W, Q% y T8 Q代码语言:text9 n& c2 K: g7 P! f6 R- Z
复制9 k! i% ?$ R1 m0 A: P2 @
# ctr images ls
4 j6 `7 W+ i% K3 jREF TYPE DIGEST SIZE PLATFORMS LABELS
- g/ n& g: j1 _) a3 O% V1.3 下载镜像! ]9 [3 ~! J' ^* W2 E
containerd支持oci标准的镜像,所以可以直接使用docker官方或dockerfile构建的镜像
' B( ?2 s0 a1 D1 ~7 P: z
5 j1 `$ K( x) A2 F8 g代码语言:text' r3 ^/ X! Q, `. A
复制; G) S1 q: L4 {. ?
# 镜像名不能简写,--all-platforms:所有平台,不加的话下载当前平台架构
4 x+ z' X' u) r$ t) |# ctr images pull --all-platforms docker.io/library/nginx:alpine3 M' I9 j) U/ q, g! W
# ctr images pull docker.io/library/nginx:latest
& ]( \5 N0 r1 K
1 i: U' T! f* P# uname -a
# p5 F" l+ t7 p代码语言:text
3 o% }2 l2 u- J4 P复制
) O' ^# C) G- B0 V- Z$ c% ? F说明:
% A8 T8 H8 l8 \: M1 b% k这里ctr命令pull镜像时,不能直接把镜像名字写成`nginx:alpine`8 j& ]- ^/ u. ^9 B6 D- G ^ H
代码语言:text
; E I# O ~7 H8 s; ^- X复制
* M4 W& O0 o! N. T6 B& l" `, h查看已下载容器镜像- w2 A* f: h; t& |" ]* Z
# ctr images ls6 B! Q0 o* f0 p, j& G n
REF + Q! \- K! z+ w7 B# i" k: j9 J
+ j( ^' W+ Z0 w& e; a
TYPE : v. _% G9 l. ]( L
/ b' `4 }$ b, L% i8 x
DIGEST
" `; m/ P; X5 K: u" e$ T, |. I
/ l: P/ N6 w4 K) q% c: \docker.io/library/nginx:alpine" y) r+ V/ n# w* O, a+ g, e" r
8 l# u# S! X1 @! q. B4 ^; f7 ~
application/vnd.docker.distribution.manifest.list.v2+json4 v& a9 E+ F7 C6 t+ y, K& L& D% T
. f# x9 k: i) bsha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d38 Z$ @9 Y6 f6 L" H% J# g
: W+ {- [/ D2 P- v' X" |6 H0 MSIZE
( a5 M1 d$ B+ ~# ?/ | `
, V9 Y, p7 i" K+ e4 x1 m% {. }. XPLATFORMS
! I8 V! Q$ `3 h; x Y/ c d" n# z, y. w5 ~
LABELS$ n. F4 ?4 ~- W5 u# z4 C" W
" T) [3 Q- ^! Y' a9 J* U) v+ y0 V9.7 MiB
) ?$ a' n7 K% X5 Z
2 C7 t* T9 @; T! I; r7 Rlinux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x$ R) |' q) a3 P2 s- Y! a
0 d: v8 |9 t5 O2 e( b代码语言:text f5 u z" X1 `1 d
复制) F7 k: h( n0 j2 |0 \. l4 `
指定平台下载容器镜像. [& _6 a2 D4 o8 d2 t
# ctr images pull --platform linux/amd64 docker.io/library/nginx:alpine
. R' l9 @! n' j( }' U没有镜像是无法运行容器的。3 }0 Y ^- p4 i3 D
, V! y& H R$ M v5 B% G4 ~1.4 镜像挂载* _& t, F! k/ O4 ]! p& W
方便查看镜像中包含的内容。# H' X* \: C- @1 y# y
1 b2 z) j3 r& r" w7 [" G- W; Z
代码语言:text- L- E: T" H8 Q( n3 c) m
复制
$ e4 D1 q* X/ L( R/ b) n$ H把已下载的容器镜像挂载至当前文件系统; z5 _: X- k: [! n3 P* i
# ctr images mount docker.io/library/nginx:alpine /mnt* e1 {% ?9 R, N V: t0 _; v( x/ c
sha256:af2fcce448e2e4451a5f4796a9bf9cb5c9b5f88e0d6d10029cada42fb9d268ac
/ A# D4 N/ B3 b" b/mnt
. Z B7 {2 w2 l& B$ f6 i5 ?5 P[root@localhost ~]# ls /mnt
2 x, \5 O' Z0 |bin dev docker-entrypoint.d docker-entrypoint.sh etc home lib media mnt opt proc root run sbin srv sys tmp usr var C* X, N7 i* n! i
代码语言:text6 T2 l! I' H7 W
复制
* ~) P7 R$ K( j+ |0 V1 X卸载: Y- x/ W- Z" R0 H
# umount /mnt8 S3 Q/ D6 \9 G' U! g! |. `. f
1.5 镜像导出
0 L3 ~* w L9 b, L代码语言:text
" r$ Y7 ^. ?, u7 H7 g7 o7 A7 u复制
% p; w. A' L3 [) ]9 g把容器镜像导出; B/ A2 d3 s" H3 U9 F1 H" Y2 O
# ctr i export --all-platforms nginx.img docker.io/library/nginx:alpine
2 `( H: n7 a+ f代码语言:text
; O7 h- \: j+ }2 q复制6 S+ U$ d+ b/ t
说明7 f' r8 d. n; M0 E ]
--all-platforms,导出所有平台镜像,本版本为1.6版本,1.4版本不需要添加此选项。
6 M! N5 B* D4 C$ {5 @' g代码语言:text3 B6 L) v- m! q: A6 T! N
复制
9 v8 U: X3 e5 @8 V9 J查看已导出容器镜像: }' p3 Z+ {9 T$ A7 V S
# ls2 x2 g, L M" h# w* ~1 F: o
nginx.img" E* e8 x1 Y/ z( k, N% C4 `/ y
1 A' e5 {# U0 z, T5 L8 ]# ls -lh
8 r$ m# r+ g9 L* n* y总用量 196M8 r% B1 y" E5 J
& Z7 D: J: s- g+ w5 a-rw-r--r-- 1 root root 73M 2月 18 14:48 nginx.img
* j# O0 |8 U. y* S$ J8 ]) m1.6 镜像删除
5 X- g* [. m' Z; P! u6 [0 Q代码语言:text
$ ]( ~' x9 ~3 [! p) p9 T1 U8 s复制, e& d- P# k& {: j: B
删除指定容器镜像8 h: Q4 T0 v7 a# m. \9 m: y) Y
# ctr image rm docker.io/library/nginx:alpine
" j" y; Q6 [2 v' z- [% p9 ~docker.io/library/nginx:alpine" y/ O- O9 g; X2 ?2 P# K) C6 H
! [# M- ]4 H7 v
再次查看容器镜像 M5 ~& d/ l" ?) |3 B
[root@192 ~]# ctr images ls4 U+ z7 O3 d* H6 a2 h3 @
REF TYPE DIGEST SIZE PLATFORMS LABELS
9 S& ]' N- X5 i! e$ V- w1.7 镜像导入
, ]# W, @8 {3 b) h4 C& i代码语言:text) i/ L3 N; f$ B! p" N
复制, m3 c; [$ c9 t0 ], }' a1 t
导入容器镜像
7 R8 O% {! e4 f7 F$ W4 o A# ctr images import nginx.img+ J# ]) I: q, W# k h
unpacking docker.io/library/nginx:alpine (sha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d3)...done; Y& m8 M* `) ]! F' A* J
1.8 修改镜像tag' z) p# T* d- W9 ~5 c
代码语言:text+ V( A7 m6 r9 e6 o j" D
复制
/ ^" s3 B! r4 }/ L J* Q @# ctr images tag docker.io/library/nginx:alpine nginx:alpine0 G+ K- K- y) t$ r( m
nginx:alpine
9 l, I7 k7 F( x5 N+ r. M/ ^1 o1 j4 ~1 d7 X2 Y
# 建议修改tag的名称为:镜像仓库地址/目录/镜像名" c2 [% \8 [0 |- _3 o
代码语言:text
$ u* g6 L, F" B3 D! H* x6 |复制
3 ?* i3 R1 ]6 l: @. {6 J说明:( o' P) r+ J9 u2 p
把docker.io/library/nginx:alpine 修改为 nginx:alpine- H$ ~3 j& C+ f6 m8 {, x
代码语言:text- G* j Y8 T. Y+ Q. a3 A% F7 Z& D+ T
复制
- N7 j' \. H# Y6 O查看修改后的容器镜像
9 Y, ?' O: J0 x* I6 `' ~3 U# ctr images ls
8 V/ E: d' Q) d2 D* w6 X3 K3 BREF TYPE DIGEST SIZE PLATFORMS LABELS3 Y }9 G. L2 o& |) M, l
docker.io/library/nginx:alpine application/vnd.docker.distribution.manifest.list.v2+json sha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d3 9.7 MiB linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x -! }' X$ C8 \8 a6 [
nginx:alpine application/vnd.docker.distribution.manifest.list.v2+json sha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d3 9.7 MiB linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x -: g" Q- h+ X8 e! J
代码语言:text M9 x! | |" |8 r' C4 H- e
复制
' @2 K* y3 L6 E7 j修改后对容器镜像做检查比对
6 {& Y1 Q$ V9 s2 H& R# ctr images check
0 y! K( w( l; V3 }' j$ _REF TYPE DIGEST STATUS SIZE UNPACKED) }; ^0 k% P8 K `0 s
docker.io/library/nginx:alpine application/vnd.docker.distribution.manifest.list.v2+json sha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d3 complete (7/7) 9.7 MiB/9.7 MiB true- Q7 x; h6 x3 D8 o, Q. W' i
; |$ C3 [, F; ?* c( v
nginx:alpine application/vnd.docker.distribution.manifest.list.v2+json sha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d3 complete (7/7) 9.7 MiB/9.7 MiB true
8 Y0 p% d7 Y1 ]( g, O& I2、Containerd容器管理
+ j# e. J7 A h/ e; t& P H2.1 获取命令帮助; B- h5 \* W) w1 R% M* _# V
2.1.1 获取ctr命令帮助# O" g# ? d) h: F
代码语言:text g5 S/ c* ^$ ^: `
复制% ~5 ~( _8 h @+ x/ c5 s5 f
[root@localhost ~]# ctr --help2 m6 Z( O, [) @. W! L" g
NAME:
8 `. s' B' w+ s9 X ctr -
D7 v4 b* [. D0 x __# i) O8 B( v1 B+ q. n
_____/ /______
! F- A8 [. x9 r; ?2 V / ___/ __/ ___/4 o- a* _. E# s; ^3 X8 h
/ /__/ /_/ /% _' ^1 _7 f: b% \' t
\___/\__/_/
# q" [$ i2 M8 I3 U7 v
3 D$ r+ R3 F% }( K/ K( \' ^containerd CLI
, C! y: X0 P# C" A; e7 \3 d6 O( ]3 O- B8 M3 b* N
. K, U2 K( @4 \! k% R4 D......
5 p) G- f2 ~/ }+ q2.1.2 获取创建静态容器命令帮助. U/ A# G+ w& f3 ^6 f8 Y
代码语言:text
f' x% W1 B; W1 l5 ~复制5 K) U! {8 l8 Y8 h1 N6 V7 d
# ctr container --help
) u2 v! L. x5 `" n- LNAME:
. ]4 b" ]: I H3 f" _9 N0 U% c7 |9 @5 W ctr containers - manage containers/ v% Q. J) ~# g9 x0 x
/ u* N( M/ Z! G8 n0 L6 M
USAGE:% E4 p0 z; s' T' b
ctr containers command [command options] [arguments...]
3 J+ v. M( j2 m
4 R7 Q5 x8 e' P# RCOMMANDS:5 ~. ?1 C9 A& ?" E* ]% j
create create container) c, s7 [) R- n- a) H
delete, del, remove, rm delete one or more existing containers. @* I* R% F' D5 j F5 o# v/ W
info get info about a container
5 r0 Y( s. D* {$ c list, ls list containers; U' O& g0 f5 S8 f- b
label set and clear labels for a container
1 m7 q9 z5 x' D* r7 ] checkpoint checkpoint a container) V0 p% @0 G6 }0 d: Y5 [/ t
restore restore a container from checkpoint% r. i, D3 F; S7 q; h
/ e) h$ n4 Q! Q; d6 ~# D3 O! r
OPTIONS:8 K' a) s% Y5 p" A' d" ^
--help, -h show help c9 f3 |0 v& [, }
代码语言:text
! b/ F6 z9 v7 a/ U+ }" W复制8 B0 [4 Z7 ~, i' T) n
说明:
7 K! X& e1 V% l" Z2 J4 @9 j1 V7 T' K7 [/ k) v) X: e% U6 |
使用`ctr container create `命令创建容器后,容器并没有处于运行状态,其只是一个静态的容器。这个 container 对象只是包含了运行一个容器所需的资源及配置的数据结构,例如: namespaces、rootfs 和容器的配置都已经初始化成功了,只是用户进程(本案例为nginx)还没有启动。需要使用`ctr tasks`命令才能获取一个动态容器。
$ }; T# B+ V9 i( _2.1.3 获取动态容器命令帮助& c, ], V$ Y9 }4 T6 L) {" L& Q9 H
代码语言:text
2 C; d* F* Y6 y' X* X2 n# o复制' y; d% G1 N- N+ v. U
# ctr run --help
2 {0 l9 o y1 ]: g7 ?7 J4 _" M0 V2 xNAME:$ J% I4 U7 x. y" W' @
ctr run - run a container4 M1 }, n# j- J1 \' Y
9 g) U9 ]! O/ p; ]% A u......$ ~$ @: Z" H+ ]* g4 P
代码语言:text, ?- q. c1 P; U/ }& p4 [
复制3 v7 L o! P# F8 Q9 h: }9 C3 y1 w
说明:- Y# q# G/ \; y: K) a& ]9 f+ i
使用`ctr run`命令可以创建一个静态容器并使其运行。一步到位运行容器。 E- |1 u! V, w# a
2.2 查看容器$ p( H9 S: B" E/ l% C8 ]+ a
container表示静态容器,可用c缩写代表container
0 `; T" F5 N- H3 J& ]9 w( Y0 C( ]1 n5 c( z
代码语言:text
" ]" Q6 S* @; ^- ]1 Y' i" }# @2 t复制
0 ]3 F- s9 e# c' S, M9 O# ctr container ls0 z7 _( U/ a/ t& `
CONTAINER IMAGE RUNTIME/ }% U4 o0 b8 I+ g
或7 }$ L- i( E" V' L' H$ B
4 p: V- I, M1 I0 Q" Y代码语言:text* Z7 |( A1 Y, |& F
复制
5 ]5 J' Y2 k, R$ H6 @% K/ f6 F# ctr c ls0 _# v" n( @! B" ?% K! m+ d, L0 O: A
CONTAINER IMAGE RUNTIME: e* o% I m' C9 `
以上命令无法查看出来容器的静态的还是动态的
' e4 ^) Y1 R3 E% Z- Y) a1 g# y* M/ [# ~
2.3 查看任务% P$ [. q! l' k% I7 T' o
task表示容器里跑的进程, 可用t缩写代表task+ V! _3 g. L% e& X5 _
& q3 g; f- L. J0 n' }
代码语言:text
4 r$ o. I: t2 J' e4 O复制 E9 f$ `& C2 O1 d; X' M
# ctr task ls! e0 O9 u4 e( c" D" s
TASK PID STATUS" f: K! a9 `3 }
或
. l# c$ x" H2 O9 p1 K8 y$ A
0 X7 ]. H3 T) ?5 Y, o代码语言:text
& {, [1 T1 T2 b' ~复制
0 g) ?( h- a2 a0 {# ctr t ls
5 N* Z% ?8 ?( ]8 P) y2 k, hTASK PID STATUS
% I$ X# K. W4 Q; W2.4 创建静态容器8 z4 \0 [" E* p9 |/ s2 w3 d
代码语言:text' e4 D) a8 k2 ?2 d& j/ Y; e$ E! H: _
复制: p% e# x4 n# Q3 R8 }2 i$ e
# ctr c create docker.io/library/nginx:alpine nginx1
" w5 ^6 k- w) A代码语言:text
' n [ V$ b3 h$ G- E复制
: \& x/ r* G" S$ Y# ctr container ls
; F! e% m$ p) ?" y: yCONTAINER IMAGE RUNTIME
9 p( Z7 \6 j! c* x# l! ~6 {% Lnginx1 docker.io/library/nginx:alpine io.containerd.runc.v2
% ~$ k3 a5 h% @0 M代码语言:text
' M) t `; ^% i复制2 p3 ^- }4 M( h4 W
查看容器详细信息
; Z6 A! W2 c" P+ u2 p7 ?# ctr container info nginx1
2 I' n$ W4 g$ X, D2.5 静态容器启动为动态容器
- z. n/ ^ y+ l$ }( I% R代码语言:text
4 ?1 z7 O# H! j) N1 P& ?5 o4 l复制4 C' I) a+ t) a; H. f
复制containerd连接runC垫片工具至系统% Z& O0 r" j% Y5 y; ?* Z; Q
# ls usr/local/bin/
}# e( \' @4 G: s! @8 }$ Q3 ?containerd containerd-shim containerd-shim-runc-v1 containerd-shim-runc-v2 containerd-stress crictl critest ctd-decoder ctr" S/ k# h& \6 b) _7 W
[root@localhost ~]# cp usr/local/bin/containerd-shim-runc-v2 /usr/bin/. o8 x* ~( \2 ?5 ^5 G ^% h
代码语言:text- B% [ v* A: V( J6 W
复制/ e- u: |2 Q2 J1 M
启动task,即表时在容器中运行了进程,即为动态容器。
; T. c: Y; E3 @: y# ctr task start -d nginx1
" C. }, k& W% K f% Y/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
- u5 {! S/ E* m$ |8 V1 Q/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
1 D: Z& _1 v% l2 ^/ N+ y代码语言:text
! @ c8 q: Z$ H复制# w$ b+ ?8 U }3 E* E7 H
说明:
8 S0 M A+ T2 O: A; g-d表示daemon或者后台的意思,否则会卡住终端
* o+ x- k8 B- b2 Q g6 O, i代码语言:text
! A: K$ u5 u& C/ l l' e8 n" }复制
: K# z/ `% t5 k1 f4 g$ r& C查看容器所在宿主机进程,是以宿主机进程的方式存在的。' B! I+ u) \3 N8 d% h5 H
# ctr task ls
# A5 a; m/ E9 A5 }3 h' H3 D5 R4 ATASK PID STATUS, n9 C3 M# Z2 D/ g5 r( ?+ J( F
nginx1 3395 RUNNING
/ A5 @# b7 H4 `2 n代码语言:text: G+ S/ v# k/ z
复制
- f+ q% L/ j( W" |& _查看容器的进程(都是物理机的进程)
1 v* j% D# r3 I0 |6 r2 {# ctr task ps nginx1
( Q6 |3 G! z4 w+ \+ v0 ~) M5 U8 |* ZPID INFO
" b9 Y/ W: K( `" T; W0 j, x; M. T3395 -& h$ F! A# W: R, D. A l# _! O
3434 -. e5 s4 G7 o9 z y* @
代码语言:text9 }/ U1 ^8 v8 s! l Y/ H
复制! M& z# o. {" R2 Q+ n& _
物理机查看到相应的进程
! d2 I$ M3 I; x# I# ps -ef | grep 3395. W# ]3 Y4 h3 C( `
root 3395 3375 0 19:16 ? 00:00:00 nginx: master process nginx -g daemon off;$ I4 o# u0 }7 o) s
101 3434 3395 0 19:16 ? 00:00:00 nginx: worker process
! P. y+ Y. W$ b2.6 进入容器操作
6 Z% E8 O2 w6 q. |& E: O3 g代码语言:text
. _! U' u M9 n" f I复制
- E# L& s& r! T, ~+ H, k! v) ^# ctr task exec --exec-id 1 nginx1 /bin/sh
; x. a3 C/ k# M8 @7 r5 V8 l
& I% {+ h6 F! g2 ~5 a5 l# ifconfig 查看网卡信息9 ~4 F1 p3 }$ W0 U& [) q
9 U4 J6 ?6 a W7 O
...
. H6 r. v5 ] Q
( i/ i0 z1 K9 i, `# curl 127.0.0.1 访问本地提供的web服务
; |9 z9 }+ I4 _( c* [...! I/ H& b; B6 t8 y& G
代码语言:text1 w7 j* I/ p" v8 ]% |
复制4 h* }/ ~8 ?* n
说明:% \; [; Y& J& D4 Q
为exec进程设定一个id,可以随意输入,只要保证唯一即可,也可使用$RANDOM变量。
, k5 N+ X0 m- z8 m* @# t6 o. j2.7 直接运行一个动态容器' u4 }9 o6 A+ j& R
代码语言:text+ L) }3 I( ^9 q9 s+ p Z3 q- j6 Z
复制
, a/ v7 Q0 s/ r3 W6 v( j8 |% _# ctr run -d --net-host docker.io/library/nginx:alpine nginx2
) h' }3 F* D, `1 ~4 z/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration Z/ d3 G# _5 u! G8 u P3 F
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/ G1 r+ S; Q4 X/ \) _! J代码语言:text2 P0 S$ O; p: P
复制 `; b/ K. k9 l7 @
说明:
3 C2 a$ I/ p+ a5 `* -d 代表dameon,后台运行
Q6 [9 c- H6 t" p2 P8 A# Q7 w* --net-host 代表容器的IP就是宿主机的IP(相当于docker里的host类型网络); s; E! R2 w* I# w3 I3 p! l
代码语言:text
6 f) p5 {3 x2 p8 R7 @) w, |+ O复制
" Z$ m) d5 v) F& @5 ~9 G; Y( |3 \6 y查看已运行容器# i) T% H% f. g) ` }7 M
# ctr container ls
6 q3 K/ Y% d& iCONTAINER IMAGE RUNTIME
1 y$ c' e- s+ X! d6 J3 qnginx2 docker.io/library/nginx:alpine io.containerd.runc.v2
! I' _- p2 w3 }) f( x6 }代码语言:text' ^0 T+ D% m5 b) _ L! b7 s0 I
复制
" w$ B* F* E# I( C& m查看已运行容器中运行的进程,既tasks
4 @0 Q+ I9 x5 A p0 N8 ]5 R# ctr tasks ls
3 v( ]0 J: `- S8 s" `3 YTASK PID STATUS
* Y+ T/ }3 s8 b" z knginx2 4061 RUNNING3 M ^0 m8 n$ U$ G
代码语言:text9 g, |+ ?. V) n0 T$ z& R
复制
r( N0 i- W. c7 A8 n进入容器' ^$ t1 i4 |/ r5 {
# ctr task exec --exec-id 1 -t nginx2 /bin/sh! R# ~5 z! C% L* j1 E- S5 r6 l* V
代码语言:text6 M- k% ?2 _/ J3 ~4 y5 I- Q# Z
复制& v" f6 e- J4 s( |' S& J9 M
/ # ifconfig
8 N% h2 m3 g* M8 Z+ F2 f* [" fens33 Link encap:Ethernet HWaddr 00:0C:29:B1:B6:1D
6 l) C( R" l! H. ^1 x9 Z1 |0 w% z inet addr:192.168.10.164 Bcast:192.168.10.255 Mask:255.255.255.0
/ T, f8 O$ v* E7 R inet6 addr: fe80::2b33:40ed:9311:8812/64 Scope:Link- i) F& v7 P. e6 T* X
inet6 addr: fe80::adf4:a8bc:a1c:a9f7/64 Scope:Link
; v) |0 N, G" E# Q) r9 H X' S UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1) L+ ? {& c. a6 M2 N- D0 R' X
RX packets:55360 errors:0 dropped:0 overruns:0 frame:0
8 e, |5 M$ T, t* D TX packets:30526 errors:0 dropped:0 overruns:0 carrier:0
2 z2 U/ j( Q! F5 f% X collisions:0 txqueuelen:1000
; o7 m9 j" F! ]4 `" ?& a/ L% a RX bytes:53511295 (51.0 MiB) TX bytes:2735050 (2.6 MiB)
1 D3 n. O( u; ?; Y
4 B- M! x4 E- \+ ]# vlo Link encap:Local Loopback \. y3 \/ g; H3 K
inet addr:127.0.0.1 Mask:255.0.0.0
5 P! ^. o6 {8 W, u2 v' w inet6 addr: ::1/128 Scope:Host3 g" c. t% t/ I: N( c. S1 p
UP LOOPBACK RUNNING MTU:65536 Metric:16 x5 z1 Q9 _/ ~ ~) e% c& q" A
RX packets:68 errors:0 dropped:0 overruns:0 frame:0
$ S7 m3 p- C& L+ S% U' m2 J# e% Q TX packets:68 errors:0 dropped:0 overruns:0 carrier:07 m8 ?9 H, w6 d: o1 v
collisions:0 txqueuelen:10006 a# M; r. ]+ A* f$ A, C
RX bytes:5916 (5.7 KiB) TX bytes:5916 (5.7 KiB)
- z M v1 z1 l2 o' K3 V$ h+ T( J% R: L; b' D( ?6 u
virbr0 Link encap:Ethernet HWaddr 52:54:00:E9:51:82
1 x- x2 m% ^; x0 L7 M% L. e inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
! T' Q( U7 k. F8 |$ ~1 l/ q UP BROADCAST MULTICAST MTU:1500 Metric:1: |4 Z2 X- w, t2 s% S! ~
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
- ]. q* t3 K7 X4 F3 M- J TX packets:0 errors:0 dropped:0 overruns:0 carrier:0+ d& V3 `% E$ }3 R2 I- M: Y
collisions:0 txqueuelen:1000
7 G# c+ T! R$ a7 Z3 J RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)4 z. h |4 W9 x& G" _$ p
代码语言:text
0 F. f( w1 u# q1 j复制
& x# }* \$ o+ `. d: f- p6 b为容器中运行的网站添加网站文件7 \: z8 {( t5 E4 M/ Q
/ # echo "nginx2" > /usr/share/nginx/html/index.html2 u# G D* L3 P+ @. W
/ # exit
; o1 E/ v3 P3 w; g' ` f代码语言:text
9 s: s$ ~! w4 n8 ]复制' i+ Y! O) O5 a8 K3 h- y! c
在宿主机上访问网站1 r/ T# Q2 C: v x) K" C+ b
[root@localhost ~]# curl 192.168.10.164# c$ x% m0 g# y& i O# @4 n/ i' m
nginx2
; F( ^4 a1 }2 W7 V- Q2.8 暂停容器1 q6 Q; d( o! X3 K# c! A, A
代码语言:text
+ v5 {( I: a' x" _. b复制% b- g3 y# P5 E$ B! ~" g3 r
查看容器状态
8 V1 i, I" r8 c" l( ^# ctr tasks ls
- c( e7 Y- i; t# X$ @: STASK PID STATUS
: Y% Y9 a' j# p' mnginx2 4061 RUNNING& v; _1 s/ A% V0 Y/ u3 j; n
代码语言:text
8 A; d* H$ n* a复制
# u. Z1 p) [1 W( z暂停容器
* F+ Z3 @8 e0 q! L1 ]2 q" ]. Y* h# ctr tasks pause nginx2' X; X* |- U2 _ }3 C
代码语言:text0 M. c z: L, _: n- ^; ]
复制5 p8 j+ Q* I) N! q5 R% l
再次查看容器状态,看到其状态为PAUSED,表示停止。# F H. ^% o) m; p
# ctr tasks ls
/ c6 D" v* }! qTASK PID STATUS" C) o G) U) x( i" ^2 q# P
nginx2 4061 PAUSED
, M" A- A# d) O& f& D: @代码语言:text6 ]# a) p; z* U7 {* S, @
复制3 B0 L; T, l! W7 a$ S5 X
[root@localhost ~]# curl http://192.168.10.164
2 S. x: B5 K# G$ I8 A在宿主机访问,发现不可以访问到网站+ `% N- F6 l& l9 Q
2.9 恢复容器" M2 [1 `: t4 C Q9 ]# m
代码语言:text
3 n( Y4 J0 d: r6 ?: s9 U复制2 U8 I0 y3 b$ [/ L
使用resume命令恢复容器. p9 l+ b# S5 e8 h8 P
# ctr tasks resume nginx27 \6 f2 i0 O- e0 y3 B6 d7 e$ S. w
代码语言:text5 L$ J0 M4 j! c" o4 c
复制6 D1 R6 _* H# P
查看恢复后状态8 V5 [$ C" m! ~) K! c2 N* ~ M
# ctr tasks ls: T7 R) q }- j
TASK PID STATUS6 g( h. X3 z+ }: ]6 v& S, T
nginx2 4061 RUNNING; J: R3 Y" l% l* w" o7 R
代码语言:text& n" X6 G! n2 F6 w/ h
复制" |1 k z8 Y; ^; E! f* n7 `' P
在宿主机上访问容器中提供的服务: `$ K0 R8 D1 c! U
# curl http://192.168.10.164
8 F1 `$ L! U- W; w8 l6 }nginx2
9 W5 I# i$ ?- m3 u- k% e2.10 停止容器
" a( \& _ T$ _, j3 M代码语言:text, I! I# M$ U9 ^, e7 s
复制
, `, W% D2 `3 a% B6 Y, n# ctr tasks --help& i/ |+ f3 [# y3 u$ a/ i, _
......! I# B" E. m4 K8 o' v
代码语言:text
6 O7 [( f! M! s% ?复制
+ R `! m4 J) T) K使用kill命令停止容器中运行的进程,既为停止容器
# d) F* }/ Z3 {5 q' _, z# ctr tasks kill nginx2 R; j8 s# \' K2 q* _
代码语言:text
6 K& E. ]( r- Z [0 M复制
2 \; F" z4 V [5 X' A查看容器停止后状态,STATUS为STOPPED* |" X- }9 f7 O5 d0 Y U( G1 A
# ctr tasks ls
. K2 h; k4 [6 m. PTASK PID STATUS
9 G, u" X+ s8 bnginx1 3395 RUNNING# k) i" s) G1 c; _0 B% [' D
nginx2 4061 STOPPED
: t. [8 [' T: U0 _5 c* n0 [; q2.11 删除容器
; R. t! ?! @" r$ O" G代码语言:text$ M) X- T% Z; x: m
复制
6 ` p3 l& \3 L9 @/ r# ctr tasks delete nginx24 O9 O0 w* f, r! q* L2 r/ r$ P$ \
必须先删除task,再删除容器8 J0 c2 [% {8 B' _/ b
代码语言:text
) R' s' p4 O, H% f5 \7 U复制- K- v; T1 L0 P X- E3 d( g9 j: N
查看静态容器,确认其还存在于系统中
& h: j1 H' X1 ]# ctr container ls2 _, P! M* P: l& n- k* g
CONTAINER IMAGE RUNTIME
( N# y! P. r$ K0 l1 X v9 W" jnginx2 docker.io/library/nginx:alpine io.containerd.runc.v2
" E" F7 @+ ?( _代码语言:text5 A6 O7 `$ `4 K) [7 H: m t- s
复制) e7 _- {8 S; b+ `
删除容器
% T; l! m+ x! F) V+ ?4 b; z4 f# ctr container delete nginx25 y) L" e" b* e0 F; v6 D/ u
3、Containerd使用私有容器镜像仓库 Harbor
/ R% r# h0 ~5 L% N: P3.1 Harbor准备* F& T3 Y: R; V" e* ]9 @4 \2 t$ S8 L
7 ]0 e( N5 O( o% ^4 [8 d
" K6 i8 G( e3 ~. T
3.2 配置Containerd使用Harbor仓库
& ~1 e! p: S( r) n3 Y3.2.1 Harbor主机名解析
5 h- l5 V" A0 f1 F% k6 ~3 ^在所有安装containerd宿主机上添加此配置信息。
# _, n, G! K; V0 H9 [: T2 b- c; E3 g7 x' {( j
代码语言:text
8 i' P; Q9 N3 b3 l; K R复制
* Z, O7 p& Z% l% z+ `- w# vim /etc/hosts
& m$ V; w; V$ D: |+ c. @' \, `3 W( J# cat /etc/hosts5 [8 T$ D1 u' a
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4! U/ C- [* R2 i V- D7 B
::1 localhost localhost.localdomain localhost6 localhost6.localdomain62 S2 S" l/ d" n8 G
192.168.10.165 harbor.kubemsb.com
1 Z8 b x. l# f代码语言:text$ t2 x3 q% D, f0 ]6 ?
复制
% m/ f L7 D' B8 ^0 ^说明1 H4 x7 m4 r7 L1 ^' Q
* 192.168.10.165是harbor的IP
5 V2 U3 ]& K: Y) c) N1 Q$ v$ H Q$ e& q
* harbor.kubemsb.com建议用FQDN形式,如果用类似harbor这种短名,后面下载镜像会出问题) Q: r! u' [0 m, q& f! @
3.2.2 修改Containerd配置文件- ?" R$ C- D# q7 r9 y5 r. k
代码语言:text
1 T; G( S( X: @: @5 j" ?复制
. i+ Z" G# F' W% q1 C- k此配置文件已提前替换过,仅修改本地容器镜像仓库地址即可。, z0 R. U/ Z6 G# M! P: K
# vim /etc/containerd/config.toml% N O+ K2 v2 ^5 \# ]
# cat /etc/containerd/config.toml6 f5 O/ S; |1 Y( `
root = "/var/lib/containerd"
- L! j# E$ d( ~) ~state = "/run/containerd"
" Z/ h' D# K. ^8 \* S1 \0 [oom_score = -999$ U/ ^5 n c$ t
+ X% p! }! p" P8 s[grpc]
! V& B3 |9 w0 @) F8 C# i6 f+ F address = "/run/containerd/containerd.sock"8 O6 c# y+ U% V5 I6 D
uid = 0
a3 n; T9 ]9 n2 ^8 i* d5 { gid = 0& N, m3 [7 F6 s
max_recv_message_size = 16777216
7 L' H( N/ R3 m$ k7 z max_send_message_size = 16777216
- i9 d J5 W3 i) j. ]3 U5 Z/ J2 q a) t* _
[debug]
# C# m/ K; s* \# l) b2 `( ?$ t4 {/ O address = ""
7 P* b2 G3 i( F* O uid = 0+ H* m, p) N+ t- g( U9 |. w; H2 e
gid = 0
% _! D! E4 ?# t @ level = ""
# P( k: S3 B* m) N! m
6 n3 f; r0 P/ Y; F% {[metrics]
! @, ^7 e. G$ Y' O2 L: u address = ""
4 v7 i, P7 e; {( N: L, W grpc_histogram = false
& x; |& X% O& H% ~, n, O6 m ?+ n
, @9 U/ M* ~8 i/ K" t[cgroup]3 P. Y1 l# \& p
path = "". f& G7 @6 h3 Z# B8 l/ ?
4 }: }2 s; s# V/ u! t- H6 b
[plugins]
4 _' t. Z5 n- K4 S) ~- T [plugins.cgroups]: u6 R" H0 L- r
no_prometheus = false$ b% s( m! H: {, |
[plugins.cri]
% B( R0 L* E4 L stream_server_address = "127.0.0.1"+ b) x r2 Z5 z4 \% L
stream_server_port = "0", Y4 S! ^ R% \$ r9 x% @
enable_selinux = false2 |; Y- e% P# d
sandbox_image = "easzlab/pause-amd64:3.2"0 g Y/ T1 _9 X. \3 O( A, H* o
stats_collect_period = 10
. _5 d6 ?: i- j/ h3 q* [( y systemd_cgroup = false, ?) [" S) f5 _! }1 D
enable_tls_streaming = false O5 d# C: d& K
max_container_log_line_size = 16384* P& C. ~; z. Y0 ~) [
[plugins.cri.containerd]
2 o2 H& Z$ a8 q5 [. N) N* S/ K% G snapshotter = "overlayfs"
$ J: w6 y A1 s { no_pivot = false
- f8 K6 E! }$ s [plugins.cri.containerd.default_runtime]
! K P4 P; m; n5 e* S0 W7 A runtime_type = "io.containerd.runtime.v1.linux". D' x- d! J4 P c. b& L
runtime_engine = "" l! W; f4 G; s4 S
runtime_root = ""
- F( y$ _( E/ r- B [plugins.cri.containerd.untrusted_workload_runtime]
( ]7 a" r$ y; z9 @( x M runtime_type = ""
: U6 ^$ W5 I2 t7 M$ s runtime_engine = ""
& U% q5 N* o5 P% Y* g runtime_root = ""
: @0 r/ D, Y* b5 I( } [plugins.cri.cni]
( O# } n$ I4 z bin_dir = "/opt/kube/bin"
( x0 _- h {( @1 B7 y4 W conf_dir = "/etc/cni/net.d": _7 T5 _2 W+ F( L9 S
conf_template = "/etc/cni/net.d/10-default.conf"+ o* I6 @, B6 P# a% @2 p
[plugins.cri.registry]
: `: v+ {: P% P7 G [plugins.cri.registry.mirrors]
! W3 J& y% E1 @+ g2 H [plugins.cri.registry.mirrors."docker.io"]) P4 x1 G9 A' ~6 Z) S
endpoint = [/ e8 v, ]8 J6 v; C" b$ }
"https://docker.mirrors.ustc.edu.cn",
4 `6 `6 ^9 }' {+ i& E "http://hub-mirror.c.163.com"& \ u' t) P# C3 T! }! e3 N2 J
]0 O. h$ S! C0 l4 W; I6 _
[plugins.cri.registry.mirrors."gcr.io"]
* _2 ]; f9 W6 i endpoint = [" i7 [. x, i2 O4 i- }/ e- i c
"https://gcr.mirrors.ustc.edu.cn"* I0 Z+ }! L9 r
]
a! I9 x) s' ^3 G7 a$ q9 W [plugins.cri.registry.mirrors."k8s.gcr.io"]4 s0 V. n1 A' R P5 \- |# \: Q
endpoint = [2 w, S# |* [) a5 N! ~0 Y0 h
"https://gcr.mirrors.ustc.edu.cn/google-containers/"2 u+ `% l1 F9 Y- Q0 P h: _
]1 B; P, j1 }: f {/ X4 ^ @0 X
[plugins.cri.registry.mirrors."quay.io"]
0 R# \/ M6 Z8 i! f3 k endpoint = [" t* @8 W! g' k' B' @( ?9 r
"https://quay.mirrors.ustc.edu.cn"
3 {& E8 h9 G% z( n& t {8 ^ ], o5 A5 w* ~+ b% J+ |& `$ s: v
[plugins.cri.registry.mirrors."harbor.kubemsb.com"] 在此处添加,在镜像加速器下面添加这一段
2 V- H% l! Y% f% b. X: F9 i endpoint = [
: ?4 ]% V$ u, U2 Z/ o* k; D$ E "http://harbor.kubemsb.com"
8 |% m9 I1 ]& w( y' g! e+ ~' \- Q ]+ {9 j8 w3 l" `# N6 ?
[plugins.cri.x509_key_pair_streaming]9 j$ f! Q6 O+ Y. Y, x
tls_cert_file = ""
/ D# M# ~. E, b# v+ O v tls_key_file = ""8 y# R$ w( t2 p! h
[plugins.diff-service]
/ k" v. q0 s T) u- o: V default = ["walking"]8 \" g# y) P# b9 g
[plugins.linux]' M$ A7 W! A. k8 Y/ h
shim = "containerd-shim"
: ?' t- n. b) ?7 t runtime = "runc"
6 A* w0 y* E4 \5 A2 I3 s, w+ `6 K runtime_root = ""
3 |* [& B$ Y+ I) F+ I8 q M6 l: z no_shim = false2 J- T( M8 G6 q# p/ B# P1 y) N* c* [8 z
shim_debug = false
' F0 s& q" @ f( k2 @9 I [plugins.opt]
- A2 @" r6 C5 h$ p/ D9 }7 Q path = "/opt/containerd"& |5 J+ v3 S6 L+ r5 y) H
[plugins.restart]& R, M+ `& |2 r" A
interval = "10s"6 x: c1 f( ? o* V8 d% _1 V
[plugins.scheduler]) W- V. K" @; y5 z1 p) u
pause_threshold = 0.027 b6 w) D9 @0 d2 h* X0 V( L& c
deletion_threshold = 0" {7 X2 @) N) [1 }$ T
mutation_threshold = 100
8 o) U2 v0 X5 E- C1 B# U schedule_delay = "0s"
: x8 z* P. J5 F/ {5 l" t/ { startup_delay = "100ms"% i0 H$ |3 \( ?$ j+ R9 y2 V9 R& L: n
代码语言:text
5 F8 j0 T$ y" r4 z9 o3 u1 Z复制
( U; G9 Z y+ ?+ V: o' L重启containerd,以便于重新加载配置文件。& H. @3 k9 ?9 V% d1 s" c& \
# systemctl daemon-reload8 X. V" L% H+ Z
# systemctl restart containerd
8 c6 V( g: T j% P6 I3.2.3 ctr下载镜像2 Q9 `( |% R0 w
代码语言:text0 n: Z% N4 Y* a3 Q0 {0 G% o0 `! K
复制
1 D2 ~7 M0 x# I8 F下载容器镜像4 U" O4 R. ?- A2 b* K
# ctr images pull --platform linux/amd64 docker.io/library/nginx:latest
, Q) w% H( X# s7 g代码语言:text6 o# d, Y/ t9 W$ ~3 z
复制& \, k. a2 V5 `4 q
说明:% R+ B! o8 ^5 `6 b/ W) X5 k
* --platform linux/amd64 指定系统平台,也可以使用--all-platforms指定所有平台镜像。3 A( ?7 W8 ]6 j6 w: t8 w# W
代码语言:text% w# N" s' ?( S6 Z! _' W$ d4 D" K
复制
7 D2 G [ K- E7 L5 X查看已下载容器镜像- P+ X* r* e- o& x6 u2 F
# ctr images ls
: L% z- B6 G7 [& D0 n+ {REF TYPE DIGEST SIZE PLATFORMS LABELS N/ T9 O3 ^5 q. D7 m2 X
8 g( S7 p9 y* z7 udocker.io/library/nginx:latest application/vnd.docker.distribution.manifest.list.v2+json sha256:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767 54.1 MiB linux/386,linux/amd64,linux/arm/v5,linux/arm/v7,linux/arm64/v8,linux/mips64le,linux/ppc64le,linux/s390x -0 C2 V- V9 w" M, m! Z
3.2.4 ctr上传镜像" H! {, T, f; F9 Q$ Z Y' ~8 X. t
上传到Harbor library公有项目4 S. n) e _' A, ^9 q8 i; M: n
. }2 f, M4 L" [4 l+ m
代码语言:text+ h3 B0 p4 q. A
复制
/ W1 O3 q! m4 L% ^, |) x( n# }; \重新生成新的tag
+ ]' z. H$ R- N' [# P# ctr images tag docker.io/library/nginx:latest harbor.kubemsb.com/library/nginx:latest& @: y3 z3 _) [( m- i( c% _
harbor.kubemsb.com/library/nginx:latest
9 u# @5 h+ w( b代码语言:text
4 w4 |# H! F" \) {. u2 U复制7 n' u7 [% R6 Y9 r. U
查看已生成容器镜像
! k" O' J8 [/ Y. B" z. \, K; V# ctr images ls& z( K: }! Y s$ T! z+ O; v7 J$ w
REF TYPE DIGEST SIZE PLATFORMS LABELS* L: W- ]6 @' f) Y' H3 F
docker.io/library/nginx:latest application/vnd.docker.distribution.manifest.list.v2+json sha256:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767 54.1 MiB linux/386,linux/amd64,linux/arm/v5,linux/arm/v7,linux/arm64/v8,linux/mips64le,linux/ppc64le,linux/s390x -
( b5 y6 R4 z3 Y1 o! F Zharbor.kubemsb.com/library/nginx:latest application/vnd.docker.distribution.manifest.list.v2+json sha256:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767 54.1 MiB linux/386,linux/amd64,linux/arm/v5,linux/arm/v7,linux/arm64/v8,linux/mips64le,linux/ppc64le,linux/s390x -$ e: E( k. A! g( d& j/ o" x
代码语言:text6 `" R; B4 w0 e) Y3 B4 d
复制
0 a1 p X' T/ h; n+ g推送容器镜像至Harbor( C, f3 a$ z* x) c2 R, }
# ctr images push --platform linux/amd64 --plain-http -u admin:密码 harbor.kubemsb.com/library/nginx:latest% v+ a; ~5 T4 A* O4 d; _" n8 m
代码语言:text7 ~! n: V& X/ h4 ]0 ?, p6 ~
复制5 x. L8 f) ~+ G$ n
说明:
& V' H" \: j8 N8 W5 R K) ?/ l/ c, ^1 D( K8 g
* 先tag再push
* L" E' X9 P* F/ k( S$ r$ M* 因为我们harbor是http协议,不是https协议,所以需要加上`--plain-http`
P/ X) B) l9 o2 E* `--user admin:Harbor12345`指定harbor的用户名与密码" q4 k( N1 i; O
代码语言:text; E, }' }, M. Q! j6 l
复制* G4 Z' \, N" f: s, Z/ c0 y
输出:& n/ s: l; s) v. o! s
manifest-sha256:0fd68ec4b64b8dbb2bef1f1a5de9d47b658afd3635dc9c45bf0cbeac46e72101: done |++++++++++++++++++++++++++++++++++++++|
$ k, P4 s, K$ ~% `* V5 Dconfig-sha256:dd025cdfe837e1c6395365870a491cf16bae668218edb07d85c626928a60e478: done |++++++++++++++++++++++++++++++++++++++|
% @1 O( m/ u' W3 H# _' Ielapsed: 0.5 s total: 9.3 Ki (18.1 KiB/s)
, l# o j* H( }. G% b% ^" Q) g; f; F3 f% h0 B1 B0 b# [: G+ M9 K9 x
代码语言:text
" H( w& [6 ]( z9 P5 D1 v复制: z1 s& M) @6 [' C2 I2 X$ X
下载已上传容器镜像
6 L' p6 c( l! D# ctr images pull --plain-http harbor.kubemsb.com/library/nginx:latest
, a% ]& H& {0 b% R! ~/ V' c. b! X/ W/ F9 D2 y4 ^
|
|