一、容器技术介绍(2024-07-01)

一、容器技术介绍

1.什么是容器

容器是一种虚拟化技术,做到了一次打包,就可以到处使用。

2.Docker和容器的关系
Dacker只是一个容器工具,而真正的容器技未是Lxc(LinuxCantainer),Dacker只是更加方便地将其愿现出来。

3.容器和虚拟化

容器类似于虚拟化,但和虚拟化有本质区别。

传统应用部署:硬件-操作系统-应用

虚拟化部署:硬件-操作系统-虚拟化软件-具体虚拟机-操作系统

容器化部署:硬件-操作系统-container runtime-容器

Linux 容器在本机操作系统上运行,与所有容器共享该操作系统,共享内核,共享资源,因此应用和服务能够保持轻巧,并行化快速运行。相较于虚拟机,Linux 容器在运行时所占用的资源更少,使用的是标准接口(启动、停止、环境变量等),并会与应用隔离开。

4.容器基本概念

LXC:是Linux Contain的缩写,就是Linux容器,是一个基于Linux内核功能特性实现轻量级虚拟化的技术。注意,Docker/Podman等容器技术,都在LXC基础之上开发的三方工具

LXC可以在操作系统层次上为进程提供虚拟的执行环境,一个虚拟的执行环境就是一个容器。可以为容器绑定特定的cpu和memory节点,分配特定比例的cpu时间、IO时间,限制可以使用的内存大小(包括内存和是swap空间),提供device访问控制,提供独立的namespace(网络、pid、ipc、mnt、uts)。

容器的隔离: 容器有效地将操作系统管理的资源划分到独立的组中,并把各个独立的组进行隔离,可以让各自的组占用独立的资源,完成自己独立的任务。因为容器最终执行的命令也是调用统一的os api来实现,是基于整个os来实现的,所以不需要单独操作系统的编译系统、执行解释器,一切工作都是基于os 的基础上来完成的。容器通过提供一种创建和进入容器的方式,让程序像跑在独立机器那样在容器中运行,并且相互之间不影响,而且还可以共享底层的资源。

容器的共享:容器提供环境隔离的前提下,还提供了资源共享的机制,所以容器比真正kvm 虚拟机的资源要节省许多;

5.容器核心技术

chroot: 创建一个虚拟的根目录文件系统,其实质还是调用底层的文件系统建立一个虚拟的、可以跟其它容器的虚拟文件系统相互隔离、但共享底层的文件系统

namespace : 命名空间可以提供一个进程相互隔离的独立网络空间,不同的容器间进程pid可以相同,进程并不冲突影响,但可以共享底层的计算和存储资源

cgroups: 实现了对容器的资源分配和限制,比如给容器A分配4颗CPU,8G 内存,那这个容器最多用这么多的资源。如果内存超过8G ,会启动swap,效率降低,也可能会被调度系统给kill掉

6.企业为什么要使用容器技术

提升效率:容器可以快速移植,这就意味着企业在开发、部署阶段快速搭建开发、测试环境,并快速部署到生产环境里。

节省资源:一台物理机上可以运行几百个甚至上千个容器。

节省运维成本:使用主流的容器编排和管理工具(如,K8s),可以大大降低企业的运维成本,因为K8s本身集成了高可用、负载均衡、监控、自动修复等诸多功能。

二、跟容器相关的工具(只罗列具有代表性的)

1.Docker:Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。

2.Podman: Podman是一个无守护进程的容器引擎,用于在Linux系统上开发、管理和运行OCI(Open Container Initiative)容器和容器镜像。

Podman提供了一个与Docker兼容的命令行工具,可以简单地为docker命令取别名为podman即可使用,所以说如果你会Docker的话可以轻松上手Podman。

3.Kubernetes(K8s):Kubernetes 就是一个生产级别的容器编排平台和集群管理系统,不仅能够创建、调度容器,还能够监控、管理服务器.

三、K8s弃用Docker

1)CRI:K8s在1.5版本里,引入了一个新的接口标准:CRI(Container Runtime Interface),它主要用来规定如何调用容器运行时来管理容器和镜像,和Docker调用标准有不少差异,两者完全不兼容

2)Containerd:为了迎合K8s,将Docker Engine拆分成多个模块,其中Docker Daemon部分捐献给了CNCF,也就是containerd。

