Docker容器技术之Docker Image

镜像是Docker容器的基石,容器是镜像的运行实例,有了镜像才能启动容器。

本节索引:

一、Docker image介绍

二、BusyBox

三、示例:推送镜像到镜像仓库

四、示例:搭建docker镜像私有仓库

五、Harbor™ by VMware®

 

 

 

一、Docker image介绍

Docker镜像含有启动容器所需要的文件系统及其内容,因此,

其用于创建并启动docker容器

采用分层构建机制,最底层为bootfs,其之为rootfs

bootfs:用于系统引导的文件系统,包括bootloader和kernel,容器启动完

成后会被卸载以节约内存资源;

rootfs:位于bootfs之上,表现为docker容器的根文件系统;

传统模式中,系统启动之时,内核挂载rotfs时会首先将其挂载为“只读”模式,

完整性自检完成后将其重新挂载为读写模式;

docker中,rootfs由内核挂载为“只读”模式,而后通过“联合挂载 ”技术额外挂

载一个“可写”层;

1

位于下层的镜像称为父镜像(parent image),最底层的称为基础镜像(base image)

最上层为“可读写”层,其下的均为“只读”层

2

 

Repositry

由某特定的docker镜像的所有迭代版本组成的镜像仓库

一个 Registry中可以存在多个Repositry

Repositry可分为“顶层仓库”“用户仓库”

用户仓库名称格式为“用户名/仓库名”

每个仓库可以包含多个Tag(标签) ,每个标签对应一个镜像

Index

维护用户帐户、镜像的校验以及公共命名空间的信息

相当于为Registry提供了一个完成用户认证等功能的检索接口

 

Registry用于保存docker镜像,包括镜像的层次结构和元数据

用户可自建Registry,也可使用官方的Docker Hub

Sponsr Registry:第三方的registry,供客户和Docker社区使用

Miro Registry:第三方的registry,只让客户使用

Vendor Registry:由发布Docker镜像的供应商提供的registry

Private Rgistry:通过设有防火墙和额外的安全层的私有实体提供的registry

 

3

Docker Registry中的镜像通常由开发人员制作,而后推送至“公共”或“私有”Registry上保存,

供其他人员使用,例如“部署”到生产环境;

 

 

示例:利用docker image安装redis容器

以下是docker hub官方库支持的redis镜像版本

4

若要指定版本下载,例如下载redis-4-alpne版本

docker run –name kvstor1 -d redis:4-alpine

5

以/bin/sh运行redis镜像

docker exec -it kvstor1 /bin/sh

6

 

二、BusyBox

BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件。BusyBox 包含了一些简单

的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount

以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个

大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Android 系统的自带的shell。

 

示例:运行busybox开启一个http服务

以b1为name运行busybox镜像

docker run –name b1 -it busybox

1-1

/ # mkdir /data/html -p

/ # http -f -h /data/html/

/ # echo test > /data/html/index.html

-f表示以前台工作运行httpd服务,-b则表示后台运行

/ # httpd -f -h /data/html/

 

开启另外一个tty终端

查看容器网络信息可使用docker inspect命令

docker inspect b1

1-2

 

docker ps    #查看当前运行的容器状态信息

由于未对b1容器做网络转发,只能在本机访问web服务

1-3

 

三、示例:推送镜像到镜像仓库

示例:推送镜像到docker hub

说明:docker hub允许匿名用户下载镜像,但当用户需要将镜像上传至docker hub时,必须在

docker hub创建用户,这里我们创建了一个ms03560355的用户

首先先在docker hub创建一个项目;一个项目中,可以包含多个tags版本

7

查看本地库中的镜像,我们以上传busybox为例

8

要将image上传至docker hub,image名称格式必须为 用户名/项目名:tag

镜像打标签规则:

1、不加tag默认tag为:lastest

2、同一镜像可添加多个tags

docker tag busybox:latest ms03560355/busybox

docker tag busybox:latest ms03560355/busybox:v1.0

再次查看本地镜像

9

上传镜像到docker hub

docker push ms03560355/busybox

docker push ms03560355/busybox:v1.0

10

此时,取docker官网查看:

11

12

 

示例:推送镜像到阿里云

鉴于访问docker hub境外网站速度缓慢,国内用户可选用其他互联网厂商提供的镜像库服务,

我们以阿里云镜像库服务位例介绍如何使用

首页 –> 产品 –> 云计算基础 –> 容器镜像服务

13

创建镜像仓库,按照要求填写,点击下一步

14

这里选择本地仓库,下一步

