当前位置: 首页 > news >正文

Docker镜像、容器、仓库及数据管理

使用Docker镜像

获取镜像

使用docker pull命令,使用docker search命令可以搜索远端仓库中共享的镜像。

运行容器

使用docker run [OPTIONS] IMAGE [COMMAND] [ARG...]命令,如:docker run --name ubuntu_test --rm -it ubuntu:test /bin/bash,其中选项如下:

  • --name 指定容器名。
  • --rm 表示容器退出后将其删除。
  • -t选项让Docker分配一个伪终端并绑定到容器的标准输入上。
  • -i则让容器的标准输入保持打开。

查看镜像信息

使用docker images命令,列出已经下载下来的镜像。

docker image --filter命令可列出指定的参数

如:列出镜像的仓库名,idtag,中间用“ === ”分割

docker images --format "{{.Repository}} === {{.ID}} === {{.Tag}}"   

删除镜像

docker rmi [镜像标签或ID],注意docker rm是删除容器的命令,不要混淆。

创建镜像

方法有三种,使用docker commit命令基于已有镜像的容器创建、基于本地模板导入。基于Dockerfile创建。

docker commit

将容器的存储层保存下来成为镜像。docker commit命令会让镜像变的臃肿,实际环境中并不会这样使用。

命令语法:

docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]

选项包括:

  • -a,--author=""作者信息
  • -m,--message=""提交消息
  • -p,--pause=true提交时暂停容器

基于本地模板导入

先下载操作系统模板压缩包文件,然后使用docker import命令导入:

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

基于Dockerfile定制镜像

Dockerfile是一个文本文件,其中包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容就是描述该层应当如何构建。步骤如下:

1. 在一个空白目录,建立文件Dockerfile,内容如下:

FROM golang
RUN mkdir -p /go/src/study      \&& go env -w GO111MODULE=off
COPY study /go/src/study
WORKDIR /go/src/study/photoweb/
RUN go build /go/src/study/photoweb/photoweb.go

FROM指令指定基础镜像,如果以scratch为基础镜像的话,意味着不以任何镜像为基础。

RUN指令用来执行命令行命令。

COPY指令复制本地文件到镜像中,需要注意的事本地文件必须是镜像构建上下文中的文件(docker build 命令最后一个参数指定),一般将要复制的文件拷到Dockerfile所在的目录中。WORKDIR指令指定工作目录,防止可执行文件找不到相关资源。

2. Dockerfile文件编写完成后执行命令docker build -t golang:test .创建镜像

Dockerfile多阶段构建

Dockerfile多阶段构建是一种优化 Docker 镜像构建的方法,它可以减少 Docker 镜像的大小和运行时的资源消耗。下面的示例中,第一阶段将可拷贝源码并执行文件app编译出来,在第二阶段只将可执行文件app拷贝到镜像中。节省了运行时不必要的空间(go源码或者编译期间所依赖的其他包)

# 第一阶段下载相关依赖编译出可执行文件app
FROM golang:1.9-alpine
RUN apk --no-cache add git
WORKDIR /go/src/github.com/go/helloworld/
RUN go get -d -v github.com/go-sql-driver/mysql
COPY app.go .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .# 第二阶段只将可执行文件app复制到镜像中,运行的容器中并不需要下载git和mysql驱动包
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=0 /go/src/github.com/go/helloworld/app .
CMD ["./app"]

保存和载入

Docker 还提供了docker load和docker save命令,用以将镜像保存为一个tar文件,然后传输到另一个位置上,再加载进来。 这是在没有 Docker Registry 时的做法, 现在已经不推荐, 镜像迁移应该直接使用 Docker Registry, 无论是直接使用 Docker Hub 还是使用内网私有 Registry 都可以。

保存镜像:docker save  ubuntu:test | gzip > ubuntu-test.tar.gz,使用docker save保存的镜像只能使用docker load载入

载入镜像:docker load -i ubuntu-test.tar.gz

镜像的实现原理

每个镜像都由很多层次构成,Docker使用Union FS将这些不同的层结合到一个镜像中。

操作容器

启动容器

使用docker run命令,当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统, 并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个ip地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止

守护态运行:执行docker run命令时添加-d参数。

