Docker,一个傲娇的男人

引言

因此,我们用拟人体来写Docker入门教程!

正文

Ladies and gentleman,My name is docker。


额,尴尬! 好吧,容我默默开始介绍自己! 我的名字叫Docker,我在2013年的时候,就来到了这个世上! 然而那会并没有多少人知道我,对此我哭的很伤心。 甚至无数个夜里,我都从梦中惊醒,思考着:当初来到这个世上究竟是对还是错!

转眼间来到了2017年,容器技术成为了一种主流,而我成为了容器技术的头牌花魁!俗话说的好,人中吕布,马中赤兔。啊,不对,串场了,不好意思,其实我想表达的意思就是,现在操作系统中首选的是Linux,而容器技术首选的就是Docker啦…..

额!假装没看到。继续我们的话题,至于我的优点,比如可以提供一致的运行环境啦,可以更轻松的迁移啦…(以下省略10000字)…

ps:关于这块内容,可以看烟哥的另一篇《微服务为什么一定要用docker》,我就不重复啰嗦了。

嗯,接下来,我来介绍一下,我是怎么进行安装的!首先,你要检查一下操作系统的版本….balabala

ps:这块就略过吧,毕竟怎么安装,应该不用赘述!

接下来,我就要说说自己的五个小弟!

  • 镜像

  • 容器

  • 仓库

  • 客户端

  • 服务端

说到这里,我不得不祭出一张图,大家稍等!看图!


啊,不对,拿错图了。是下面这张

仓库

所谓这个仓库嘛!就上面最右边的哪个部分Registry。唉,就是放一堆镜像的地方啦。我们可以推镜像到仓库中,同一个镜像也可以有多个版本,这里称为tag,也就是标签!

ps:大家都知道啊,外国的镜像仓库下载慢啊!所以,大家都会去下面这个文件中

/etc/docker/daemon.json

修改一下镜像仓库的路径,最出名的就是下面几个啦

  • http://hub-mirror.c.163.com

  • https://mirror.ccs.tencentyun.com

  • 等等

这样就能提升下载镜像的速度啦!最后,记得执行

systemctl restart docker.service

这样配置就生效了!

客户端和服务端

客户端就是上图最左边到部分,其实就是一个执行docker命令的地方啦!

那服务端呢,实际上一个称为docker daemon的守护进程。它既负责监听客户端的请求,并且管理着Docker的镜像、容器、网络、磁盘等资源!

镜像和容器

终于到了重头戏,也就是镜像和容器

所谓镜像,是一种轻量级的、可执行的独立软件包,用来打包软件运行环境..(省略100字)..

所谓容器,是用镜像创建的运行实例..(省略50字)..


因为那种说法太复杂了,读者们不会有耐心一个字一个字看的~~


其实关于镜像和容器,网上有一个很经典的比喻!
class Person{
    ...
}
Person p = new Person();

其实在上面那段代码中,Person就可以被理解为镜象,对象p就可以称为之容器。就好像类是可以继承一样,镜像也是可以继承的!

额!!!其实有一个类似的,但是不完全一样。在我这里又一个base镜像的概念,一般要满足下面两个条件

  • 不依赖其他镜像,从 scratch 构建

  • 其他镜像可以之为基础进行扩展


可能这两个条件理解起来可能很抽象。其实很简单的,能称作 base 镜像的通常都是各种 Linux 发行版的 Docker 镜像,比如 Ubuntu, Debian, CentOS 等。可以这么理解,99%的镜像都是通过在 base镜像中安装和配置需要的软件构建出来的

介绍完几个基本概念后,讲几个常见命令就好,为防误伤,大家注意!

其实懂几个镜像和容器有关的命令,就差不多ok!

镜像命令

比如你总要知道,怎么拉镜像吧?

docker pull httpd

这样就能拉取httpd这个镜像了!
那拉到操作系统上的哪个位置呢?
ok,是拉到/var/lib/docker这个目录下,可以通过修改docker.service增加配置,来修改镜像的存储位置!

好问题!用下面的命令来看
docker images  

可是,大家会不会有一个疑问?我如何查看远程仓库里有哪些镜像么?

 docker search httpd

这个命令就能看远程仓库里有哪些 httpd的镜像啦!

最后一个就是删除本地镜像的命令。
如下所示:

docker rmi -f httpd

镜像命令会这四句就够用了!

到了容器命令了,记得


容器命令

比如,你总要知道当前有哪些正在运行的容器吧,那就是下面这个命令

