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

简介: Ubantu docker学习笔记(二)拉取构建,属于你的镜像

这里的话,就详细说说小唐对于容器的配置,对了!小唐参考的书籍是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

docker 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源为阿里镜像

yum -y install wget
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的下载命令

yum -y install 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分钟都不要

相关文章
|
11天前
|
运维 Kubernetes Docker
利用Docker和Kubernetes构建微服务架构
利用Docker和Kubernetes构建微服务架构
|
15天前
|
缓存 Linux 网络安全
docker的镜像无法下载如何解决?
【10月更文挑战第31天】docker的镜像无法下载如何解决?
496 28
|
28天前
|
缓存 监控 持续交付
|
11天前
|
存储 关系型数据库 Linux
【赵渝强老师】什么是Docker的镜像
Docker镜像是一个只读模板,包含应用程序及其运行所需的依赖环境。镜像采用分层文件系统,每次修改都会以读写层形式添加到原只读模板上。内核bootfs用于加载Linux内核,根镜像相当于操作系统,上方为应用层。镜像在物理存储上是一系列文件的集合,默认存储路径为“/var/lib/docker”。
|
17天前
|
存储 监控 Linux
docker构建镜像详解!!!
本文回顾了Docker的基本命令和管理技巧,包括容器和镜像的增删改查操作,容器的生命周期管理,以及如何通过端口映射和数据卷实现容器与宿主机之间的网络通信和数据持久化。文章还详细介绍了如何使用Docker部署一个简单的Web应用,并通过数据卷映射实现配置文件和日志的管理。最后,文章总结了如何制作自定义镜像,包括Nginx、Python3和CentOS镜像,以及如何制作私有云盘镜像。
86 2
|
18天前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
33 1
|
25天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
本文介绍了Docker和Kubernetes在构建高效微服务架构中的应用,涵盖基本概念、在微服务架构中的作用及其实现方法。通过具体实例,如用户服务、商品服务和订单服务,展示了如何利用Docker和Kubernetes实现服务的打包、部署、扩展及管理,确保微服务架构的稳定性和可靠性。
76 7
|
24天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【10月更文挑战第22天】随着云计算和容器技术的快速发展,微服务架构逐渐成为现代企业级应用的首选架构。微服务架构将一个大型应用程序拆分为多个小型、独立的服务,每个服务负责完成一个特定的功能。这种架构具有灵活性、可扩展性和易于维护的特点。在构建微服务架构时,Docker和Kubernetes是两个不可或缺的工具,它们可以完美搭档,为微服务架构提供高效的支持。本文将从三个方面探讨Docker和Kubernetes在构建高效微服务架构中的应用:一是Docker和Kubernetes的基本概念;二是它们在微服务架构中的作用;三是通过实例讲解如何使用Docker和Kubernetes构建微服务架构。
58 6
|
20天前
|
存储 Java 开发者
成功优化!Java 基础 Docker 镜像从 674MB 缩减到 58MB 的经验分享
本文分享了如何通过 jlink 和 jdeps 工具将 Java 基础 Docker 镜像从 674MB 优化至 58MB 的经验。首先介绍了选择合适的基础镜像的重要性,然后详细讲解了使用 jlink 构建自定义 JRE 镜像的方法,并通过 jdeps 自动化模块依赖分析,最终实现了镜像的大幅缩减。此外,文章还提供了实用的 .dockerignore 文件技巧和选择安全、兼容的基础镜像的建议,帮助开发者提升镜像优化的效果。
|
23天前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
25 4