Ubantu docker学习笔记(二)拉取构建,属于你的容器

news2024/9/23 5:27:42

文章目录

  • 一、拉取启动容器
  • 二、本地镜像初解
  • 三、构建镜像
    • 3.1使用docker commit构建镜像
      • 切换阿里镜像
    • 3.2使用dockerfile构建镜像
  • 四、总个结吧


这里的话,就详细说说小唐对于容器的配置,对了!小唐参考的书籍是Linux容器云实战!!!通过之前的案列,我们已经对了,docker有了一个初步的了解,目前我的暂时的理解就是一台微型的虚拟机!!!一起来做今天的实验吧

一、拉取启动容器

我们这里已centos作为实验案例,没有加速的朋友可以移步Ubantu docker学习笔记(一)docker安装查看

docker pull centos

下载完成之后,我们就可以通过

docker images

来查看我们的镜像
在这里插入图片描述
同时通过命令来创建容器来进入我们的镜像

docker run -it centos

-i:以交互模式运行容器,通常与 -t 同时使用; it同时使用
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;

这里我们进入的就是我们centos啦!
源于这个我们可以看看centos的内核

uname -r

退出

exit

在这里插入图片描述

具体的话我们可以通过镜像id来进行具体查看(注意和上面的容器id进行区分)

在这里插入图片描述
这里就很清楚的看到,我们的centos(5d0da3dc9764)是由三层(有几行就是几层)只读层构成的,最后得到一个5d0da3dc9764的id,然后我们用户在读写的时候,会创建一个可读可写层,然后我们所有的操作都是在这个上面进行的

下面我们自己拉扯一个Ubuntu作为练习吧

docker  pull Ubuntu:15.04

二、本地镜像初解

我们首先来看看我们的本地镜像,进行一个更为详细的解释和理解

docker images

在这里插入图片描述
有人会发问了,那个IMAGE作为唯一id为什么,只有12位,啊哈哈哈,那是因为他只显示12位,我们可以通过

docker images --no-trunc

进行详细的展开
在这里插入图片描述

三、构建镜像

为什么有了镜像,那我们为什么还要自己构建呢?
害,其实你可以简单的理解为,虽然是一个新的镜像,但是他无法满足我们开发所需的要求
就好像,我们刚刚拿到的云服务器,里面的sql、nigx需要来安装
我们也需要对于这个镜像diy
这里我们说一下两种方式,一个是我们直接使用命令的方式,另外一种我们就直接使用dockerfile的方式(其实我觉得有点更加像sh脚本啊哈哈哈哈)

3.1使用docker commit构建镜像

我们进入到我们的centos

dockee run -it centos /bin/bash

我们给我们centos安装一个vim,并设置为开机启动,自动构成vim,以免我们重新创建镜像后还需要对vim进行安装

yum -y install vim
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: Interrupted by signal

这里由于我们我们使用的版本在去年已经停止服务了,所以在这里我们需要进行换镜像

切换阿里镜像

1.进入yum的repos目录

cd /etc/yum.repos.d/

2、修改所有的CentOS文件内容

  sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
  sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

3、更新yum源为阿里镜像

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
yum clean all
yum makecache

然后再去执行我们vim的下载命令
就完成啦
在这里插入图片描述

这时候值得注意的是,我们记录下我们现在容器的一个id
在这里插入图片描述
通过我们这个容器的id去创建属于他的镜像(我其实喜欢把他叫做快照啊哈哈哈哈)

docker commit 1881e7dde299(你自己ide容器id) centos/vim(名字自己可以取)

这样,我们就得到了这个容器的快照,其实也就是我们已经配置好vim和镜像源的镜像啦
在这里插入图片描述
我们一起来验证一下

docker run -it centos/vim(你的名字) /bin/bash
which vim

在这里插入图片描述

3.2使用dockerfile构建镜像

说是说dockerfile,其实我感觉更像是sh脚本文件啊哈哈哈哈,接下来我们来看看他有那些好玩的吧
我们首先来了解一下他有哪些配置参数

  • FROM(使用哪一个镜像源)
  • MAINTAINER(作者信息)
  • RUN(容器里运行的命令)
  • EXOPOSE(运行容器时使用的端口)
  • CMD(容器启动的命令)
  • ENTRYPONINT(cmd运行时候的命令传递给ENTRYPONINT)
  • COPY(将文件复制到当前容器中)
  • ADD(把文件复制到当前容器)
  • VOLUME(为容器添加器卷)
  • WORKDIR(设置工作目录)
  • ENV(环境变量)
  • USER(以什么身份运行,默认root)

创建我们的dockerfile

touch Dockerfile

查看

ls

在这里插入图片描述
编写我们Dockerfile文件