在当时的K8s版本里,实际上有两种方法调用容器:

第一种是用 CRI 接口调用 dockershim,然后 dockershim 调用 Docker,Docker 再走 containerd 去操作容器。

第二种是用 CRI 接口直接调用 containerd 去操作容器。

3)弃用dockershim:实际上只是“弃用了 dockershim”这个小组件,也就是说把 dockershim 移出了 kubelet,并不是“弃用了 Docker”这个软件产品,变化就是 K8s绕过了 Docker,直接调用 Docker 内部的 containerd 。

4)K8s移除dockershim后对Docker的影响  

      因为容器镜像格式已经被标准化了(OCI 规范,Open Container Initiative),Docker 镜像仍然可以在 Kubernetes 里正常使用

      Docker 是一个完整的软件产品线,不止是 containerd,它还包括了镜像构建、分发、测试等许多服务,甚至在 Docker Desktop 里还内置了 Kubernetes

      Docker 公司把dockershim接管了过来,另建了一个叫 cri-dockerd的项目,把 Docker Engine 适配成 CRI 接口,这样 kubelet 就又可以通过它来操作 Docker 

      Docker 虽然在容器编排战争里落败,被 Kubernetes 排挤到了角落,但它仍然具有强韧的生命力,对于我们这些初学者来说,Docker 方便易用,具有完善的工具链和友好的交互界面,市面上很难找到能够与它媲美的软件了,应该说是入门学习容器技术和云原生的“不二之选”

四、Docker快速入门

1. Docker安装

1)先安装yum-utils工具

yum install -y yum-utils 

yum install -y yum-utils 
Last metadata expiration check: 0:04:27 ago on Mon 01 Jul 2024 12:30:17 PM EDT.
Dependencies resolved.
=================================================================================================================================================
 Package                            Architecture                    Version                                Repository                       Size
=================================================================================================================================================
Installing:
 yum-utils                          noarch                          4.0.21-25.el8                          baseos                           75 k

Transaction Summary
=================================================================================================================================================
Install  1 Package

Total download size: 75 k
Installed size: 23 k
Downloading Packages:
yum-utils-4.0.21-25.el8.noarch.rpm                                                                               246 kB/s |  75 kB     00:00    
-------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                             72 kB/s |  75 kB     00:01     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                         1/1 
  Installing       : yum-utils-4.0.21-25.el8.noarch                                                                                          1/1 
  Running scriptlet: yum-utils-4.0.21-25.el8.noarch                                                                                          1/1 
  Verifying        : yum-utils-4.0.21-25.el8.noarch                                                                                          1/1 

Installed:
  yum-utils-4.0.21-25.el8.noarch                                                                                                                 

Complete!

2)配置Docker官方的yum仓库,由于docker官方不可用,调整为阿里云

 yum-config-manager \
>     --add-repo \
> https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

[root@aminglinux01 ~]# yum-config-manager \
>     --add-repo \
> https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3)查看Docker版本

yum list docker-ce --showduplicates | sort -r

4)安装指定版本Docker

yum install  docker-ce-20.10.9-3.el8 

yum install docker-ce    ###默认安装最新版

 5)启动服务

systemctl start docker

systemctl enable docker

[root@bogon ~]# docker version 
Client: Docker Engine - Community
 Version:           26.1.4
 API version:       1.45
 Go version:        go1.21.11
 Git commit:        5650f9b
 Built:             Wed Jun  5 11:32:04 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          26.1.4
  API version:      1.45 (minimum version 1.24)
  Go version:       go1.21.11
  Git commit:       de5c9cf
  Built:            Wed Jun  5 11:31:02 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.33
  GitCommit:        d2d58213f83a351ca8f528a95fbd145f5654e957
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
[root@bogon ~]# 

2.Docker镜像和容器

Docker镜像拉取下来后,可以直接运行,运行后的东西我们叫做容器,一个镜像可以启动很多容器。

容器就是镜像启动后的状态,在Linux系统里看就是一个进程,但容器是可以进入得,就像进入了一个虚拟机里。

1)配置加速器

编写/etc/docker/daemon.json

cat > /etc/docker/daemon.json <<EOF

{

  "registry-mirrors": ["https://ggwf5kjm.mirror.aliyuncs.com"]

}

EOF