终止容器

使用docker stop命令终止容器,处于终止状态的容器可通过docker start命令来重新启动。

进入容器

使用docker attach或docker exec命令,两者的区别是执行attach后,中stdin中exit会导致容器停止,执行exec后,从stdin中exit不会导致容器的停止,所以推荐使用docker exec命令进入容器。

导出导入

使用docker export命令导出本地某个容器快照到本地文件,使用docker import命令从容器快照文件中再导入为镜像,例如:

$ docker ps -aCONTAINER ID    IMAGE            COMMAND        CREATED        STATUS        PORTS        NAMES
7691a814370e    ubuntu:14.04     "/bin/bash"    36 hours ago   Exited(0) 21 hours ago  test$ docker export 7691a814370e > ubuntu.tar$ cat ubuntu.tar | docker import - test/ubuntu:v1.0$ docker images
REPOSITORY    TAG    IMAGE ID      CREATED               VIRTUAL SIZE
test/ubuntu   v1.0   9d37a6082e97  About a minute ago    171.3MB

删除容器

使用docker rm命令,如果要删除一个运行中的容器,可以添加 -f 参数。Docker会发送SIGKILL信号给容器。清理掉所有处于终止状态的容器使用命令docker container prune

访问仓库

Docker Hub

 在网站 https://cloud.docker.com注册账号。

登陆登出:docker login和docker logout命令

拉取镜像:使用docker search从仓库中查找镜像,使用docker pull命令拉取镜像。

推送镜像:docker push username/ubuntu:17.10命令,username为账号用户名。

私有仓库

使用官方提供的工具docker-registry构建私有的镜像仓库。

容器运行:docker run -d -p 5000:5000 --restart=always --name registry registry,默认情况下,仓库会被创建在容器的/var/lib/registry 目录下。可以通过 -v 参数来将镜像文件存放在本地的指定路径。

在私有仓库上传、搜索和下载镜像:

  • 先使用docker tag来标记一个镜像。例如私有仓库地址为127.0.0.1:5000,标记命令为docker tag ubuntu:latest 127.0.0.1:5000/ubuntu:latest
  • 然后使用docker push上传标记的镜像。命令为docker push 127.0.0.1:5000/ubuntu:latest
  • 使用curl查看仓库中的镜像。命令为curl 127.0.0.1:5000/v2/_catalog
  • 从仓库中下载镜像,命令为docker pull 127.0.0.1:5000/ubuntu:latest
  • Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 配置来取消这个限制,或者配置能够通过 HTTPS 访问的私有仓库。在文件/etc/docker/daemon.json中添加如下内容:
{"registry-mirror": ["https://registry.docker-cn.com"],"insecure-registries": ["192.168.199.100:5000"]
}

数据管理

在Docker内部以及容器之间管理数据的方式主要有数据卷(Volumes)和挂载主机目录(Bind mounts)两种。

数据卷可供一个或多个容器使用的特殊目录,它绕过UFS,具有下面的特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像
  • 数据卷 默认会一直存在,即使容器被删除

创建数据卷

docker volume create my-vol

查看数据卷:docker volume ls;查看指定的数据卷的信息如下:

$ docker volume inspect my-vol
[{"Driver": "local","Labels": {},"Mountpoint": "/var/lib/docker/volumes/my-vol/_data","Name": "my-vol","Options": {},"Scope": "local"}
]

启动容器时挂载数据卷:执行docker run时使用--mount参数指定要挂载的数据卷。例如:

$ docker run -d -P \--name web \# -v my-vol:/wepapp \--mount source=my-vol,target=/webapp \training/webapp \python app.py

在主机里使用命令docker inspect web查看容器的信息,其中数据卷信息在"Mounts" Key 下面

删除数据卷:docker volume rm my-vol,清理数据卷命令docker volume prune

除了挂载创建的数据卷,还可以使用--mount标记指定直接挂载一个本地主机的目录到容器中去。Docker 挂载主机目录的默认权限是读写,用户也可以通过增加readonly指定为只读 。

相关文章:

Docker镜像、容器、仓库及数据管理

