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