Docker系列3:Docker镜像详解

发布时间:2020-06-30 05:28:29 作者:zxhk
来源:网络 阅读:441

一、Docker镜像介绍

1、镜像组成介绍

    Docker系列3:Docker镜像详解

分层构建的,底层的是bootfs,上面的是rootfs

构建镜像的基本流程

  1. 先准备一个bootfs

  2. 然后安装一个最小系统(base image)

  3. 在系统安装应用,如果是构建apache的镜像,那么就在base image上安装apache

    Docker系列3:Docker镜像详解

注意:

2、镜像仓库

    前面一讲过了,专门用来存储docker iamge的哪个位置称之为 docker registry,在启动容器的时候,本地的docker daemon会从指定的docker registry下载镜像,并完成启动。

docker registry是可以分为多类 的

一般的registry有两部分组成:

第一部分:Repository

第二部分:index

3、从镜像仓库下载镜像的方法

格式如下

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

除了https://hub.docker.com之后,其实还有别的,例如:https://hub.daocloud.io/,再例如CoreOS所维护的:https://quay.io


从quay.io 下载 flannel举例如下

第一步:登录https://quay.io,搜索flannel

Docker系列3:Docker镜像详解

第二步:找到项目地址

Docker系列3:Docker镜像详解

第三步:查看下载镜像的方法

Docker系列3:Docker镜像详解

第四步:查看具体的标签

Docker系列3:Docker镜像详解Docker系列3:Docker镜像详解

Docker系列3:Docker镜像详解

第五步:下载镜像

[root@host1 ~]# docker pull quay.io/coreos/flannel:v0.11.0-s390x
[root@host1 ~]# docker image ls
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
busybox                  latest              b534869c81f0        2 weeks ago         1.22MB
nginx                    1.14-alpine         8a2fb25a19f5        8 months ago        16MB
quay.io/coreos/flannel   v0.10.0-s390x       463654e4ed2d        23 months ago       47MB


二、制作镜像

1、制作镜像方法种类

2、基于现有容器做镜像

第一步:启动一个busybox容器,并创建一个html页面

[root@host1 ~]# docker run --name img1 -it busybox
/ # mkdir /data/html -p
/ # echo "test page[v1.0]">>/data/html/index.html

第二步:再开一个终端,将容器制作成镜像

[root@host1 ~]# docker commit -p img1
sha256:cd7cb2a774400c721ed71f62bd20abe2c000f1d0f7d51d3bf025db1239b86b7d
[root@host1 ~]# docker image ls
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
<none>                   <none>              cd7cb2a77440        6 seconds ago       1.22MB

第三步:给镜像打标签

[root@host1 ~]# docker tag cd7cb2a77440 zxhk/httpd:v1-0
[root@host1 ~]# docker image ls
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
zxhk/httpd               v1-0                cd7cb2a77440        2 minutes ago       1.22MB

再打个标签

[root@host1 ~]# docker tag cd7cb2a77440 zxhk/httpd:latest
[root@host1 ~]# docker image ls
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
zxhk/httpd               latest              cd7cb2a77440        3 minutes ago       1.22MB
zxhk/httpd               v1-0                cd7cb2a77440        3 minutes ago       1.22MB

注意:

第四步:基于这个进行启动一个容器,并在容器中运行apache

[root@host1 ~]# docker run --name newhttpd -it zxhk/httpd:latest
/ # httpd -f -h /data/html

第五步:升级镜像实现自动运行内部的apache

先看看我们做的镜像的详细信息

[root@host1 ~]# docker inspect zxhk/httpd:latest

其中有一部分是Cmd,其中就是容器运行起来以后要执行的命令,如下

"Cmd": [
      "sh"
],

commit创建镜像的时候会可以通过选项来设置这些内容

再重新做个镜像

[root@host1 ~]# docker commit \
> -a "zxhk<237745635@qq.com>" \
> -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' \
> -p img3 zxhk/httpd:v2.0

用这个镜像启动一个容器

[root@host1 ~]# docker run --rm --name test-httpd zxhk/httpd:v2.0

看一下容器中执行的命令

