Docker镜像创建及管理(Hub官方仓库使用及私有注册中心搭建)

news2024/11/18 1:23:33

写在前面

系统环境:centos 7

一、Docker如何创建镜像

镜像的来源有两种:

  1. 从镜像仓库下载镜像;
  2. 自己创建新的镜像。创建分为两种:(1)基于已有镜像创建;(2)使用Dockerfile创建。

1.1 基于已有镜像创建

基于已有容器构建镜像主要是通过 docker commit 命令来构建新的镜像。构建步骤主要分为三步:(1)运行容器;(2)修改容器;(3)将容器保存为新的镜像。

运行容器
docker run -it ubuntu   # 运行容器

在这里插入图片描述

修改容器

这里我们往容器里添加了 hello.c 文件

touch hello.c   ## 修改容器,
exit            # 退出容器

在这里插入图片描述

保存为新的容器
docker commit -a "panda" -m "commit test" 7f77678f7782 ubuntu-hello  # 保存为新的容器
docker images # 查看

可以看到已经有了 ubuntu-hello 镜像。启动新的镜像,查看是否存在 hello.c 文件。
在这里插入图片描述

1.2 使用Dockerfile创建

1.2.1 构建镜像步骤分为三步:
  1. 将上下文发送到守护进程;
  2. 守护进程拿到上下文,向docker server发送http请求,构建镜像
  3. docker server 拿到上下文,按照docerfile要求创建镜像,构建过程可能会用到缓存
1.2.2 Dockerfile 关键字
FROM        #设置镜像使用的基础镜像
MAINTAINER  #设置镜像的作者
RUN   #编译镜像时,要执行的命令
CMD   #设置容器的启动命令
LABEL #设置镜像标签
EXPOSE #设置镜像暴露的端口
ENV    #设置容器的环境变量
ADD # 编译镜像时复制上下文中文件到镜像中
COPY  # 编译镜像时复制上下文中文件到镜像中
ENRYPOINT # 设置容器的入口程序
VOLUME # 设置容器的挂载卷
USER # 设置 RUN CMD ENTRYPOINT 的用户名
WORKER 设置RUN CMD ENTRYPOINT COPY ADD 指令的工作目录
ARG 设置编译镜像时加入的参数
ONBUILD 设置镜像的 ONBUILD 指令
STOPSIGNAL 设置容器退出时候的信号量

Add 和 copy的区别

COPY  ./hello.c  ./
ADD   ./nginx.tar.gz  ./
ADD   http://www.panda.com/nginx.tar.gz

ADD可以在拷贝压缩文件的时候回直接进行解压,如果ADD后面跟的是网址,可从网站直接下载文件,这里就是单纯的下载文件了,不解压!

1.2.2 Dockerfile实战:以hello.c 为例,创建Dockerfile

创建 hello.c 源文件

#include <stdio.h>
int main()
{
    printf("hello, world\n");
    return 0;
}

创建 Dockerfile 文件

FROM gcc 指定基础镜像,如果是go程序 则 FROM golang:1.18,如果不指定版本,默认最新版本。注意:pwd是在构建过程中执行的,并不是在容器中执行

FROM gcc
MAINTAINER panda
COPY ./hello.c ./
RUN pwd
LABEL myhello 1.0.0
LABEL env prod
RUN gcc  hello.c -o hello
CMD ["./hello"]

构建镜像

docker build -t myhellc .

在这里插入图片描述

运行镜像

docker run -it myhelloc

在这里插入图片描述

细心的小伙伴可能发现了,我们的代码实际上就写了一行。但是,构建出来的镜像却有1.27个g,很明显是不合理的。此时,就需要多阶段构建。

二、Docker镜像管理

2.1 Hub官方仓库使用

Docker Hub是目前Docker官方维护的一个公共仓库,它用来保存我们的镜像其中包括海量镜像,如:nginx、redis、ubuntu等,跟github作用类似。

2.1.1 使用Hub官方仓库需要用户名、密码和邮箱来注册账号。注册完登录成功,就可以开始搭建自己的仓库了。

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

2.1.2 登录验证

注意:默认登录使用的是官方仓库,登出也是。

docker login -u panbamboo  # 直接使用-u 默认登录的是官方仓库