#选择使用的image,因为我们这个已经配置好镜像了,就直接用这个centos/vim
FROM centos/vim
#执行的命令
RUN yum -y install vim
RUN yum -y install chrony

在这里插入图片描述
构建镜像

docker build -t centos/dockerfile .

-t后面跟你的名字 后面还有一个。别忘记了,表示当前目录下
在这里插入图片描述
我们通过images可以很直观的看到
在这里插入图片描述
其实会注意细节的同学就会看到,三个centos size(内存)变化,他们相当于三个不同状态下centos的快照
在这里插入图片描述
我们也可以通过查看history更为直观的看到
centos的
在这里插入图片描述
centos/vim 的

在这里插入图片描述
centos/dockerfile的

在这里插入图片描述
有没有同学想过,如果我们执行的run的顺序相反会发生什么有意思的事情
在这里插入图片描述

docker build -t centos/dockerfile2 .

在这里插入图片描述
在这里,我们可以很明显的看到,之前我们使用
yum -y install vim是直接下来的
但是我们这一次确实又下载了一次
我们去看看centos/dockerfile2的结构
在这里插入图片描述
得到结论,如果命令执行顺序不对,我们的层级会从新创建缓存

注:默认会使用缓存,但是可以添在 docker build中添加–no-cache,来不使用缓存

四、总个结吧

对于我们的images其实我理解就是快照,我们可以通过我们的快照去快速的创建我所需要的环境,也就是我们的容器
然后去创建我们快照的方法一共有两种
1.通过命令去保存之前运行的容器id,将此时运行的容器id作为新的image(容器)
2.通过dockerfile的方式去创建,这里更加便捷,避过要注意我们指令顺序,会对我们是不是用缓存造成影响

以前自己搭建云服务器的方式是真的笨。。。
有兴趣的可以看看之前小唐的笨蛋操作
以前搭建半小时,现在用docker真的10分钟都不要

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

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

相关文章

做更好的自己!NAS部署wiki.js现代化知识管理工具,让知识上云!