[root@host1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
243f050288bd        zxhk/httpd:v2.0     "/bin/httpd -f -h /d…"   16 seconds ago      Up 15 seconds                           test-httpd

看一下地址信息

[root@host1 ~]# docker inspect 243 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.4",
                    "IPAddress": "172.17.0.4",

在宿主机访问测试容器中的站点

[root@host1 ~]# curl 172.17.0.4
test page[v1.0]

至此,镜像创建完成

三、将制作的镜像上传到docker hub中

1、在https://hub.docker.com/注册用户

2、在docker hub上创建repository和registry

  Docker系列3:Docker镜像详解

  Docker系列3:Docker镜像详解

   Docker系列3:Docker镜像详解 

注意:

3、向自己的仓库中上传镜像文件

第一步:登陆docker hub【我的用户名是zxhk】

[root@localhost ~]# docker login -uzxhk
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

第二步:上传镜像到hub【此处我们上传httpd镜像的二个版本都传上去】

[root@localhost ~]# docker image ls
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
zxhk/httpd               v2.0                89a647171235        18 hours ago        1.22MB
zxhk/httpd               latest              cd7cb2a77440        19 hours ago        1.22MB
zxhk/httpd               v1-0                cd7cb2a77440        19 hours ago        1.22MB
[root@localhost ~]# docker push zxhk/httpd:v2.0
The push refers to repository [docker.io/zxhk/httpd]
f577c88ef366: Pushed 
eac247cb7af5: Mounted from library/busybox 
v2.0: digest: sha256:c1c3e604e37652595563b8dc2be877620c77314c925115c7ba35f9969b1a77a0 size: 734
[root@localhost ~]# docker push zxhk/httpd:v1-0

第三步:在docker hub上查看一下

Docker系列3:Docker镜像详解


第四步:使用docker hub中我们自己的镜像

在docker hub中已经标识了镜像的使用方法,如下:

Docker系列3:Docker镜像详解

为了效果,现将本地的镜像删除

[root@localhost ~]# docker rmi 89 zxhk/httpd:v1-0
[root@localhost ~]# docker rmi 89 zxhk/httpd:v2.0
[root@localhost ~]# docker image ls 
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
busybox                  latest              b534869c81f0        2 weeks ago         1.22MB

下载镜像启动容器

[root@localhost ~]# docker pull zxhk/httpd:v2.0

[root@localhost ~]# docker image ls
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
zxhk/httpd               v2.0                89a647171235        19 hours ago        1.22MB
busybox                  latest              b534869c81f0        2 weeks ago         1.22MB

[root@localhost ~]# docker run --rm --name web1 89a

查看一下容器的信息

[root@localhost ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
0ec8687bb487        89a                 "/bin/httpd -f -h /d…"   16 seconds ago      Up 15 seconds                           web1
[root@localhost ~]# docker inspect 0ec | grep "IPAddr"
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",
[root@localhost ~]# curl 172.17.0.2
test page[v1.0]

四、将制作的镜像上传到阿里云的镜像仓库中

1、在阿里云注册用户

    略

2、进入容器镜像仓库

    Docker系列3:Docker镜像详解

    Docker系列3:Docker镜像详解

    Docker系列3:Docker镜像详解

3、使用阿里云做镜像加速的方法

    Docker系列3:Docker镜像详解

去docker配置文件中添加一个镜像文件

[root@localhost ~]# vim /etc/docker/daemon.json
{
    "registry-mirrors": [
        "https://registry.docker-cn.com",
        "https://mzxx8xy8.mirror.aliyuncs.com"
    ]
}

重启服务

[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker

4、使用阿里云创建仓库

    Docker系列3:Docker镜像详解

    Docker系列3:Docker镜像详解

    Docker系列3:Docker镜像详解

    Docker系列3:Docker镜像详解

看看镜像仓库的使用方法

    Docker系列3:Docker镜像详解

5、向阿里云仓库上传镜像

第一步:使用凭证登录阿里云

[root@localhost ~]# sudo docker login --username=zxhk registry.cn-hangzhou.aliyuncs.com
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 tag 89a registry.cn-hangzhou.aliyuncs.com/zxhk1/httpd:v2.0
[root@localhost ~]# docker push registry.cn-hangzhou.aliyuncs.com/zxhk1/httpd:v2.0

第三步:从阿里云拉取镜像

[root@localhost ~]# sudo docker pull registry.cn-hangzhou.aliyuncs.com/zxhk1/httpd:v2.0
推荐阅读:
  1. Docker 之 镜像的结构详解
  2. Docker操作实践(3):Docker的操作详解

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

docker k8s 虚拟化

上一篇:【量化小讲堂- Python、pandas技巧系列】如何快速上手使用Python进行金融数据分析

下一篇:Hadoop运维记录系列(十六)

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》