在这里插入图片描述

2.1.3 镜像推送验证

我们将第一部分生成的myhelloc镜像重新打个tag( hello是镜像名称,tag为1.0.0 )上传到我们刚建的公有仓库。

# 打tag
docker tag myhelloc:latest panbamboo/hello:1.0.0
# 推送到公有仓库
docker push panbamboo/hello:1.0.0

在这里插入图片描述推送完成,刷新下界面就能看下途中红色框中的镜像已经成功上传了。

在这里插入图片描述
现在我们可以删除本地panbamboo/hello:1.0.0镜像,docker images 查看本地已经没有该镜像。

docker rmi panbamboo/hello:1.0.0  # 

在这里插入图片描述

再从远端仓库拉取镜像。
在这里插入图片描述
到这里我们就掌握使用官方Hub仓库推送和拉取镜像了,是不是很简单~

2.2 搭建私有仓库

官方给我们提供了一个 registry 的镜像来帮助我们搭建私有镜像注册中心。在首页搜索 registry ,然后复制 红色框命令,准备拉取镜像。私有仓库如果是公司内网访问的话,用户名密码也可以考虑省略。
在这里插入图片描述

2.2.1 拉取 registry 镜像
docker pull registry

在这里插入图片描述

2.2.2 安装 apache2-utils

apache2-utils 是用来生成用户名和密码,安装命令如下:

#  ubuntu 
sudo apt-get install apache2-utils   
# centos
sudo yum -y install httpd-tools     
2.2.3 创建存储目录

因为是注册中心,用来存放镜像,所以先创建一个位置来存放我们的镜像。

注意:创建前先使用echo $HOME 查看下自己的HOME路径是什么,否则你创建完都不知道自己创建的目录在什么位置

echo  $HOME
/root        #  $HOME 的值
mkdir -p $HOME/registry
mkdir -p $HOME/registry/auth
mkdir -p $HOME/registry/data

将用户名密码写入 /root/registry/auth/ 目录下 htpasswd 文件,密码是加密后的形式。

# 用户名和密码都是:panda
htpasswd -Bbn panda panda > $HOME/registry/auth/htpasswd

在这里插入图片描述

2.2.4 运行docker
docker run -d -p 5000:5000 --name registry --restart=always -v $HOME/registry/data:/var/lib/registry -v $HOME/registry/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry:2

使用 docker ps 看到 registry 表明启动完成。
在这里插入图片描述

补充:还可以使用docker inspect registry 查看目录挂载情况(Mounts字段)
在这里插入图片描述

2.2.5 修改 docker.service 配置文件

在如下位置后面添加:–insecure-registry localhost:5000,localhost:5000 是用户名,可以任意起名。

vim /lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
--insecure-registry localhost:5000

在这里插入图片描述到这里,我们的私有注册中心就构建完成了。

2.2.6 私有中心推送和拉取验证

因为我们目前使用的官方仓库,所以,我们需要先登出,才能登录私有注册中心。

注册中心切换
docker logout

docker login localhost:5000   # 这里写你自己的

docker tag myhelloc:latest localhost:5000/hello:1.0.0
推送验证
docker push localhost:5000/hello:1.0.0   ## 等待推送成功即可
拉取验证
docker images # 找到localhost:5000/hello:1.0.0 对应的 IMAGE ID a62b4a7b6bfc

docker rmi -f a62b4a7b6bfc   # -f 强制删除该镜像

docker pull localhost:5000/hello:1.0.0  ## 拉取镜像

2.3 docker save/load 命令

docker save可以保存本地已有镜像到 xxx.tar 文件,再通过 docker load -i xxx.tar 加载本地镜像

docker save -o nginx.tar nginx:latest  # 将nginx镜像保存到本地 nginx.tar 文件

tar -xvf nginx.tar -C tmp/  # 将镜像解压到tmp目录,有兴趣的可以看看里面有什么,实际上还是分层存储
docker load -i nginx.tar  # 从本地加载镜像

在这里插入图片描述
与docker import/ export 的区别
docker load 在加载的时候是无法修改镜像的名称以及tag的,docker import/ export可以。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/353353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据治理-03】无规矩不成方圆,聊聊如何建立数据标准