重启docker服务

systemctl restart docker

检查是否生效

docker info |grep -A 3 'Registry Mirrors'

[root@bogon docker]# docker info |grep -A 3 'Registry Mirrors'
 Registry Mirrors:
  https://https://ggwf5kjm.mirror.aliyuncs.com/
 Live Restore Enabled: false

2)拉取镜像

docker  pull  busybox  ##这个busybox就是系统镜像名字,它是从hub.docker.com去拉取镜像

docker pull registry.cn-hangzhou.aliyuncs.com/*/webssh
Using default tag: latest
latest: Pulling from */webssh
4abcf2066143: Pull complete 
5a532afc691f: Pull complete 
63565bede7ac: Pull complete 
Digest: sha256:a021312d9f1db357914f39714827e640dbc88e6fa7500405611340498e2a427a
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/daliyused/webssh:latest
registry.cn-hangzhou.aliyuncs.com/*/webssh:latest

3)查看当前系统镜像

docker  image ls

[root@bogon docker]# docker image ls
REPOSITORY                                           TAG       IMAGE ID       CREATED        SIZE
goharbor/harbor-exporter                             v2.10.1   3b6d345aa4e6   3 months ago   106MB
goharbor/redis-photon                                v2.10.1   9a994e1173fc   3 months ago   164MB
goharbor/trivy-adapter-photon                        v2.10.1   108e2a78abf7   3 months ago   502MB
goharbor/harbor-registryctl                          v2.10.1   da66353bc245   3 months ago   149MB
goharbor/registry-photon                             v2.10.1   4cb6a644ceeb   3 months ago   83.5MB
goharbor/nginx-photon                                v2.10.1   180accc8c6be   3 months ago   153MB
goharbor/harbor-log                                  v2.10.1   2215e7f0f2e7   3 months ago   163MB
goharbor/harbor-jobservice                           v2.10.1   ab688ea50ad8   3 months ago   140MB
goharbor/harbor-core                                 v2.10.1   de73267578a3   3 months ago   169MB
goharbor/harbor-portal                               v2.10.1   c75282ddf5df   3 months ago   162MB
goharbor/harbor-db                                   v2.10.1   db2ff40c7b27   3 months ago   269MB
goharbor/prepare                                     v2.10.1   92197f61701a   3 months ago   207MB
registry.cn-hangzhou.aliyuncs.com/*/webssh   latest    3a240e514cbb   4 months ago   18.5MB

4)搜索镜像

docker search ubuntu

[root@bogon docker]# docker search ubuntu
NAME                             DESCRIPTION                                     STARS     OFFICIAL
ubuntu                           Ubuntu is a Debian-based Linux operating sys…   17141     [OK]
ubuntu-debootstrap               DEPRECATED; use "ubuntu" instead                52        [OK]
websphere-liberty                WebSphere Liberty multi-architecture images …   299       [OK]
ubuntu-upstart                   DEPRECATED, as is Upstart (find other proces…   115       [OK]
open-liberty                     Open Liberty multi-architecture images based…   65        [OK]
neurodebian                      NeuroDebian provides neuroscience research s…   110       [OK]
ubuntu/nginx                     Nginx, a high-performance reverse proxy & we…   114       
ubuntu/squid                     Squid is a caching proxy for the Web. Long-t…   92        
ubuntu/cortex                    Cortex provides storage for Prometheus. Long…   4         
ubuntu/prometheus                Prometheus is a systems and service monitori…   62        
ubuntu/kafka                     Apache Kafka, a distributed event streaming …   49        
ubuntu/apache2                   Apache, a secure & extensible open-source HT…   74        
ubuntu/zookeeper                 ZooKeeper maintains configuration informatio…   13        
ubuntu/bind9                     BIND 9 is a very flexible, full-featured DNS…   91        
ubuntu/postgres                  PostgreSQL is an open source object-relation…   39        
ubuntu/mysql                     MySQL open source fast, stable, multi-thread…   64        
ubuntu/redis                     Redis, an open source key-value store. Long-…   22        
ubuntu/jre                       Distroless Java runtime based on Ubuntu. Lon…   15        
ubuntu/dotnet-aspnet             Chiselled Ubuntu runtime image for ASP.NET a…   22        
ubuntu/grafana                   Grafana, a feature rich metrics dashboard & …   11        
ubuntu/dotnet-deps               Chiselled Ubuntu for self-contained .NET & A…   16        
ubuntu/memcached                 Memcached, in-memory keyvalue store for smal…   5         
ubuntu/cassandra                 Cassandra, an open source NoSQL distributed …   2         
ubuntu/dotnet-runtime            Chiselled Ubuntu runtime image for .NET apps…   20        
ubuntu/prometheus-alertmanager   Alertmanager handles client alerts from Prom…   9         

如果要查询镜像版本,可以访问https://hub.docker.com/,搜索对应的镜像名字,然后点tag进行查看

拉取指定版本镜像

docker pull registry.cn-hangzhou.aliyuncs.com/*/kube-controllers:release-v3.28

[root@bogon docker]# docker pull registry.cn-hangzhou.aliyuncs.com/*/kube-controllers:release-v3.28
release-v3.28: Pulling from */kube-controllers
438a0cd3139d: Pull complete 
67eecec6089c: Pull complete 
Digest: sha256:fc78c47ba78460e7388b32699e1fe341e80e21379223309c475d14433b0c3ad1
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/*/kube-controllers:release-v3.28
registry.cn-hangzhou.aliyuncs.com/*/kube-controllers:release-v3.28

5)给镜像打标签

