docker镜像管理基础

本文介绍了Docker镜像的基础知识,包括镜像的概念、镜像层和存储驱动,如AUFS、OverlayFS和DeviceMapper。讲解了Docker Registry的作用和类型,并详细阐述了如何制作、获取和管理Docker镜像,包括Docker Hub的功能和使用Dockerfile创建镜像。此外,还讨论了镜像的导入与导出过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

docker镜像管理基础

镜像的概念

镜像可以理解为应用程序的集装箱,而docker用来装卸集装箱。

docker镜像含有启动容器所需要的文件系统及其内容,因此,其用于创建并启动容器。

docker镜像采用分层构建机制,最底层为bootfs,其上为rootfs

  • bootfs:用于系统引导的文件系统,包括bootloader和kernel,容器启动完成后会被卸载以节约内存资源
  • rootfs:位于bootfs之上,表现为docker容器的根文件系统
    • 传统模式中,系统启动之时,内核挂载rootfs会首先将其挂载为“只读”模式,完整性自检完成后将其重新挂载为读写模式
    • docker中,rootfs由内核挂载为“只读”模式,而后通过“联合挂载”技术额外挂载一个“可写”层

注意:当删除容器时,这个容器自有的“可写”层会一起被删除

img

docker镜像层

img

位于下层的镜像称为父镜像(parrent image),最底层的称为基础镜像(base image);
最上层为“可读写”层,其下的均为“只读”层。

docker存储驱动

docker提供了多种存储驱动来实现不同的方式存储镜像,下面是常用的几种存储驱动:

  • AUFS
  • OverlayFS
  • Devicemapper
  • Btrfs
  • VFS

AUFS

AUFS(AnotherUnionFS)是一种Union FS,是文件级的存储驱动。AUFS是一个能透明覆盖一个或多个现有文件系统的层状文件系统,把多层合并成文件系统的单层表示。简单来说就是支持将不同目录挂载到同一个虚拟文件系统下的文件系统。这种文件系统可以一层一层地叠加修改文件。无论底下有多少层都是只读的,只有最上层的文件系统是可写的。当需要修改一个文件时,AUFS创建该文件的一个副本,使用CoW将文件从只读层复制到可写层进行修改,结果也保存在可写层。在Docker中,底下的只读层就是image,可写层就是Container。

AUFS文件系统据说有3W行代码,而ext4文件系统却只有4000-5000行左右代码,这些代码是要被整合进内核的,后来AUFS申请要被合并进内核代码的时候,linuz觉得它这代码太过臃肿,于是拒绝了。因此AUFS这个文件系统一直以来就不是linux内核中自有的文件系统,想用AUFS这个文件系统的话,必须自己向内核打补丁并去编译使用它,但redhat系列的操作系统一向以稳定著称,不会干这种出格的事,所以在redhat系列操作系统中使用AUFS并无可能。而ubuntu上的docker默认使用的就是AUFS。

OverlayFS

Overlay是Linux内核3.18后支持的,也是一种Union FS,和AUFS的多层不同的是Overlay只有两层:一个upper文件系统和一个lower文件系统,分别代表Docker的镜像层和容器层。当需要修改一个文件时,使用CoW将文件从只读的lower复制到可写的upper进行修改,结果也保存在upper层。在Docker中,底下的只读层就是image,可写层就是Container。目前最新的OverlayFS为Overlay2。

AUFS和Overlay都是联合文件系统,但AUFS有多层,而Overlay只有两层,所以在做写时复制操作时,如果文件比较大且存在比较低的层,则AUSF会慢一些。而且Overlay并入了linux kernel mainline,AUFS没有。目前AUFS已基本被淘汰。

DeviceMapper

Device mapper是Linux内核2.6.9后支持的,提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管理策略。AUFS和OverlayFS都是文件级存储,而Device mapper是块级存储,所有的操作都是直接对块进行操作,而不是文件。Device mapper驱动会先在块设备上创建一个资源池,然后在资源池上创建一个带有文件系统的基本设备,所有镜像都是这个基本设备的快照,而容器则是镜像的快照。所以在容器里看到文件系统是资源池上基本设备的文件系统的快照,并没有为容器分配空间。当要写入一个新文件时,在容器的镜像内为其分配新的块并写入数据,这个叫用时分配。当要修改已有文件时,再使用CoW为容器快照分配块空间,将要修改的数据复制到在容器快照中新的块里再进行修改。

