技术标签: 公共组件 ubuntu 运维 服务器 centos docker
目录
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 包括三个基本概念:
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建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 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
1、快速,一致地交付您的应用程序
Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。容器非常适合持续集成和持续交付(CI / CD)工作流程。
2、响应式部署和扩展
Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。
3、在同一硬件上运行更多工作负载
Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,可以用更少的资源做更多的事情。
Docker Registry,它是所有仓库(包括共有和私有)以及工作流的中央Registry。可以通过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 拉取镜像。
方法 |
路径 |
分类 |
描述 |
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 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
文章浏览阅读354次。微信小程序中使用VantWeapp组件库官方快速上手文档1.新建项目2.初始化项目普通项目如果不是云开发的项目:那么直接在根目录下执行命令:npm init一路回车(如果需要自己配置项目基本信息也可以)。在根目录下就会生成一个package.json文件。云开发项目在miniprogram文件夹下执行初始化命令。3.安装组件库执行命令:npm i @vant/weapp -S --production4.配置组件库在详情—本地设置中勾选使用npm模块。在工具栏中选择工具—_小程序vant-weapp多余的组件需要删掉吗
文章浏览阅读1.2k次。一、JetBrains全家桶官网下载地址:JetBrains官网安装步骤:①第一步:②第二步:插件市场③第三步:添加第三方插件仓库(https://plugins.zhile.io)④第四步:IDE Eval Reset 插件安装⑤第五步:Auto reset before per restart根据以上步骤,可以破解使用所有软件。时间2021-08-03二、支持产品IntelliJ IDEAAppCodeCLionDataGripGoLandPhpStorm_mac jetbra
文章浏览阅读1.2k次,点赞2次,收藏4次。1. 简介Mamba(黑曼巴)专为加速Conda而生,其改写了Conda下载资源的固有方式,以多线程的方式对网络资源进行并行下载,从而大幅提升Conda效率2 Mamba的使用2.1 初识Mamba首先我们需要安装Mamba,既然是用来加速Conda,那么我们可以直接使用下列命令来安装Mambaconda install -c conda-forge mamba很有意思的是Mamba在执行命令时会先打印出logo等信息,对应其名称黑曼巴~ 当然Mamba并不是重写了Con_conda 环境数据传输速度
文章浏览阅读4.8k次,点赞3次,收藏15次。1️⃣ NTP简介网络时间协议,英文名称:Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。NTP的目的是在无序的Internet环境中提供精确和健壮的时间服务。 ——来自网络时间协议_百度百科 2️⃣ 创建NTP服务器点击“创建/注册虚拟机”。选择创建类型。本例_vmware esxi 7 校对时间
文章浏览阅读336次。最近一直没有写东西,天天研究ionic、angularjs、nodejs等等,用ionic做的应用到现在也没出来,学习的路上果然是充满艰辛啊,多么希望能有个帮手,寻找几个使用ionic的朋友共同来完成这些东西,如果能有人看到这个帖子,愿意利用空闲时间合作创业那赶紧与我联络,写代码的路途漫漫,多么需要朋友的相互扶持,这段时间的学习让我感受到不是天才的痛苦,还好有信念能一直支撑着我,要不然我该如何面对_ionic学习的路线
文章浏览阅读5.4k次。tomcat是java程序运行不可或缺的一个工具,最近却遇到 一个问题,tomcat启动不了,点击启动,总是一闪而过。查资料了解到,这属于启动失败,那么应该如何查看具体问题在哪呢? 首先,可以打开tomcat下的bin文件夹,找到startup.bat文件,打开文件,在最后添加pause,设置窗口停止,这样就可以看到具体的问题是什么了。我的错误提示如下: the java_ho_the java_home environment variable is not defined correctly, this environmen
文章浏览阅读1.5k次,点赞8次,收藏4次。0. JNI .dll和.so就不用介绍了吧, 不知道的也应该不需要看本文, 就是库文件. JNI是啥, JNI全称Java Native Interface, 如果你有跟过Java的源码, 反正我觉得最恶心的就是一路跟到一个签名带native的方法, 你什么都看不到. 当然其实也不是什么都看不到要是想知道更加内部的原理还是有办法的, 比如下载hotspot的源码.JNI就是其它语言的代码和Java之间的一个桥, 这个其它语言基本也就是C++了. _java .so jni
文章浏览阅读7.4k次,点赞4次,收藏11次。无法定位元素的问题selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="contact"]"} (Session info: chrome=89.0.4389.90)_no such element: unable to locate element
文章浏览阅读2.6k次,点赞9次,收藏40次。一、稳压电源简介• 由 青梅煮久 写于 2021 年 05 月 27 日_altium designer收费吗
文章浏览阅读1.5w次,点赞5次,收藏13次。说起私有云,相信大家应该都不会陌生,同时也会想到私有云的概念,在几年前,私有云通过虚拟化的技术就已经改变了传统企业的IT架构,全球各地的企业纷纷在其数据中心实施私有云,以扩大虚拟化优势,提高敏捷性,同时保持对合规性和安全性的控制力。私有云(Private Clouds)是为一个客户单独使用而构建的,因而提供对数据、安全性和服务质量的最有效控制。该公司拥有基础设施,并可以控制在此基础设施上部署应_vmware虚拟机构建私有云
文章浏览阅读1w次,点赞3次,收藏12次。之前对三角函数的理解仅局限于sin,cos,tan。但是目前考研过程中遇到的都是些csc,sec,cot,arctan,arccos,arcsin。积分和求导还有一堆公式,很容易记混。我就想能不能用图像帮助记忆,就算记不起来,也能猜出来一些公式。对于sin和cos,根据图像就可以猜出他们之间的关系。sin(x)在-pi/2到+pi/2,单增,-pi/2到0增速由慢到快,0到pi/2增速由快到慢。根..._python反三角函数
文章浏览阅读534次,点赞2次,收藏2次。对于这些专题的详解,专门做了一个983页的PDF版本,如下更多完整项目下载。未完待续。源码。图文知识后续上传github。领取完整版PDF可以点击关于我联系我获取Android源码相关面试专题1、Android属性动画实现原理工作原理 :在一定时间间隔内,通过不断对值进行改变,并不断将该值赋给对象的属性,从而实现该对象在该属性上的动画效果。1)ValueAnimator:通过..._腾讯android代码题