博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker私库
阅读量:4047 次
发布时间:2019-05-25

本文共 5356 字,大约阅读时间需要 17 分钟。

Docker私库

目录

 

 

简介

一、Docker简介

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

 

Docker 包括三个基本概念:

  • 镜像(Image)Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container)镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository)仓库可看成一个代码控制中心,用来保存镜像。

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker 容器通过 Docker 镜像来创建。

容器与镜像的关系类似于面向对象编程中的对象与类。

二、Docker私库简介

官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。但是,有时候,我们的使用场景需要我们拥有一个私有的镜像仓库用于管理我们自己的镜像。这个可以通过开源软件Registry来达成目的。

  Registry在github上有两份代码:老代码库和新代码库。老代码是采用python编写的,存在pull和push的性能问题,出到0.9.1版本之后就标志为deprecated,不再继续开发。从2.0版本开始就到在新代码库进行开发,新代码库是采用go语言编写,修改了镜像id的生成算法、registry上镜像的保存结构,大大优化了pull和push镜像的效率。

  官方在Docker hub上提供了registry的镜像(详情),我们可以直接使用该registry镜像来构建一个容器,搭建我们自己的私有仓库服务。

三、Docker优势

Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

 

1、快速,一致地交付您的应用程序

Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。容器非常适合持续集成和持续交付(CI / CD)工作流程。

2、响应式部署和扩展

Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。

Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。

3、在同一硬件上运行更多工作负载

Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,可以用更少的资源做更多的事情。

部署与使用

Docker Registry,它是所有仓库(包括共有和私有)以及工作流的中央Registry。可以通过Registry在局域网内部搭建私有的镜像注册中心。

一、Registry的部署

  1. 运行下面命令获取registry镜像

docker pull registry

下载到的版本默认为 docker.io/registry latest版本

     2.将registry镜像运行并生成一个容器

docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest

Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了。

     3.运行docker ps看一下容器运行情况

     4.registry容器启动后,打开浏览器输入http://ip_add:5000/v2/,看到下面情况说明registry运行正常

 

     5.测试上传镜像到Registry

通过将镜像push到registry来验证,首先将主机的registry镜像命名为符合仓库要求registry_url:port/ImageName:tag的格式,如图

 

通过docker tag命令来实现命名:

docker tag java:8 192.168.30.12:5000/java:8

通过命令 docker images 查看本地镜像,重新创建了一个镜像。

上传jdk镜像到Registry仓库:

docker push 192.168.30.12:5000/java:8

 

注意:

     可能会出现无法push镜像到私有仓库的问题。提示:

 

这是因为我们启动的registry服务不是安全可信赖的。这时需要修改客户端docker的配置文件/etc/docker/daemon.json,添加下面红色的内容(registry服务地址、docker日志文件大小限制):

 

{

"insecure-registries": ["192.168.30.12:5000"],

"log-driver":"json-file",

"log-opts": { "max-size": "100m", "max-file": "5" }

}

 

修改好之后需要重启Docker服务才能生效,执行命令:systemctl restart docker ,再push即可。

push成功之后,查看本地/opt/registry目录下已经有了刚推送上来的registry镜像,也可以在浏览器中输入http://ip_add:5000/v2/_catalog

 

或者使用以下命令查看:

curl -XGET http://registry:5000/v2/_catalog

curl -XGET http://registry:5000/v2/image_name/tags/list

至此,我们的Registry私有仓库搭建完成,如果在今后中要使用,可以使用命令:docker pull ip_add:5000/jdk_8u191:20190307 拉取镜像。

二、Registry接口列表

方法

路径

分类

描述

GET

/v2/

Base

检查是否支持2.0接口

GET

/v2/${image}/tags/list

Tags

获取镜像标签列表

GET

/v2/${image}/manifests/<referevce>

Manifest

获取镜像主要信息

PUT

/v2/${image}/manifests/<referevce>

Manifest

修改镜像主要信息

DELETE

/v2/${image}/manifests/<reference>

Manifest

删除镜像的主要信息

GET

/v2/${image}/blobs/<digest>

Blob

获得镜像层

DELETE

/v2/${image}/blobs/<digest>

Blob

删除镜像层

POST

/v2/${image}/blobs/uploads/

Initiate Blob Upload

开始分块上传

GET

/v2/${image}/blobs/uploads/<uuid>

Blob Upload

获得分块上传的速度

PATCH

/v2/${image}/blobs/uploads/<uuid>

Blob Upload

分块上传数据

PUT

/v2/${image}/blobs/uploads/<uuid>