docker tag busybox:latest  aminglinux:1.2.3

[root@bogon docker]# docker tag registry.cn-hangzhou.aliyuncs.com/*/kube-controllers:release-v3.28 kube-controllers:v3.28
[root@bogon docker]# docker image ls
REPOSITORY                                                     TAG             IMAGE ID       CREATED        SIZE
kube-controllers                                               v3.28           2c4a177902fa   3 days ago     79.2MB
registry.cn-hangzhou.aliyuncs.com/*/kube-controllers   release-v3.28   2c4a177902fa   3 days ago     79.2MB
goharbor/harbor-exporter                                       v2.10.1         3b6d345aa4e6   3 months ago   106MB
goharbor/redis-photon                                          v2.10.1         9a994e1173fc   3 months ago   164MB
goharbor/trivy-adapter-photon                                  v2.10.1         108e2a78abf7   3 months ago   502MB
goharbor/harbor-registryctl                                    v2.10.1         da66353bc245   3 months ago   149MB
goharbor/registry-photon                                       v2.10.1         4cb6a644ceeb   3 months ago   83.5MB
goharbor/nginx-photon                                          v2.10.1         180accc8c6be   3 months ago   153MB
goharbor/harbor-log                                            v2.10.1         2215e7f0f2e7   3 months ago   163MB
goharbor/harbor-jobservice                                     v2.10.1         ab688ea50ad8   3 months ago   140MB
goharbor/harbor-core                                           v2.10.1         de73267578a3   3 months ago   169MB
goharbor/harbor-portal                                         v2.10.1         c75282ddf5df   3 months ago   162MB
goharbor/harbor-db                                             v2.10.1         db2ff40c7b27   3 months ago   269MB
goharbor/prepare                                               v2.10.1         92197f61701a   3 months ago   207MB
registry.cn-hangzhou.aliyuncs.com/*/webssh             latest          3a240e514cbb   4 months ago   18.5MB

6)启动容器

docker run -itd busybox  ##把镜像启动为容器,-i表示让容器的标准输入打开,-t表示分配一个伪终端,-d表示后台启动,要把-i -t -d 放到镜像名字前面

[root@bogon docker]# docker run -itd webssh
f6380abb8dbc8ab4de3df7bcae1bcd8e09f8cc622f24d4ddd2e7306b4fc4c2ea
[root@bogon docker]# 

7)查看容器

docker ps -a  ##如果不加-a,则不显示已经停止的容器