docker ps

那怎么运行容器呢,如下所示

docker run hello-world /bin/bash

这代表的就是运行一个hellp-world的镜像,生成一个正在运行的容器实例。


这个容易, /bin/bash 的作用是因为docker后台必须运行一个进程,否则容器就会退出,在这里表示启动容器后启动bash。
最后一个命令,杀掉一个运行中的容器!
docker kill [containID]

数据卷

OK,这里不得不提一个很重要的概念,也就是数据卷!
在docker中,容器一旦关闭,容器中的数据就会丢失。容器重启启动后,不会加载原来的数据!
因此,在实际应用中,我们会将容器内的数据需要持久化到宿主机上!
因此,这个命令,大家一定要了解!
docker run -v test:/soft hello-world /bin/bash

主要注意这个地方

-v test:/soft

对应就是-v /宿主机:/容器内目录,意思就是宿主机的/test目录挂载到容器的/soft目录!
这个命令,很重要,但凡搭建redis,mysql这样的容器,一定会用到数据卷挂载!

DockerFile

所谓DockerFile,它是一个文本文件,可以用这个文件来构建镜像!

所以呢,嗯,我们先来讲讲DockerFile的相关指令

额,那讲讲原理吧,具体指令大家以后去查询!
ps:其实大家工作中自己去写DockerFile几率太低!

不知道大家有没听过一个说法,Docker镜像是分层的,类似洋葱一样,一层一层的包装起来的!
为防止大家不认识洋葱,上图


这话怎么理解呢?那就要从 DockerFile 说起了!
如下所示
FROM ubuntu:15.04
COPY app.py /app
CMD python /app/app.py

先稍微解释一下

第一行表示父镜像是ubuntu:15.04
第二行表示复制一个python脚本到/app目录下
第三行表示执行该脚本

现在,你要编译该DockerFile,生成一个名字为my_test_image的镜像,命令如下

 docker build -t my_test_image .

结果如下

Sending build context to Docker daemon  364.2MB
Step 1/3 : FROM ubuntu:15.04
 ---> d1b55fd07600
Step 2/3 : COPY app.py /app/
 ---> 44ab3f1d4cd6
Step 3/3 : CMD python /app/app.py
 ---> Running in c037c981012e
Removing intermediate container c037c981012e
 ---> 174b1e992617
Successfully built 174b1e992617
Successfully tagged my_test_image:latest

第一步,先生成了一个标识符为d1b55fd07600的镜像。
第二步,在第一步的基础上,又包了一层(像洋葱一样),生成一个标识符为44ab3f1d4cd6的镜像
第三部,又在第二步的镜像基础上,又包了一层,生成了一个标识符为174b1e992617的镜像
以此类推,得到我们的镜像!

总结,docker在构建镜像的时候,会逐行执行我们的Dockerfile中的每一行,每执行一行的时候,docker就会创建出一个新的层来存放新的内容,最后得到我们的镜像!

总结

本文写到最后,深感痛心疾首!我居然写这么low的文章,默默忏悔。希望大家通过这篇文章能够入门docker!

最近忙着复习,预计tiao cao,所以更的慢一点,大家莫催~

--------  END  ---------

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。关注公众号并回复 888 领取,更多内容陆续奉上   

基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的Koopman算子的递归神经网络模型线性化”展开,旨在研究纳米定位系统的预测控制问题,并提供完整的Matlab代码实现。文章结合数据驱动方法与Koopman算子理论,利用递归神经网络(RNN)对非线性系统进行建模与线性化处理,从而提升纳米级定位系统的精度与动态响应性能。该方法通过提取系统隐含动态特征,构建近似线性模型,便于后续模型预测控制(MPC)的设计与优化,适用于高精度自动化控制场景。文中还展示了相关实验验证与仿真结果,证明了该方法的有效性和先进性。; 适合人群:具备一定控制理论基础和Matlab编程能力,从事精密控制、智能制造、自动化或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于纳米级精密定位系统(如原子力显微镜、半导体制造设备)中的高性能控制设计;②为非线性系统建模与线性化提供一种结合深度学习与现代控制理论的新思路;③帮助读者掌握Koopman算子、RNN建模与模型预测控制的综合应用。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现流程,重点关注数据预处理、RNN结构设计、Koopman观测矩阵构建及MPC控制器集成等关键环节,并可通过更换实际系统数据进行迁移验证,深化对方法泛化能力的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值