知识管理是一个永恒的课题,各种方法、工具层出不穷。老Q这么多年也体验过了非常多的工具,这几年来,老Q使用的工具逐步从付费迁移到开源,从公有云迁移到私有云。前者是为了折(SHENG)腾 (QIAN&…

红黑树的介绍和实现

文章目录1. 红黑树1.1 红黑树的概念1.2 红黑树的性质1.3 红黑树节点的定义1.4 红黑树的插入1.5 红黑树的验证1.6 红黑树与AVL树的比较1. 红黑树 1.1 红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以…

linux 内存泄露检测工具-Valgrind的使用

Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。安装,我是先valgrind一下发现这个的版本apt install valgrind # version 1:3.15.0-1ubuntu9.1新建一个项目与添加一个main.c编辑main.c的代码:#include <stdio.h> /*标准输入输出定义*/ #incl…

springcloud3 GateWay

一 GateWay 1.1 GateWay的作用 gateway相当于所有服务的门户&#xff0c;将客户端请求与服务端应用相分离&#xff0c;客户端请求通过gateway后由定义的路由和断言进行转发&#xff0c;路由代表需要转发请求的地址&#xff0c;断言相当于请求这些地址时所满足的条件&#xff…

Mybatis中的一级缓存和二级缓存

Mybatis作为一款强大的ORM框架&#xff0c;其中也用到了缓存来加速查询&#xff0c;今天我们一起来探讨下。 Mybatis可以使用懒加载来提高查询的效率&#xff0c;并且可以通过缓存来提高查询的效率。其中包括有一级缓存和二级缓存。 一级缓存是sqlSession级别的缓存&#xff0c…

怎么给电脑分盘与合并磁盘?教你三招

电脑只有一个C盘&#xff0c;想要再分出一个或多个分区&#xff0c;怎么办&#xff1f;电脑C盘的容量太小&#xff0c;太容易满了&#xff0c;想重新分盘&#xff0c;或者把其他盘跟它合并&#xff0c;但因为文件太多备份实在是太麻烦&#xff0c;怎么办&#xff1f;怎么给电脑…

tomcat 启动时卡住问题排查

正常项目无法访问&#xff08;Linux 服务器&#xff09;&#xff0c;启动tomcat时卡在下图位置&#xff0c;项目无法启动。 1、先检查tomcat日志、项目日志没有报错信息&#xff0c;且没再产生新的日志信息。 2、jdk、tomcat 、 jvm 配置&#xff0c;服务器环境、内存、存储没…

论文阅读:Adversarial Cross-Modal Retrieval对抗式跨模式检索

Adversarial Cross-Modal Retrieval 对抗式跨模式检索 跨模态检索研究的核心是学习一个共同的子空间&#xff0c;不同模态的数据可以直接相互比较。本文提出了一种新的对抗性跨模态检索&#xff08;ACMR&#xff09;方法&#xff0c;它在对抗性学习的基础上寻求有效的共同子空间…

JVM学习笔记九:对象实例化与直接内存

0. 前言 声明&#xff1a; 感谢尚硅谷宋红康老师的讲授。 感谢广大网友共享的笔记内容。 B站&#xff1a;https://www.bilibili.com/video/BV1PJ411n7xZ 本文的内容基本来源于宋老师的课件&#xff0c;其中有一些其他同学共享的内容&#xff0c;也有一些自己的理解内容。 1. …

一文解码:如何在人工智能热潮下实现产业“智”变

近期由ChatGPT有关人工智能的话题引发了全民热议&#xff0c;在这股子浪潮下&#xff0c;讨论最多的话题就是ChatGPT的出现会为我们带来怎样的技术变革&#xff1f;是否会改变我们目前的生产方式&#xff1f;对于未来人工智能技术的发展&#xff0c;我们该如何客观看待&#xf…

Unity Lighting -- 使用Light Probes

什么是动态物体&#xff08;dynamic objects&#xff09; 到目前为止的例子中&#xff0c;我们场景中的所有东西都是静止的。但在实际的游戏或实时应用中&#xff0c;场景中有移动的物体很正常&#xff0c;比如走动的人或动物&#xff0c;汽车&#xff0c;飞机等&#xff0c;它…

MRCP在美团语音交互中的实践和应用

当你和智能语音机器人对话交互时&#xff0c;你是否好奇电话背后的机器人如何“听懂”你的意思&#xff0c;又如何像人一样“回答”你的问题&#xff1f;其中比较重要的技术就是 MRCP。本文主要介绍了 MRCP 在美团语音交互中的实践和应用&#xff0c;基于美团自研的语音识别及语…

动态规划入门经典问题讲解

最近开始接触动态规划问题&#xff0c;以下浅谈&#xff08;或回顾&#xff09;一下这些问题的求解过程。解题思路对于动态规划问题&#xff0c;由于最终问题的求解需要以同类子问题作为基础&#xff0c;故需要定义一个dp数组&#xff08;一维或二维&#xff09;来记录问题求解…

Vue 3.0 单文件组件 【Vue3 从零开始】

#介绍 在很多 Vue 项目中&#xff0c;我们使用 app.component 来定义全局组件&#xff0c;紧接着用 app.mount(#app) 在每个页面内指定一个容器元素。 这种方式在很多中小规模的项目中运作的很好&#xff0c;在这些项目里 JavaScript 只被用来加强特定的视图。但当在更复杂的…

[Java·算法·中等]LeetCode39. 组合总和

每天一题&#xff0c;防止痴呆题目示例分析思路1题解1分析思路2题解2&#x1f449;️ 力扣原文 题目 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形…

Golang Map实现原理分析与解读

一、map的结构与设计原理 golang中map是一个kv对集合。底层使用hash table&#xff0c;用链表来解决冲突 &#xff0c;出现冲突时&#xff0c;不是每一个key都申请一个结构通过链表串起来&#xff0c;而是以bmap为最小粒度挂载&#xff0c;一个bmap可以放8个kv。在哈希函数的选…

配置临时SSL子域名泛化证书

配置临时SSL子域名泛化证书 三个月有效期第一步&#xff1a;访问SSL证书地址第二步&#xff1a;在华为云上/其他服务器上搜索DNS云解析服务类似的功能第三步&#xff1a;将SSL申请的信息添加到服务器的记录集中第四步&#xff1a;添加完信息进行保存获取key / crt第五步&#x…

蓝桥冲刺31天之第七天

目录 A&#xff1a;三角回文数 B&#xff1a;数数 C&#xff1a;数组切分 D&#xff1a;倍数问题 一星陨落&#xff0c;黯淡不了星空灿烂&#xff1b; 一花凋零&#xff0c;荒芜不了整个春天。 如果命运是世界上最烂的编剧&#xff0c; 你就要争取做人生最好的演员。 即使生…

06_02_Spark Streaming

Spark Streaming 课程目标 说出Spark Streaming的特点说出DStreaming的常见操作api能够应用Spark Streaming实现实时数据处理能够应用Spark Streaming的状态操作解决实际问题独立实现foreachRDD向mysql数据库的数据写入独立实现Spark Streaming对接kafka实现实时数据处理 1、…

打怪升级之CFileDialog类介绍

CFileDialog类 CFileDialog封装用于文件打开操作或文件保存操作的常见对话框。信息来源自Windows官方文档&#xff1a;https://learn.microsoft.com/zh-cn/cpp/mfc/reference/cfiledialog-class?viewmsvc-170 这里重点介绍几个常用的函数功能&#xff1a; 构造函数 explic…