无规矩&#xff0c;不成方圆&#xff01;数据标准&#xff08;Data Standards&#xff09;是保障数据的内外部使用和交换的一致性和准确性的规范性约束&#xff0c;作为数据治理的基石&#xff0c;是绕不开的一项工作&#xff0c;如此重要的活如何干&#xff0c;咱们一起聊聊。…

【数据结构】排序算法

目录 1.理解排序 1.1 排序的概念 1.2 排序的运用场景 1.3 常见的排序算法 2.插入排序算法 2.1 直接插入排序 2.2 希尔排序 3.选择排序算法 3.1 直接选择排序 3.2 堆排序 4.交换排序算法 4.1 冒泡排序 4.2 快速排序 4.2.1 hoare 法 4.2.2 挖坑法 4.2.3 前…

前期软件项目评估偏差,如何有效处理?

1、重新评估制定延期计划 需要对项目进行重新评估&#xff0c;将新的评估方案提交项目干系人会议&#xff0c;开会协商一致后按照新的讨论结果制定计划&#xff0c;并实施执行。 软件项目评估偏差 怎么办&#xff1a;重新评估制定延期计划2、申请加资源 如果项目客户要求严格&a…

用股票交易量查询接口是怎么查询a股全天总成交量的?

用股票交易量查询接口是怎么查询a股全天总成交量的&#xff1f;今天下班就以通达信给大家讲解一下&#xff0c;通常是在K线图的底部状态栏&#xff0c;可以在日线进行查看a股成交量。在市场栏底部的子图中。 有当天成交的数量。成交量是表示一定的时间内已经成交的中的成交数量…

【数据挖掘】期末复习笔记(重点知识)

Data Mining 一、概述 1.1 数据挖掘 VS 机器学习 VS 深度学习 VS 知识发现 知识发现&#xff1a; 知识发现就是在数据中发掘知识&#xff0c;将低层次的原始数据转换为高层次的信息。 数据挖掘&#xff1a; 数据挖掘是用一系列的方法或算法从数据中挖掘有用的信息&#xf…

Android中的MVC、MVP、MVVM架构你清楚不?(附实现代码)

01 架构介绍 先来看一下MVC、MVP、MVVM的架构图。 从这些架构图中&#xff0c;可以看到每种架构都有3个模块以及数据流动方向箭头。 模块 在系统架构中&#xff0c;首先要做的就是把系统整体按照一定的原则划分成模块。 数据流动 模块划分之后&#xff0c;模块之间的通信&…

工程监测多通道振弦模拟信号采集仪VTN的MODBUS 通讯协议

工程监测多通道振弦模拟信号采集仪VTN的MODBUS 通讯协议 在 MODBUS 协议下&#xff0c;所有寄存器被定义为“保持寄存器” &#xff08;详见 MODBUS 通讯协议标准说明&#xff09;&#xff0c; 设备支持基于 MODBUS 协议的多个连续寄存器读取、单个寄存器写入两种指令码&#x…

电液伺服阀控制器YY-100

供电电源&#xff1a; 24V DC(18&#xff5e;36V)&#xff1b; 控制输入&#xff1a; -10V&#xff5e;10V DC&#xff1b;最大输出&#xff1a; 70mA &#xff1b;增益 &#xff1a; 调节范围——1&#xff5e;40 mA&#xff08;出厂设置——4 mA&#xff09;&#xff1b; 偏置…

C语言从0到1算法小白训练营——day2

我们学习不仅仅是要把难的学会&#xff0c;也要注重基础&#xff0c;注重内功。 接下来我们继续先从基础知识开始&#xff1a; 1. 字符串字符常量注释 1.1 字符串 如&#xff1a;“abc” ①定义&#xff1a;由双引号引起来的一串字符称为字符串。 ②C语言规定&#xff0c;…

【计算机网络】P1 - 物理层

物理层大纲物理层基本概念数据通信基础两种入网方式传输过程源系统、传输系统与目的系统数据与信号信源、信宿与信道三种通信方式两种传输方式大纲 物理层基本概念 物理层解决如何在传输媒体上&#xff08;同轴电缆&#xff0c;光纤等&#xff09;上传输数据比特流。主要任务为…