使用Docker镜像 获取镜像 使用docker pull命令&#xff0c;使用docker search命令可以搜索远端仓库中共享的镜像。 运行容器 使用docker run [OPTIONS] IMAGE [COMMAND] [ARG...]命令&#xff0c;如&#xff1a;docker run --name ubuntu_test --rm -it ubuntu:test /bin/b…...

Java的选择排序、冒泡排序、插入排序

不爱生姜不吃醋 如果本文有什么错误的话欢迎在评论区中指正 与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 &#x1f334;前言&#x1f334;一、选择排序1.原理2.时间复杂度3.代码实现 &#x1f334;二、冒泡排序1. 原理2. 时间复杂度3.代码实现 &#x1f334;三…...

Vagrant + VirtualBox + CentOS7 + WindTerm 5分钟搭建本地linux开发环境

1、准备阶段 将环境搭建所需要的工具和文件下载好&#xff08;页面找不到可参考Tips部分&#xff09; Vagrant 版本&#xff1a;vagrant_2.2.18_x86_64.msi 链接&#xff1a;https://developer.hashicorp.com/vagrant/downloads VirtualBox 版本&#xff1a;VirtualBox-6.1.46…...

关于Ajax

1.Ajax 异步 JavaScript 和 XML&#xff0c; 或 Ajax 本身不是一种技术&#xff0c;而是一种将一些现有技术结合起来使用的方法&#xff0c;包括&#xff1a;HTML 或 XHTML、CSS、JavaScript、DOM、XML、XSLT、以及最重要的 XMLHttpRequest 对象。当使用结合了这些技术的 Aja…...

打开转盘锁 -- BFS

打开转盘锁 这里提供两种实现&#xff0c;单向BFS和双向BFS。 class OpenLock:"""752. 打开转盘锁https://leetcode.cn/problems/open-the-lock/"""def solution(self, deadends: List[str], target: str) -> int:"""单向BFS:…...

国标EHOME视频平台EasyCVR视频融合平台助力地下停车场安全

EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、云存储、智能分析等&#xff0c;视频智能分析平台EasyCVR融合性强、开放度高、部署轻快&#xff0c;在智慧工地、智慧园区…...

【业务功能篇96】微服务-springcloud-springboot-认证服务-登录注册功能-Auth2.0-分布式session

