- 积分
- 16841
在线时间 小时
最后登录1970-1-1
|

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