[root@bogon docker]# docker ps -a
CONTAINER ID   IMAGE                                 COMMAND                  CREATED          STATUS                             PORTS                       NAMES
f6380abb8dbc   webssh                                "/webssh"                26 seconds ago   Up 25 seconds                                                  objective_shaw
7bcf22b256e1   goharbor/harbor-jobservice:v2.10.1    "/harbor/entrypoint.…"   3 days ago       Exited (128) 12 hours ago                                      harbor-jobservice
f629b5761b4f   goharbor/nginx-photon:v2.10.1         "nginx -g 'daemon of…"   3 days ago       Restarting (1) 53 seconds ago                                  nginx
0092e9635bd0   goharbor/harbor-core:v2.10.1          "/harbor/entrypoint.…"   3 days ago       Up 58 seconds (health: starting)                               harbor-core
7dcc390fc46e   goharbor/registry-photon:v2.10.1      "/home/harbor/entryp…"   3 days ago       Up 25 minutes (healthy)                                        registry
4077262d33fe   goharbor/harbor-db:v2.10.1            "/docker-entrypoint.…"   3 days ago       Up 25 minutes (healthy)                                        harbor-db
a54ccf652ad8   goharbor/harbor-registryctl:v2.10.1   "/home/harbor/start.…"   3 days ago       Exited (128) 12 hours ago                                      registryctl
e0434967d629   goharbor/redis-photon:v2.10.1         "redis-server /etc/r…"   3 days ago       Exited (128) 12 hours ago                                      redis
6d2047fedc30   goharbor/harbor-portal:v2.10.1        "nginx -g 'daemon of…"   3 days ago       Exited (128) 12 hours ago                                      harbor-portal
a996d81bc7b4   goharbor/harbor-log:v2.10.1           "/bin/sh -c /usr/loc…"   3 days ago       Up 25 minutes (healthy)            127.0.0.1:1514->10514/tcp   harbor-log

8)停止容器

docker stop de1fb9c8902e  ##后面这一串字符串为容器ID,可以通过docker ps查看

[root@bogon docker]# docker stop f6380abb8dbc 
f6380abb8dbc
[root@bogon docker]# docker ps
CONTAINER ID   IMAGE                              COMMAND                  CREATED      STATUS                            PORTS                       NAMES
f629b5761b4f   goharbor/nginx-photon:v2.10.1      "nginx -g 'daemon of…"   3 days ago   Restarting (1) 18 seconds ago                                 nginx
0092e9635bd0   goharbor/harbor-core:v2.10.1       "/harbor/entrypoint.…"   3 days ago   Up 8 seconds (health: starting)                               harbor-core
7dcc390fc46e   goharbor/registry-photon:v2.10.1   "/home/harbor/entryp…"   3 days ago   Up 26 minutes (healthy)                                       registry
4077262d33fe   goharbor/harbor-db:v2.10.1         "/docker-entrypoint.…"   3 days ago   Up 26 minutes (healthy)                                       harbor-db
a996d81bc7b4   goharbor/harbor-log:v2.10.1        "/bin/sh -c /usr/loc…"   3 days ago   Up 26 minutes (healthy)           127.0.0.1:1514->10514/tcp   harbor-log
[root@bogon docker]# 

9)删除容器

docker rm  de1fb9c8902e  ##如果容器未停止,会报错,需要加-f选项

[root@bogon docker]# docker rm f6380abb8dbc
f6380abb8dbc

10)删除镜像

docker rmi aminglinux:1.2.3  ##这里因为aminglinux:1.2.3为busybox的一个tag,所以此操作只会删除此tag,并不会真正删镜像,如果该镜像没有tag,则直接删除镜像

[root@bogon docker]# docker rmi webssh
Untagged: webssh:latest

也可以直接指定镜像ID

docker rmi beae173ccac6

11)拉取镜像+启动容器

docker run -itd redis

[root@bogon docker]# docker run -itd registry.cn-hangzhou.aliyuncs.com/*/lucky:2.8.3
Unable to find image 'registry.cn-hangzhou.aliyuncs.com/*/lucky:2.8.3' locally
2.8.3: Pulling from daliyused/lucky
4abcf2066143: Already exists 
4af2ea762246: Pull complete 
0b2fbe05caf5: Pull complete 
7fb841bd2dcb: Pull complete 
Digest: sha256:39cf30e54b037e4f2d4806011c33357c73554feb5f30403829b736f4f37da1f9
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/*/lucky:2.8.3
43f0424d1c9d336cbeefd5dc6e5ff1f5102b24844599f94e3de1e2fb650ee574

12)启动容器时,给容器自定义名字

docker run --name web01 -itd ubuntu

[root@bogon docker]# docker run --name lucky000 -itd registry.cn-hangzhou.aliyuncs.com/*/lucky:2.8.3
bb922739a021ce6f77d254caa61b867a93780cef65e2c268d9c93f75b5ed288b