OverlayFS是文件级存储,Device mapper是块级存储,当文件特别大而修改的内容很小,Overlay不管修改的内容大小都会复制整个文件,对大文件进行修改显然要比小文件要消耗更多的时间,而块级无论是大文件还是小文件都只复制需要修改的块,并不是整个文件,在这种场景下,显然device mapper要快一些。因为块级的是直接访问逻辑盘,适合IO密集的场景。而对于程序内部复杂,大并发但少IO的场景,Overlay的性能相对要强一些。

docker registry

启动容器时,docker daemon会试图从本地获取相关的镜像,本地镜像不存在时,其将从Registry中下载该镜像并保存到本地。

Registry用于保存docker镜像,包括镜像的层次结构和元数据。用户可以自建Registry,亦可使用官方的Docker Hub。

docker registry的分类:

  • Sponsor Registry:第三方的Registry,供客户和Docker社区使用
  • Mirror Registry:第三方的Registry,只让客户使用
  • Vendor Registry:由发布docker镜像的供应商提供的registry
  • Private Registry:通过设有防火墙和额外的安全层的私有实体提供的registry

docker registry的组成:

  • Repository
    • 由某特定的docker镜像的所有迭代版本组成的镜像仓库
    • 一个Registry中可以存在多个Repository
      • Repository可分为“顶层仓库”和“用户仓库”
      • 用户仓库名称格式为“用户名/仓库名”
    • 每个仓库可包含多个Tag(标签),每个标签对应一个镜像
  • Index
    • 维护用户帐户、镜像的检验以及公共命名空间的信息
    • 相当于为Registry提供了一个完成用户认证等功能的检索接口

Docker Registry中的镜像通常由开发人员制作,而后推送至“公共”或“私有”Registry上保存,供其他人员使用,例如“部署”到生产环境。

img

docker镜像的制作

多数情况下,我们做镜像是基于别人已存在的某个基础镜像来实现的,我们把它称为base image。比如一个纯净版的最小化的centos、ubuntu或debian。

那么这个最小化的centos镜像从何而来呢?其实这个基础镜像一般是由Docker Hub的相关维护人员,也就是Docker官方手动制作的。这个基础镜像的制作对于Docker官方的专业人员来说是非常容易的,但对于终端用户来说就不是那么容易制作的了。

Docker Hub

Docker Hub is a cloud-based registry service which allows you to link to code repositories, build your images and test them, stores manually pushed images, and links to Docker Cloud so you can deploy images to your hosts.

It provides a centralized resource for container image discovery, distribution and change management, user and team collaboration, and workflow automation throughout the development pipeline.

Docker Hub是一个基于云的注册服务,它允许你链接到代码库,构建和测试你的镜像,存储手动推送的镜像,以及Docker Cloud的链接,这样你就可以把镜像部署到你的主机上。

它为容器映像发现、分发和变更管理、用户和团队协作以及整个开发管道中的工作流自动化提供了集中的资源。

Docker Hub provides the following major features:

  • Image Repositories
    • Find and pull images from community and official libraries, and manage, push to, and pull from private images libraries to which you have access.
  • Automated Builds
    • Automatically create new images when you make changes to a source code repository.
  • Webhooks
    • A feature of Automated Builds, Webhooks let you trigger actions after a successful push to a repository.
  • Organizations
    • Create work groups to manage access to image repositories.
  • GitHub and Bitbucket Integration
    • Add the Hub and your Docker Images to your current workflows.

Docker Hub提供以下主要特性:

映像存储库

从社区和官方库中查找和提取图像,并管理、推送和从您可以访问的私有映像库中提取图像。

自动化的构建

当您更改源代码存储库时,自动创建新的映像。

人则

webhook是自动化构建的一个特性,它允许您在成功推送到存储库后触发操作。

组织

创建工作组来管理对映像存储库的访问。

GitHub和Bitbucket集成

将集线器和Docker映像添加到当前工作流中。

docker镜像的获取

To get Docker images from a remote registry(such as your own Docker registry)and add them to your local system, use the docker pull command:

要从一个远程注册表(比如你自己的Docker注册表)获取Docker镜像并将其添加到本地系统中,使用Docker pull命令:

# docker pull <registry>[:<port>]/[<namespace>/]<name>:<tag>

The is a host that provides the docker-distribution service on TCP (default:5000)