detach,主线程终止后子线程会结束吗

此前&#xff0c;我对detach的理解是&#xff0c;当主线程退出后&#xff0c;子线程能够继续存在。实际上&#xff0c;当主线程退出后&#xff0c;子线程也随之结束了。先看一个例子&#xff1a; #include <iostream> #include <thread> #include <unistd.h>…

交叉编译 zlib

交叉编译 zlib 概述 zlib 被设计为一个免费的、通用的、不受法律约束的、即不受任何专利保护的无损数据压缩库&#xff0c;可在几乎任何计算机硬件和操作系统上使用。zlib 数据格式本身可以跨平台移植。与Unix 压缩和 GIF 图像格式中使用的 LZW 压缩方法不同&#xff0c;zlib …

RocketMq使用规范(纯技术和实战建议)

概述&#xff1a; 使用规范主要从&#xff0c;生产、可靠性、和消费为轴线定义使用规范&#xff1b;kafka使用核心&#xff1a;削峰、解耦、向下游并行广播通知&#xff08;无可靠性保证&#xff09;和分布式事务&#xff0c;本规范仅从削峰、解耦、向下游并行广播通知论述&am…

OceanBase 4.0解读:兼顾高效与透明,我们对DDL的设计与思考

关于作者 谢振江&#xff0c;OceanBase 高级技术专家。 2015年加入 OceanBase, 从事存储引擎相关工作&#xff0c;目前在存储-索引与 DDL 组&#xff0c;负责索引&#xff0c;DDL 和 IO 资源调度相关工作。 回顾关系型数据库大规模应用以来的发展&#xff0c;从单机到分布式无…

什么是BOM?与焊盘不匹配,怎么办?

什么是BOM&#xff1f; 简单的理解就是&#xff1a;电子元器件的清单&#xff0c;一个产品由很多零部件组成&#xff0c;包括&#xff1a;电路板、电容、电阻、二三极管、晶振、电感、驱动芯片、单片机、电源芯片、升压降压芯片、LDO芯片、存储芯片、连接器座子、插针、排母、…

成为IT服务台经理需要什么技能

要给员工带来愉快的体验&#xff0c;就必须对你的服务台进行有效的管理。为此&#xff0c;了解为什么服务台经理的角色对于绘制企业组织良好的服务台至关重要。在本指南中&#xff0c;我们将深入探讨他们的角色、能力和贡献&#xff0c;以了解如何顺利处理服务台操作。 IT 服务…

【面试题】前端 移动端自适应?

移动端 h5 开发中有一个绕不开的话题&#xff1a;移动端自适应方案。移动端的设备尺寸不尽相同&#xff0c;要把 UI 设计图较好地展示在移动端上&#xff0c;需要让 h5 页面能自适应设备尺寸。接下来将对移动端自适应的相关概念、方案和其他一些常见问题做个介绍。概念简介大厂…

什么是 Web3?解读未来的去中心化网络:The Decentralized Internet of the Future Explained

目录 互联网的演化 什么是 Web 1.0? 什么是 Web 2.0? Web 2.0 变现与安全性 什么是 Web 3.0? 原生支付 创立公司的新方式 Web3 中的身份 如果你读到这篇文章,那么你已经是当代互联网世界的一员了。我们现在使用的网络和10年前大不相同。所以,互联网是怎么演化的,…

Centos7 安装 Mysql 8.0.32,详细完整教程(好文章!!)

mysql5.7的安装方式参考之前的文章&#xff1a; centos7 安装 Mysql 5.7.27&#xff0c;详细完整教程&#xff08;好文章&#xff01;&#xff01;&#xff09;_HD243608836的博客-CSDN博客 一、检查mysql版本冲突 先检查是否已经存在mysql&#xff0c;若存在卸载&#xff0…

大数据第一轮复习笔记(2)

Spark ./spark-submit --class com.kgc.myspark01.WordCount --master yarn --deploy-mode cluster /opt/myspark01-1.0-SNAPSHOT.jar 1.Client向YARN的ResourceManager申请启动Application Master。Client中创建SparkContext同时初始化中将创建DAGScheduler和TASKScheduler…