15

登录阿里云镜像库

docker login –username=ms03560355 registry.cn-hangzhou.aliyuncs.com16

给镜像打tag标签

docker tag registry.cn-hangzhou.aliyuncs.com/wxlinux/hello-world:v1.0

17

推送镜像到阿里云仓库

docker push registry.cn-hangzhou.aliyuncs.com/wxlinux/hello-world

18

此时我们回到阿里云仓库管理控制台,可以看到镜像已上传成功

19

 

四、示例:搭建docker镜像私有仓库

安装docker-regsitry(extras源)

yum install docker-registry.x86_64

实际安装的是docker-distribution包

20

开启服务

systemctl start docker-distribution.service

默认监听5000端口

21

docker tag busybox:latest 192.168.30.10:5000/busybox:v1

22

推送镜像到镜像库,提示错误,必须使用https

23

修改配置可以使用不安全的仓库连接

vim /etc/docker/daemon.json

“insecure-registries”: [“192.168.30.10:5000”]

24

重启docker-distribution与docker服务,再次推送,成功!

systemctl restart docker-distribution.service docker

25

 

 

五、Harbor™ by VMware®

harbor,基于docker-registry进行二次开发,为私有镜像库提供友好的web访问界面

官方网站:http://vmware.github.io/harbor/

参考文档:https://github.com/vmware/harbor/tree/master/docs

Git下载地址:https://github.com/vmware/harbor/releases

26

特性:

支持多租户内容签署和校验

支持安全及风险扫描分析

支持审计日志

支持标识、集成,基于角色的访问控制

支持可扩展的API

支持图形用户界面

国际化支持(目前只支持英文和中文)

 

系统要求:

docker 1.10.0+docker-compose 1.6.0+。

 

主要配置文件:

/etc/harbor/harbor.cfg

 

27

28

 

客户端若想访问harbor,也许配置非安全端口

vim /etc/docker/daemon.json

29

登录

docker login

打标镜像

docker tag myweb:v0.3-1 192.168.30.10/devel/myweb:v0.3-1

推送镜像

docker push 192.168.30.10/devel/myweb

30

 

暂停/停止harbor服务

docker-compose pause/stop

暂停后再次开启harbor服务

docker-compose unpause

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/104444

(0)
wangxczwangxcz
上一篇 2018-08-01 19:21
下一篇 2018-08-03 20:30

相关推荐

  • 搭建完整dns服务(超详细)

    基本框架结构图 域名不一定是magedu.com  可以自定义 准备8台虚拟机 虚拟机地址: 192.168.162.101 作为客户端 192.168.162.102 作为websrv1 端 192.168.162.103 作为websrv2端 192.168.162.104 作为主dns端 192.168.162.105 作为从dns端 192.168.…

    Linux笔记 2018-06-02
  • linux权限管理命令

    date -s “2018-4-3”

    2018-04-03
  • 正则式

    第四周作业

    Linux笔记 2018-06-10
  • 第三周博客作业

    1、列出当前系统上所有已登录的用户名,注意:同一用户登陆多次,则只显示一次即可。
    2、取出最后登录到当前系统的用户的相关信息。
    3、取出当前系统上被用户当作默认shell的最多的那个shell。
    4、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt文件中。
    5、取出当前主机的IP地址,提示:对ifconfig命令的结果进行切分。
    6、列出/etc目录下所有以.conf结尾的文件的文件名,并将其名字转换为大写后保存至/tmp/etc.conf文件中。
    7、显示/var目录下一级子目录或文件的总个数。
    8、取出/etc/group文件中第三个字段数值最小的10个组的名字。
    9、将/etc/fstab和/etc/issue文件的内容合并为同一个内容后保存至/tmp/etc.test文件中。
    10、请总结描述用户和组管理类命令的使用方法并完成以下练习:

    Linux笔记 2018-03-27
  • linux第十天笔记(markdown格式)

    # Linux第十天 “`bashrpm -qf ….“` “`bashyum provides ….“` 批量编译 C,C++:make项目管理器 configure脚本–》makefile.in–》makefile makefile.in是模板文件 makef…

    Linux笔记 2018-04-22
  • Ansible使用介绍(一)基本概念及常用模块

    随着运维自动化经历了从本地部署到基础设施即服务(IaaS)、平台即服务(PaaS)在到软件即服务(SaaS)的发展阶段,掌握多种自动化运维工具就成了运维人员必备技能之一,ansible就是目前国内使用比较广泛的自动化运维工具之一。

    2018-05-29