前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >这就是你日日夜夜想要的docker!!!---------Docker镜像制作与私有仓库建立

这就是你日日夜夜想要的docker!!!---------Docker镜像制作与私有仓库建立

作者头像
不吃小白菜
发布2020-09-22 11:23:21
5490
发布2020-09-22 11:23:21
举报

文章目录

一、docker镜像介绍

1、什么是Docker镜像

Docker 镜像是由文件系统叠加而成(是一种文件的存储形式)。最底端是一个文件引 导系统,即 bootfs,这很像典型的 Linux/Unix 的引导文件系统。Docker 用户几乎永远不会和 引导系统有什么交互。实际上,当一个容器启动后,它将会被移动到内存中,而引导文件系 统则会被卸载,以留出更多的内存供磁盘镜像使用。Docker 容器启动是需要一些文件的, 而这些文件就可以称为 Docker 镜像。

如何得到镜像:

  • 从远程仓库下载
  • 朋友拷贝给你
  • 自己制作一个镜像DockerFile
在这里插入图片描述
在这里插入图片描述

2、Docker镜像加载原理

我们下载的时候一层一层的就是这个 UnionFS ( 联合文件系统) UnionFS (联合文件系统) : Union文件系统( UnionFS)是-种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来-层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtualfilesystem)。Union 文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像) , 可以制作各种具体的应用镜像。

特性: 一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

在这里插入图片描述
在这里插入图片描述

docker的镜像实际_上由一层一层的文件系统组成,这种层级的文件系统UnionFS.

  • bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是弓|导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boo加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs.
  • rootfs (root file system) , 在bootfs之上。包含的就是典型Linux 系统中的/dev, /proc, /bin, /etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu , Centos等等。

平时我们安装进虚拟机的CentOS都是好几个G ,为什么Docker这里才200M ? 对于一个精简的OS , rootfs 可以很小,只需要包含最基本的命令, 只具有程序库就可以了,因为底层直接用Host的kernel ,自己只需要提供rootfs就可以了。由此可见对于不同的linux发行版, bootfs基本是一致的, rootfs会有差别,因此不同的发行版可以公用bootfs。

4、镜像构建原理

在这里插入图片描述
在这里插入图片描述

4、构建镜像有三种方式:

1、基于Dockerfile(最常用)创建

2、基于已有的镜像容器进行创建镜像

3、基于本地模板进行构建

二、创建镜像

1、Dockerfile简介?

Dockerfile是由一组指令组成的文件

Dockerfile结构分成四个部分:

  • 1、基础镜像信息
  • 2、维护者信息
  • 3、镜像操作指令
  • 4、容器启动时指定指令

(1)Dockerfile常用操作指令

在这里插入图片描述
在这里插入图片描述

(2)Dockerfile创建镜像

使用Dockerfile创建一个httpd镜像并运行 1、编写Dockerfile文件

代码语言:javascript
复制
[root@docker ~]# mkdir apache
[root@docker ~]# cd apache/
[root@docker apache]# vim Dockerfile
##基于的基础镜像
FROM centos 
##维护镜像的用户信息
MAINTAINER The porject <CN-TangZheng> 
##镜像操作指令安装Apache软件
RUN yum -y update    
 ##安装Apache服务 
RUN yum -y install httpd 
##开启80端口
EXPOSE 80  
##复制网址首页文件
ADD index.html /var/www/html/index.html	'//此命令可以结合上图理解'
##将执行脚本复制到镜像中
ADD run.sh /run.sh           
RUN chmod 755 /run.sh
##启动容器时执行脚本
CMD ["/run.sh"]             

2、编写执行脚本与首页内容