Blob Upload

完成上传

DELETE

/v2/${image}/blobs/uploads/<uuid>

Blob Upload

取消上传

GET

/v2/_catalog

Catalog

获得镜像列表

 

Docker常用命令

一、基本命令

docker version查看docker版本

docker info查看docker详细信息

docker --help查看docker命令

二、镜像命令

docker images查看docker镜像

docker images -a列出本地所有的镜像

docker images -p只显示镜像ID

docker images --digests显示镜像的摘要信息

docker images --no-trunc显示完整的镜像信息

 

docker search tomcat从Docker Hub上查找tomcat镜像

docker pull tomcat从Docker Hub上下载tomcat镜像。等价于:docker pull tomcat:latest

 

docker commit -m "提交的描述信息" -a "作者" 容器ID 要创建的目标镜像名称:[标签名]提交容器使之成为一个新的镜像。

如:docker commit -m "新的tomcat" -a "lizq" f9e29e8455a5 mytomcat:1.2

 

docker rmi hello-world从Docker中删除hello-world镜像

docker rmi -f hello-world从Docker中强制删除hello-world镜像

docker rmi -f hello-world nginx从Docker中强制删除hello-world镜像和nginx镜像

docker rmi -f $(docker images -p)通过docker images -p查询到的镜像ID来删除所有镜像

三、容器命令

docker run [OPTIONS] IMAGE根据镜像新建并启动容器。IMAGE是镜像ID或镜像名称

OPTIONS说明:

 --name=“容器新名字”:为容器指定一个名称

 -d:后台运行容器,并返回容器ID,也即启动守护式容器

 -i:以交互模式运行容器,通常与-t同时使用

 -t:为容器重新分配一个伪输入终端,通常与-i同时使用

 -p:随机端口映射

 -p:指定端口映射,有以下四种格式:

  ip:hostPort:containerPort

  ip::containerPort

  hostPort:containerPort

  containerPort

 

docker ps列出当前所有正在运行的容器

docker ps -a列出所有的容器

docker ps -l列出最近创建的容器

docker ps -n 3列出最近创建的3个容器

docker ps -q只显示容器ID

docker ps --no-trunc显示当前所有正在运行的容器完整信息

 

docker start 容器ID或容器名称启动容器

docker restart 容器ID或容器名称重新启动容器

docker stop容器ID或容器名称停止容器

docker kill 容器ID或容器名称强制停止容器

docker rm 容器ID或容器名称删除容器

docker rm -f 容器ID或容器名称强制删除容器

docker rm -f $(docker ps -a -q)删除多个容器

docker logs -f -t --since --tail 容器ID或容器名称查看容器日志

如:docker logs -f -t --since=”2018-09-10” --tail=10 f9e29e8455a5

 -f : 查看实时日志

 -t : 查看日志产生的日期

 --since : 此参数指定了输出日志开始日期,即只输出指定日期之后的日志

 --tail=10 : 查看最后的10条日志

docker top 容器ID或容器名称查看容器内运行的进程

docker inspect 容器ID或容器名称查看容器内部细节

docker attach 容器ID进到容器内

docker exec 容器ID进到容器内

docker cp 容器ID:容器内的文件路径 宿主机路径从容器内拷贝文件到宿主机.

如:docker cp f9e29e8455a5:/tmp/yum.log /root

转载地址:http://hvfci.baihongyu.com/

你可能感兴趣的文章
NSNotificationCenter 用法总结
查看>>
C primer plus 基础总结(一)
查看>>
剑指offer算法题分析与整理(三)
查看>>
Ubuntu 13.10使用fcitx输入法
查看>>
pidgin-lwqq 安装
查看>>
mint/ubuntu安装搜狗输入法
查看>>
C++动态申请数组和参数传递问题
查看>>
opencv学习——在MFC中读取和显示图像
查看>>
C/C++中关于动态生成一维数组和二维数组的学习
查看>>
JVM最简生存指南
查看>>
Java的对象驻留
查看>>
JVM并发机制探讨—内存模型、内存可见性和指令重排序
查看>>
持续可用与CAP理论 – 一个系统开发者的观点
查看>>
nginx+tomcat+memcached (msm)实现 session同步复制
查看>>
c++字符数组和字符指针区别以及str***函数
查看>>
c++类的操作符重载注意事项
查看>>
c++模板与泛型编程
查看>>
WAV文件解析
查看>>
WPF中PATH使用AI导出SVG的方法
查看>>
WPF UI&控件免费开源库
查看>>