Together, and identify a particular image controlled by at the registry

  • Some registries also support raw ;for those, is optional
  • When it is included, however, the additional level of hierarchy that provides is usefull to distinguish between images with the same

The additional level of hierarchy of

是在TCP上提供docker分发服务的主机(默认为5000)。

一起,并识别由注册中心控制的特定图像

有些注册中心还支持raw;对于这些注册中心来说,raw是可选的

但是,当包含它时,提供的附加层次结构对于区分具有相同功能的图像非常有用

的附加层次结构级别

NamespaceExamples(/)
organizationredhat/kubernetes, google/kubernetes
login(username)Alice/application, bob/application
roledevel/database, test/database, prod/database

镜像的生成

镜像的生成途径:

  • Dockerfile
  • 基于容器制作
  • Docker Hub automated builds

基于容器制作镜像

Usage:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OptionsDefaultDescription
-a, --author stringAuthor (e.g., “John Hannibal Smith hannibal@a-team.com”)
-c, --change listApply Dockerfile instruction to the created image
对创建的映像应用Dockerfile指令
-m, --message stringCommit message
提交消息
-p, --pausetruePause container during commit
提交期间暂停容器

创建nginx容器

拉取镜像

[root@localhost ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
a1d0c7532777: Pull complete 
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

查看镜像

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
busybox      latest    d23834f29b38   2 days ago     1.24MB
nginx        latest    ea335eea17ab   2 weeks ago    141MB
centos       latest    5d0da3dc9764   2 months ago   231MB

创建运行容器

[root@localhost ~]# docker run --name nginx -it 5d0da3dc9764
[root@88fb4bcabced /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@88fb4bcabced /]# 

在容器里下载wget

[root@88fb4bcabced opt]# yum -y install wget

下载nginx包

[root@88fb4bcabced opt]# wget http://nginx.org/download/nginx-1.20.2.tar.gz
--2021-12-02 13:16:09--  http://nginx.org/download/nginx-1.20.2.tar.gz
Resolving nginx.org (nginx.org)... 3.125.197.172, 52.58.199.22, 2a05:d014:edb:5702::6, ...
Connecting to nginx.org (nginx.org)|3.125.197.172|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1062124 (1.0M) [application/octet-stream]
Saving to: 'nginx-1.20.2.tar.gz'

nginx-1.20.2 100%   1.01M   471KB/s    in 2.2s     

2021-12-02 13:16:13 (471 KB/s) - 'nginx-1.20.2.tar.gz' saved [1062124/1062124]


创建用户

[root@88fb4bcabced ~]#  useradd -r -M -s /sbin/nologin nginx
[root@88fb4bcabced ~]# id nginx
uid=998(nginx) gid=996(nginx) groups=996(nginx)

解压

[root@88fb4bcabced opt]# tar xf nginx-1.20.2.tar.gz 
[root@88fb4bcabced opt]# ls
nginx-1.20.2  nginx-1.20.2.tar.gz

下载依赖包

[root@88fb4bcabced ~]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++  make
[root@88fb4bcabced ~]# yum -y groups mark install 'Development Tools'

创建日志目录

[root@88fb4bcabced ~]# mkdir -p /var/log/nginx
[root@88fb4bcabced ~]# chown -R nginx.nginx /var/log/nginx

编译安装

[root@88fb4bcabced nginx-1.20.2]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-debug \
> --with-http_ssl_module \
> --with-http_realip_module \
> --with-http_image_filter_module \
> --with-http_gunzip_module \
> --with-http_gzip_static_module \
> --with-http_stub_status_module \
> --http-log-path=/var/log/nginx/access.log \
> --error-log-path=/var/log/nginx/error.log


[root@88fb4bcabced nginx-1.20.2]# make
[root@88fb4bcabced nginx-1.20.2]# make install

查看

[root@88fb4bcabced local]# ls
bin  games    lib    libexec  sbin   src
etc  include  lib64  nginx    share
[root@88fb4bcabced local]# cd  nginx/
[root@88fb4bcabced nginx]# ls
conf  html  logs  sbin
[root@88fb4bcabced nginx]# 

配置环境变量

[root@88fb4bcabced nginx]# echo 'export PATH=/usr/local/nginx/sbin:$PATH' > /etc/profile.d/nginx.sh
[root@88fb4bcabced nginx]# source /etc/profile.d/nginx.sh
[root@88fb4bcabced nginx]# which nginx/usr/local/nginx/sbin/nginx

启动服务

[root@88fb4bcabced ~]# ss -antl
State         Recv-Q        Send-Q               Local Address:Port               Peer Address:Port        Process        
LISTEN        0             128                        0.0.0.0:80                      0.0.0.0:*                          
[root@88fb4bcabced ~]# ps -ef | grep nginx
root        2964       1  0 13:32 ?        00:00:00 nginx: master process nginx
nginx       2965    2964  0 13:32 ?        00:00:00 nginx: worker process
root        2977       1  0 13:39 pts/0    00:00:00 grep --color=auto nginx
[root@88fb4bcabced ~]# 
 

访问nginx

[root@88fb4bcabced nginx]# curl 172.17.0.3
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

重新进入nginx容器

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED             STATUS          PORTS     NAMES
88fb4bcabced   5d0da3dc9764   "/bin/bash"   About an hour ago   Up 37 minutes             nginx

[root@localhost ~]# docker exec -it  88fb4bcabced /bin/bash
[root@88fb4bcabced /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@88fb4bcabced /]# ip  a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
20: eth0@if21: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
[root@88fb4bcabced /]# ss -antl
State        Recv-Q        Send-Q               Local Address:Port                Peer Address:Port        Process        
[root@88fb4bcabced /]# nginx
[root@88fb4bcabced /]# ss -antl
State         Recv-Q        Send-Q               Local Address:Port               Peer Address:Port        Process        
LISTEN        0             128                        0.0.0.0:80                      0.0.0.0:*                          
[root@88fb4bcabced /]# 

另开一个终端

生成镜像

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED       STATUS       PORTS     NAMES
88fb4bcabced   5d0da3dc9764   "/bin/bash"   2 hours ago   Up 2 hours             nginx
[root@localhost ~]# docker commit -p 88fb4bcabced
sha256:b91efabcfdd75297787afc09c186e643df0a96439af51ff39126e82d3ee148ac
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
<none>       <none>    b91efabcfdd7   34 seconds ago   550MB
busybox      latest    d23834f29b38   2 days ago       1.24MB
nginx        latest    ea335eea17ab   2 weeks ago      141MB
centos       centos8   5d0da3dc9764   2 months ago     231MB
centos       latest    5d0da3dc9764   2 months ago     231MB
[root@localhost ~]# docker tag b91efabcfdd7 sktystwd/nginx:v0.1
[root@localhost ~]# docker images
REPOSITORY       TAG       IMAGE ID       CREATED              SIZE
sktystwd/nginx   v0.1      b91efabcfdd7   About a minute ago   550MB
busybox          latest    d23834f29b38   2 days ago           1.24MB
nginx            latest    ea335eea17ab   2 weeks ago          141MB
centos           centos8   5d0da3dc9764   2 months ago         231MB
centos           latest    5d0da3dc9764   2 months ago         231MB


在docker官网上创建一个仓库
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

登录

[root@localhost ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: sktystwd
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

上传镜像

[root@localhost ~]# docker push sktystwd/nginx:v0.1
The push refers to repository [docker.io/sktystwd/nginx]
dfbcccb2cbcd: Pushed 
74ddd0ec08fa: Mounted from library/centos 
v0.1: digest: sha256:eaf64ac2a9da745ae700cd32f3c6bc65f3edf50352bc5d648877716b7d271597 size: 742

在官网查看

在这里插入图片描述

使用新生成的镜像创建容器

可以看到之前安装的nginx还在,但是服务没有启动

[root@localhost ~]# docker images
REPOSITORY       TAG       IMAGE ID       CREATED          SIZE
sktystwd/nginx   v0.1      b91efabcfdd7   34 minutes ago   550MB
busybox          latest    d23834f29b38   2 days ago       1.24MB
nginx            latest    ea335eea17ab   2 weeks ago      141MB
centos           centos8   5d0da3dc9764   2 months ago     231MB
centos           latest    5d0da3dc9764   2 months ago     231MB

[root@localhost ~]# docker run --name nginx2 -it sktystwd/nginx:v0.1
[root@cbaf5ff45ebf /]# ls

[root@cbaf5ff45ebf nginx]# ls
client_body_temp  html        sbin
conf              logs        scgi_temp
fastcgi_temp      proxy_temp  uwsgi_temp
[root@cbaf5ff45ebf nginx]# 

[root@cbaf5ff45ebf nginx]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port                    Process                     
[root@cbaf5ff45ebf nginx]# 

由此可见,新生成的镜像中是包含了新增的内容的,但是此时有一个问题,那就是容器默认要启动的进程是什么?在这里,默认情况下是启动的sh进程,但我们是要启动一个nginx站点,所以我们要在创建镜像时将容器默认启动的进程设为nginx,这样一来我们就可以通过新生成的镜像来快速构建一个简单的nginx站点了。

使用docker inspect命令查看容器启动的默认进程是什么

[root@localhost ~]# docker inspect nginx2

......             
            ],
            "Cmd": [
                "/bin/bash"
            ],
.........
........
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,

编写启动文件

[root@cbaf5ff45ebf conf]# cat /opt/script.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
/bin/bash
[root@cbaf5ff45ebf opt]# chmod +x script.sh 
[root@cbaf5ff45ebf opt]# ls
bag  nginx-1.20.2  script.sh

用正在运行的容器重新生成一个镜像

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                 CREATED          STATUS          PORTS                                   NAMES

26982cfa02d7   0e27d2cf1321   "/bin/bash"             18 minutes ago   Up 18 minutes                                           nginx

[root@localhost ~]# docker commit -p -c 'CMD ["/bin/bash","/opt/start-nginx.sh"]' 26982cfa02d7 sktystwd/nginx:v0.5
sha256:5a170055277a2b75565f80068cb919534520a398d9397399244fd7a9a6e1affc
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# docker images
REPOSITORY       TAG       IMAGE ID       CREATED              SIZE
sktystwd/nginx   v0.5      5a170055277a   3 seconds ago        619MB
nginx            v0.4      f1de6f785f29   About a minute ago   619MB
sktystwd/nginx   v0.3      0e27d2cf1321   19 hours ago         550MB
busybox          latest    d23834f29b38   3 days ago           1.24MB
centos           centos8   5d0da3dc9764   2 months ago         231MB
centos           latest    5d0da3dc9764   2 months ago         231MB



用这个镜像创建容器

[root@localhost ~]# docker run -it --name nginx2 -p 8080:80 5a170055277a  /opt/start-nginx.sh
[root@9cf28ddb005a /]# 
[root@9cf28ddb005a /]# ls
bin  home   lost+found  opt   run   sys  var
dev  lib    media       proc  sbin  tmp
etc  lib64  mnt         root  srv   usr

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                 CREATED          STATUS          PORTS                                   NAMES
9cf28ddb005a   5a170055277a   "/opt/start-nginx.sh"   10 minutes ago   Up 10 seconds   0.0.0.0:8080->80/tcp, :::8080->80/tcp   nginx2


在本机上查看IP

[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:be:41:85 brd ff:ff:ff:ff:ff:ff
    inet 192.168.244.144/24 brd 192.168.244.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::c8bb:96e4:534:b9f/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:56:9b:01:be brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:56ff:fe9b:1be/64 scope link 
       valid_lft forever preferred_lft forever
33: veth8abc5de@if32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether 26:8f:00:18:8b:f8 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::248f:ff:fe18:8bf8/64 scope link 
       valid_lft forever preferred_lft forever
35: vethdd2a565@if34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether f6:65:bb:e5:0f:d9 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::f465:bbff:fee5:fd9/64 scope link 
       valid_lft forever preferred_lft forever

访问网页本机IP+8080
在这里插入图片描述

镜像的导入与导出

假如有2台主机,我们在主机1上做了一个镜像,主机2想用这个镜像怎么办呢?

我们可以在主机1上push镜像到镜像仓库中,然后在主机2上pull把镜像拉下来使用,这种方式就显得比较麻烦,假如我只是测试用的,在一台主机上做好镜像后在另一台主机上跑一下就行了,没必要推到仓库上然后又把它拉到本地来。

此时我们可以在已有镜像的基础上把镜像打包成一个压缩文件,然后拷贝到另一台主机上将其导入,这就是镜像的导入和导出功能。

docker中我们使用docker save进行导出,使用docker load进行导入。

[root@localhost ~]# docker save -o nginx.tar.gz sktystwd/nginx:v0.1
[root@localhost ~]# ls
anaconda-ks.cfg  nginx.tar.gz

在另一台没有镜像的主机上执行docker load导入镜像

[root@localhost ~]# docker load -i nginx.tar.gz

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值