5.登录功能 通过最基础的登录操作来完成登录处理 登录页面处理 认证服务的处理 /*** 注册的方法* return*/PostMapping("/login")public String login(LoginVo loginVo , RedirectAttributes redirectAttributes){R r memberFeginService.login(loginVo);if(r.getC…...

自造简易版音频进度条

最近在做音乐播放器页面, 积累了很多有趣的经验, 今天先分享播放进度条的开发过程. 效果 话不多说&#xff0c;先看效果 支持点击修改进度&#xff0c;拖拽修改进度&#xff0c;当然大家肯定都知道ui库里面有现成的&#xff0c;为何要自己造一个 首先著名的ui库中确实都要这…...

433MHz芯片在遥控应用市场中的优点

当涉及到简单的无线射频通信&#xff0c;433MHz芯片成为一种经济实惠且广泛应用的选择。以下是关于433MHz芯片的重点信息&#xff1a; 工作原理&#xff1a;433MHz芯片的工作原理是将数字信号转化为射频信号&#xff0c;并通过无线信道进行传输。在接收端&#xff0c;射频信号再…...

基于Bert+Attention+LSTM智能校园知识图谱问答推荐系统——NLP自然语言处理算法应用(含Python全部工程源码及训练模型)+数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境服务器环境 模块实现1. 构造数据集2. 识别网络3. 命名实体纠错4. 检索问题类别5. 查询结果 系统测试1. 命名实体识别网络测试2. 知识图谱问答系统整体测试 工程源代码下载其它资料下载 前言 这个项目充分利用了…...

慕尼黑主题活动!亚马逊云科技生成式AI全新解决方案,引领未来移动出行领域

IAA作为世界五大车展之一&#xff0c;一直对全球汽车产业的发展起着关键作用&#xff01;2023年9月5日在慕尼黑开幕的IAA MOBILITY 2023以“体验联动智慧出行”为主题&#xff0c;紧跟移动出行领域的前沿变化&#xff0c;将汇集整车企业、开发者、供应商、科技公司、服务提供商…...

android 离线语言合成(文字转语音)

1、基于开源MaryTTS https://github.com/AndroidMaryTTS/AndroidMaryTTS 目前查到的资料&#xff0c;不支持中文&#xff0c;只针对西方语种。 2、基于TensorFlowTTS 官方个地址&#xff1a;为 Android 构建 TensorFlow Lite 库 (google.cn) 所依赖包下载地址:Maven Centr…...

使用Fastchat部署vicuna大模型

FastChat是一个用于训练、提供服务和评估基于大型语言模型的聊天机器人的开放平台。其核心特点包括&#xff1a; 最先进模型&#xff08;例如 Vicuna&#xff09;的权重、训练代码和评估代码。一个分布式的多模型提供服务系统&#xff0c;配备 Web 用户界面和与 OpenAI 兼容的…...

【2023高教社杯】C题 蔬菜类商品的自动定价与补货决策 问题分析、数学模型及python代码实现

【2023高教社杯】C题 蔬菜类商品的自动定价与补货决策 1 题目 C题蔬菜类商品的自动定价与补货决策 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c; 大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&…...

华为云云耀云服务器L实例评测|华为云云耀云服务器L实例评测使用

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…...

【DS思想+堆贪心】CF595div3 D2

Problem - D2 - Codeforces 题意&#xff1a; 思路&#xff1a; 大家都说这是典&#xff0c;但是我不懂怎么个典法&#xff0c;可能堆贪心都是这样做的吗&#xff0c;不懂 首先肯定要贪心&#xff0c;对于一个坏点&#xff0c;优先删除覆盖别的点多的 考虑nlogn做法&#x…...

2023-09-08 LeetCode每日一题(计算列车到站时间)

2023-09-08每日一题 一、题目编号 2651. 计算列车到站时间二、题目链接 点击跳转到题目位置 三、题目描述 给你一个正整数 arrivalTime 表示列车正点到站的时间&#xff08;单位&#xff1a;小时&#xff09;&#xff0c;另给你一个正整数 delayedTime 表示列车延误的小时…...

软考-高级-信息系统项目管理第四版(完整24章全笔记)

《信息系统项目管理师教程》&#xff08;第4版&#xff09;是由全国计算机专业技术资格考试办公室组织编写的考试用书&#xff0c;根据2022年审定通过的《信息系统项目管理师考试大纲》编写&#xff0c;对信息系统项目管理师岗位所要求的主要知识及应用技术进行了阐述。 《信息…...

华为Mate 60和iPhone 15选哪个?

最近也有很多朋友问我这个问题来着&#xff0c;首先两款手机定位都是高端机&#xff0c;性能和体验各有千秋&#xff0c;各自有自己的铁杆粉。 但是让人意想不到的是华为mate60近日在海外越来越受欢迎和追捧&#xff0c;甚至是引起了不少人的抢购&#xff0c;外观设计和…...

嵌入式Linux驱动开发(同步与互斥专题)(二)

一、自旋锁spinlock的实现 自旋锁&#xff0c;顾名思义&#xff1a;自己在原地打转&#xff0c;等待资源可用&#xff0c;一旦可用就上锁霸占它。 ① 原地打转的是CPU x&#xff0c;以后CPU y会解锁&#xff1a;这涉及多个CPU&#xff0c;适用于SMP系统&#xff1b; ② 对于单…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…...

Tauri2学习笔记

教程地址&#xff1a;https://www.bilibili.com/video/BV1Ca411N7mF?spm_id_from333.788.player.switch&vd_source707ec8983cc32e6e065d5496a7f79ee6 官方指引&#xff1a;https://tauri.app/zh-cn/start/ 目前Tauri2的教程视频不多&#xff0c;我按照Tauri1的教程来学习&…...

python可视化:俄乌战争时间线关键节点与深层原因

俄乌战争时间线可视化分析&#xff1a;关键节点与深层原因 俄乌战争是21世纪欧洲最具影响力的地缘政治冲突之一&#xff0c;自2022年2月爆发以来已持续超过3年。 本文将通过Python可视化工具&#xff0c;系统分析这场战争的时间线、关键节点及其背后的深层原因&#xff0c;全面…...