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

相关推荐

  • Linux程序包管理

    Linux程序包管理 rpm rpm命令是RPM软件包的管理工具。rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序 语法 rpm(选项)(参数) rpm {-i|–install} [install-options] PACKAGE_FILE … rpm {-U|–upgrade} [install-options] …

    Linux笔记 2018-04-03
  • 关于grep 与 正则表达式的那些事

    首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同! 正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串。vim、grep、awk 、sed 都支持正则表达式,也正是因为由于它们支持正则,才显 得它们强大grep (缩写来自Globally search a Regular Expression and…

    Linux笔记 2018-04-08
  • Work Two(知识点)

    补充: (1)mkdir:创建目录            mkdir [选项] 目录…             -p:自动按需创建父目录             -v:verbose,显示详细过程            -m:在创建目录时直接添加权限         注意:路径基名方为命令的作用对象,基名之前的路径必须要存在 (2)rmdir:移…

    2018-07-15
  • 脚本练习——判断语句

    1、编写脚本/root/bin/createuser.sh,实现如下功能:使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户的id号等信息 #!/bin/bash #判断参数是否是一个,否则退出 [ “$#” -ne 1 ] && echo “Please Input …

    Linux笔记 2018-05-04
  • bash脚本进阶

    过程式编程语言:顺序执行选择执行if判断if 判断条件;那么条件为真的分支代码fi if 判断条件;then条件为真的分支代码else条件为假的分支代码fi多分支if 判断条件1; then条件为真的分支代码elif 判断条件2; then条件为真的分支代码elif 判断条件3; then条件为真的分支代码else以上条件都为假的分支代码ficase 变量引…

    2018-05-11
  • MySQL之主从复制相关实验

    本节索引 实验一:搭建主从复制 实验二:为已存放大量数据的在用服务器搭建从服务器 实验三:级联复制 实验四:提升一个从服务器为主服务器 实验五:主主复制 实验六:半同步复制 实验七:实现主从SSL加密复制     实验一:搭建主从复制 前期准备: 两台虚拟机 主服务器:     CentOS7.4  192.168.30.10      …

    2018-06-18