代码语言:javascript
复制
[root@docker apache]# vim run.sh
#!/bin/bash
rm -rf /run/httpd/*	'//清除缓存'
exec /usr/sbin/apachectl -D FOREGROUND	'//启动apache'
[root@docker apache]# echo "this is test web" > index.html

3、生成镜像

代码语言:javascript
复制
[root@docker apache]# ls
Dockerfile  index.html  run.sh
[root@docker apache]# docker build -t httpd:centos .	'//最后的一个"."要注意,-t:镜像的名字:标签'
    '//每一个缓存层都会生成一个临时容器来执行命令,然后删除'
[root@docker apache]# docker images	'//查看镜像,已经生成了两个'
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
httpd               centos              d2010670b33a        19 seconds ago      434MB
centos              latest              470671670cac        3 months ago        237MB

4、新镜像运行容器

代码语言:javascript
复制
[root@docker apache]# docker run -d -p 1111:80 httpd:centos	'//-p 指定端口号,-P 随机端口号'
04b0f0f1bda36a4857f8d48e044cd17f442be19f4d32dee4cf3183827b451b55
[root@docker apache]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
04b0f0f1bda3        httpd:centos        "/run.sh"           4 seconds ago      

2、基于已有的镜像容器创建

创建容器

代码语言:javascript
复制
[root@docker apache]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
httpd               centos              d2010670b33a        23 minutes ago      434MB
centos              latest              470671670cac        3 months ago        237MB	'//使用此镜像创建容器'
[root@docker apache]# docker create -it centos /bin/bash
[root@docker apache]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
325c28cc9349        centos              "/bin/bash"         42 seconds ago      Created                                    infallible_poitras
04b0f0f1bda3        httpd:centos        "/run.sh"           21 minutes ago      Up 21 minutes       0.0.0.0:1111->80/tcp   nostalgic_greider

创建镜像

代码语言:javascript
复制
[root@docker apache]# docker commit -m "ceshi" -a "tang" 325c28cc9349 tang:centos	'//-m:说明文字,-a:提交的作者'
sha256:a49089651887dee9c9168532466542ca7ea0c9113da078230694ac30aebe064c
[root@docker apache]# docker images	'//镜像创建成功'
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tang                centos              a49089651887        14 seconds ago      237MB
httpd               centos              d2010670b33a        30 minutes ago      434MB
centos              latest              470671670cac        3 months ago        237MB

3、基于本地模板创建

下载本地模板 通过导入系统模板文件可以生成镜像,模板可以从OPENVZ开源项目下载 地址为:https://wiki.openvz.org/Download/template/precreated 或者使用wget下载:wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz 模板下载后直接导入即可

代码语言:javascript
复制
[root@docker opt]# ls
debian-7.0-x86-minimal.tar.gz
[root@docker opt]# cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new
[root@docker opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
daoke               new                 487145d2411f        8 seconds ago       215MB

二、Docker私有仓库建立

Docker Registry工具目前最新为2.0系列版本,这一版本与一些类库、工具一起被打包为负责容器内容分发的工具集:Docker Distribution。目前其核心的功能组件仍为负责镜像仓库的管理。新版本的Registry基于Golang进行了重构,提供更好的性能和扩展性,并且支持Docker 1.6+的API,非常适合用来构建私有的镜像注册服务器。官方仓库中也提供了Registry的镜像,因此用户可以通过容器运行和源码安装两种方式来使用Registry。

1、私有仓库设置步骤

1、下载registry镜像 2、客户端设置daemon.json文件,指定私有仓库位置 3、生成registry容器,开放5000端口 4、镜像打标签 5、上传镜像,docker push 6、下载镜像,docker pull

2、建立私有仓库

(1)服务端下载registry镜像

代码语言:javascript
复制
[root@docker apache]# docker pull registry

(2)指定镜像仓库的地址

代码语言:javascript
复制
[root@docker apache]# vim /etc/docker/daemon.json 
{
  "insecure-registries": ["192.168.233.133:5000"],	'//添加此段'
  "registry-mirrors": ["https://yu1vx79j.mirror.aliyuncs.com"]
}
[root@docker apache]# systemctl restart docker

(3)生成registry容器,开放5000端口

registry必须要是up状态才能提供服务

代码语言:javascript
复制
[root@docker apache]# docker create -it registry /bin/bash
87db162017924493a4dadefd1f58ff2fdf5a62921a9f4233c84143340e36e1e5
[root@docker apache]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                            PORTS                  NAMES
87db16201792        registry            "/entrypoint.sh /bin…"   12 seconds ago       Created                                                  agitated_darwin
[root@docker apache]# docker start 87db16201792
[root@docker apache]# docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry    '共享目录  宿主机的data共享到docker的tmp下'
60e04d648d5116ceb369eee810e8ed85f2043aa2f573b0ebf1e1233e8e13e2f6

(4)镜像打标签

代码语言:javascript
复制
[root@docker apache]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tang                centos              a49089651887        38 minutes ago      237MB
httpd               centos              d2010670b33a        About an hour ago   434MB
registry            latest              708bc6af7e5e        2 months ago        25.8MB
centos              latest              470671670cac        3 months ago        237MB
[root@docker apache]# docker tag tang:centos 192.168.233.133:5000/httpd  '要打上镜像仓库ip地址端口的tag'

(5)上传镜像测试

代码语言:javascript
复制
[root@docker apache]# docker push 192.168.233.133:5000/httpd
The push refers to repository [192.168.233.133:5000/httpd]
0683de282177: Pushed 
latest: digest: sha256:7a6f34c22ab081c96ee0b676244300691d7a2f63fe4aedd22f150f17fe4aa5a9 size: 529

(6)下载镜像测试

curl 查看镜像目录

代码语言:javascript
复制
[root@docker apache]#  curl -XGET http://192.168.233.133:5000/v2/_catalog
{"repositories":["httpd"]}
[root@docker apache]# docker pull 192.168.233.133:5000/httpd  '从本地下载镜像'
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、docker镜像介绍
    • 1、什么是Docker镜像
      • 2、Docker镜像加载原理
        • 4、镜像构建原理
          • 4、构建镜像有三种方式:
          • 二、创建镜像
            • 1、Dockerfile简介?
              • (1)Dockerfile常用操作指令
            • (2)Dockerfile创建镜像
              • 2、基于已有的镜像容器创建
                • 3、基于本地模板创建
                • 二、Docker私有仓库建立
                  • 1、私有仓库设置步骤
                    • 2、建立私有仓库
                      • (1)服务端下载registry镜像
                      • (2)指定镜像仓库的地址
                      • (3)生成registry容器,开放5000端口
                      • (4)镜像打标签
                      • (5)上传镜像测试
                      • (6)下载镜像测试
                  相关产品与服务
                  容器镜像服务
                  容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档