13)容器运行后直接退出并删除

docker run --rm -it ubuntu bash -c "sleep 30"

[root@bogon docker]# docker run --rm -it registry.cn-hangzhou.aliyuncs.com/*/lucky:2.8.3 bash -c "sleep 30"
2024/07/02 04:47:32 configure dir:/app
2024/07/02 04:47:32 init default base configure 
2024/07/02 04:47:32 Set LoalTimeZone CST-8 [+8.00]
2024/07/02 04:47:32 可以将下面指令加入cron计划任务,每分钟定时检测lukcy进程防止奔溃影响使用。
2024/07/02 04:47:32  */1 * * * * test -z "$(pidof lucky)" && /app/lucky bash -c sleep 30  >/dev/null 2>&1 
2024/07/02 04:47:32 RunMode:prod
2024/07/02 04:47:32 version:2.8.3	commit d5980afdff63c548fc12ace3a8ab9149dc75476d, built at 2024-04-06T00:56:58Z
2024/07/02 04:47:32 LuckyWeb Http Listen on http://:16601
2024/07/02 04:47:33 LuckyWeb Https Listen on https://:16601
2024/07/02 04:47:33 ssl module started
2024/07/02 04:47:33 ipfilter module started
2024/07/02 04:47:33 cron module started
2024/07/02 04:47:33 storagemanagement module started
2024/07/02 04:47:33 acme module started
2024/07/02 04:47:33 ddns module started
2024/07/02 04:47:33 wol module started
2024/07/02 04:47:33 webdav module started
2024/07/02 04:47:33 ftpserver module started
2024/07/02 04:47:33 filebrowser module started
2024/07/02 04:47:33 portforward module started
2024/07/02 04:47:33 reverseproxy module started
2024/07/02 04:47:33 stun module started
2024/07/02 04:47:33 LuckyWeb Start success
2024/07/02 04:47:33 AdminWeb(Http) listen on :16601
2024/07/02 04:47:33 Admin Panel URL: http://[your IP]:16601
2024/07/02 04:47:41 EnableFireWallPorts Done!
2024/07/02 04:47:52 exec first ntp sync time

14)进入容器操作

docker exec -it web01 bash

[root@bogon docker]# docker exec -it lucky000 sh
/goodluck # 

进去后,相当于进入了一个虚拟机一样,安装个nginx

apt update

apt install -y  nginx

15)将容器重新打包成新镜像

docker commit  -m  "install nginx" -a "aming" web01  nginx_ubuntu:1.0  ##这里的web01可以改为容器id       -m 为信息,填写字符串,-a 指定作者

[root@bogon docker]# docker commit -m "fandai" -a "yeyunyi" lucky000 lucky:latest
sha256:81ef3c3e12600523db0ced2a8811797f5d0dd5d932005b38032d56b77fc2d400

   再次查看镜像列表,发现多了一个nginx_ubuntu:1.0

[root@bogon docker]# docker image ls
REPOSITORY                                                     TAG             IMAGE ID       CREATED              SIZE
lucky                                                          latest          81ef3c3e1260   About a minute ago   16.7MB

16)将镜像保存为一个文件

docker save nginx -o nginx.img

[root@bogon docker]# docker save lucky -o lucky.img
[root@bogon docker]# ls
daemon.json  lucky.img
[root@bogon docker]# 

17)将导出的镜像文件导入

docker load --input nginx.img

[root@bogon docker]# docker save lucky -o lucky.img
[root@bogon docker]# ls
daemon.json  lucky.img
[root@bogon docker]# 

18)将容器导出为一个文件

docker export web01 > web01.tar

[root@bogon docker]# docker export lucky000 > lucky000.tar
[root@bogon docker]# ls
daemon.json  lucky000.tar  lucky.img

19)将导出的文件导入为新的镜像

docker import - ubuntu_test < web01.tar

[root@bogon docker]# docker import - lucky111 < lucky000.tar
sha256:acea06c3a8766e6a76c9872f9c38ceedff56b5434ea9e66703ffdeb58b1ef59a

20)docker save和docker export的差异

docker save保存的是镜像,docker export保存的是容器

docker save保留镜像所有的历史记录,docker export不会,即没有commit历史

docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像

docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值