docker初学小结
来源:http://www.tudoupe.com时间:2022-02-12
文章目录
- 基础概念
- 理念
- 同虚拟机的区别
- 运用
- 输出helloworld镜像
- 配置加速器
- 帮助命令
- 镜像命令
- 查看本机镜像
- 搜索其他镜像
- 下载镜像
- 删除镜像
- 容器命令
- 新建并启动容器
- 查看日志
- 查看容器内运行的进程
- 查看容器内部细节
- 进入正在运行的容器并以命令行交互
- 从容器内拷贝文件到主机
- 列出当前容器
- 退出容器
- 启动容器
- 重启容器
- 停止容器
- 删除已停止容器
- docker镜像
- 镜像commit
- 容器数据卷
- 概念
- 作用
- 容器内添加
- 直接命令添加
- dockerflie添加
- 数据容器卷
- docker file
- 概念
- 三步骤
- dockerfile 构建过程解析
- dockerfile内容基础知识
- dockerfile执行大致流程
- dockerfile保留字指令
- dockerfile案例
- CMD和ENTRYPOINT的区别(实例)
- ONBULID命令案例
- 自定义centos9
- docker安装mysql
- 本地镜像发布到阿里云上
基础概念
百度:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
教程:docker:解决了运行环境和配置问题软件容器,方便做持续集成化并有助于整体发布的容器虚拟化技术
小白理解:将全部内容(运行文档,配置环境,运行环境等等)打包到一起,构成一个镜像文件,这样的话从一台计算机移到另一台计算机几乎不会出现问题
理念
docker实现"一次封装,到处运行",docker是基于Go语言实现的云开源项目
三要素:镜像,容器,仓库
对于镜像的理解:
对于容器的理解:
一个容器可以运行一种服务,当需要用到时,用docker创建一个运行实例,这就是容器,可以把容器看成一个简易版的linux环境
对于仓库的理解:
就是一堆镜像存放的地方,我们可以把镜像发布到仓库中,用的时候拉下来即可。
同虚拟机的区别
(1)虚拟机需要软件和硬件,而docker无需硬件,大大节省了空间
(2)虚拟机需要重新加载系统内核,docker与宿主机共用一个操作系统
运用
输出helloworld镜像
语句

配置加速器
由于docker是外国的,下载时比较慢,我们需要借助国内的镜像来下载其他插件,这样比较迅速省时,具体操作如下
进入docker目录下查看是否存在daemon.json文件
我的之前没有,是自己创建的文件,语句为
然后以vim编辑文件,语句为
进入后输入i进入编辑模式,输入以下内容
然后按esc,输入:wq!(含义是保存并强制退出)
此时再输入以下语句(重启服务)
配置完毕
帮助命令
<1>显示版本信息
<2>显示系统信息
<3>显示docker命令

镜像命令
查看本机镜像
REPOSITORY:镜像的仓库源
TAG:镜像的标签
IMAGES ID:镜像ID
CREATED: 镜像创建时间
SIZE:镜像大小
可选项
示例如下



搜索其他镜像
示例:
常用可选项
注:-s已弃用,移到–filter中使用
示例

下载镜像
示例:

删除镜像
可选项
示例:
删除多个时中间以空格分开即可,示例
删除全部的语句,示例
容器命令
前提:有镜像
有镜像才能创建容器,此为根本前提
新建并启动容器
常用项
示例1
此时相当于在docker中进入到了centos的终端中。
发现进入后的字符与镜像id不同,在root终端中查看当前容器,可以发现这个root后的字符是容器id
示例2:
查看当前容器,可以发现名字变为quan9i(不设置时系统自动随机生成)
示例3
此时查看当前容器,发现没有正在运行的容器,这是因为docker的机制是如果只有后台运行,没有前台进程,就会立即关闭
那么该如何让它保存开启呢,具体示例如下

查看日志
常用可选项
示例
ctrl+c即可退出
查看容器内运行的进程
示例
之所以能这样使用是因为容器相当于linux的精简版,可以执行linux的部分命令
查看容器内部细节
示例

进入正在运行的容器并以命令行交互
语句1
语句2
两个的区别在于
(1)attach直接进入容器终端,不会启动新的进程
(2)exec是在容器内打开新的终端,并且启动新的进程
简单的说,exec可以得到输出结果并返回到当前界面,而attach是进入终端后再进行执行
用成语讲:隔山打牛
示例:

从容器内拷贝文件到主机
语句
示例
列出当前容器
常用可选项
示例:

退出容器
方式1

方式2
示例

启动容器
示例

重启容器
示例
可以发现时间由8分钟变成了4秒钟,说明重启成功
停止容器
方式1
方式2
方式1可以理解为电脑正常关机,而方式2可以理解为直接拔掉电源,比较迅速
示例

删除已停止容器
rmi为删除镜像,rm为删除容器
方法一:
注:法一已被弃用,执行无效
方法二:
示例
docker镜像
镜像是什么
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
镜像采用了分层结构,采用这种结构最大的好处就是共享资源,举个例子,当下载一个插件时,他自己的缓存也存在于此,删除这个插件后,再下载这个插件或者需要用到支持此类资源的插件时,速度会快很多,这是因为共享一套底层资源(小白理解,有误轻喷)
当容器启动时,一个新的可写层被加载到镜像的顶部。
这一层通常被称作“容器层”,“容器层”之下都叫“镜像层”,例如下载的tomcat就是容器层
镜像commit
开启交互终端
法一
执行结果
法二
可以看见端口是49154
访问与上相同
开启副本
示例:
此副本与原先的区别在于没有doc
容器数据卷
概念
Docker将运用与运行的环境打包形成容器运行, Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来, 那么当容器删除后,数据自然也就没有了。 为了能保存数据在Docker中我们使用卷。
作用
1、数据的持久化
2、容器间继承+共享数据
容器内添加
直接命令添加
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
示例:
发现已经进入到了容器中
此时打开另一个终端(此后称为host终端,第一个称为容器终端),输入ll查看数据卷是否写入
可以发现中间已经存在了myDataVolume
查看数据卷是否挂载成功
小知识,下图中的RW:true说明有写入的权限,即可读可写
输入后发现binds后是我们刚刚写入的,说明挂载成功
此时呢,我们在host终端创建文件
然后去容器终端查看
发现存在host.txtx文件,此时我们使用vi编辑host文件,在其内写入container updater 01 ,保存并退出,再创建一个新文件container.txt
回到host终端查看
发现写入成功,即说明容器和宿主机之间实现了数据共享
此时回到容器终端,停止容器并退出
回到host终端,在其内新建host02文件并更改host文件内容,内容更改为
container update 01
host update 01
此时在回到容器终端,打开容器,查看文件内容
发现改动了,说明容器停止退出后,主机修改后数据同步
带权限的命令添加
其仅仅少了写入权限,即可以在host终端写入和编辑文件,而容器终端只有查看的权利,没有写入和编辑的权利
dockerflie添加
首先在根目录下新建mydocker文件并进入
然后再使用vim创建并编辑Dockfile文件
在里面写入如下内容
上述内容其含义类似于
知识小扩充:
FROM:定制的镜像都是基于 FROM 的镜像,这里的 centos 就是定制需要的基础镜像。后续的操作都是基于 centos。
CMD
类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
此时file搭建完毕,开始bulid生成镜像
此时查看容器镜像,可以看见镜像已经生成
最后呢,进行run容器
此时查看目录
发现两个数据卷已经成功写入
那此时存在一个问题,就是数据卷的主机路径在哪里,我们重新打开一个终端,在终端下输入如下语句进行查看
然后查找可以发现其路径,在Mounts的source中
用dockerfile搭建数据卷完成
数据容器卷
概念:容器数据卷是指建立数据卷,来同步多个容器间的数据,实现容器间的数据同步。
小白理解:建造一个容器作为父容器,其他容器同步于父容器,实现数据共享
示例:
首先创建一个父容器并创建doc1_add.txt文件
此时创建第二个容器
再进入到数据卷2下
创建一个doc2_add.txt文件,此时查看目录
可以发现父容器的数据也在此内(dco1_add.txt也写入到了其中)
同理创建第三个并写入doc3_add.txt文件

再进入到父容器中,可以看见三个文件都存在,说明数据实现共享
如果删除了父目录,那文件还会存在吗,接下来进行尝试
进入第二个或者第三个容器
可以发现文件仍然存在,因此只要容器没有删除完全,文件就不会消失。
结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器为止
docker file
概念
docker file是用来构建docker镜像的构建文件,是由一系列命令和参数构成的脚本
三步骤
dockerfile 构建过程解析
dockerfile内容基础知识
dockerfile执行大致流程
dockerfile保留字指令
可以参考一下Ubuntu的dockerfile
dockerfile案例
自定义镜像
下面以centos为例
docker安装的精简版的centos,其自身只保留了内核,对于一些系统认为不是很重要的东西被舍弃掉了,如下图所示
我们在进入centos后,发现vim无法使用,而且ifconfig也无法使用,且默认路径是/,那如果我们想使用ifconfig、自定义根目录,该如何做呢,这时候我们可以自己做一个镜像,话不多说,dockerfile如下
此时保存并退出,然后开始构建镜像
完成后run容器进入即可发现vim和ifconfig可以使用
CMD和ENTRYPOINT的区别(实例)
为了演示两者的区别,接下来以tomcat和centos演示一下:
查看一下tomact的dockerfile(重点看的是最后CMD,前面太多,不进行全部复制)
我们在启动tomcat时,在后面追加一个ls-l命令,代码如下
执行结果
根据webapps、work这些可以判断是tomcat里的,此时查看运行容器
发现没有容器在运行,说明之前的CMD命令被ls-l这条命令替代了,没有发挥其作用
此时呢,就相当于上述的dockerfile是这样的
此时可见CMD的命令会被覆盖
此时再创建简单的CMD版查询ip和ENTRYPOINT版查询ip观察区别
首先创建dockerfile文件,编辑内容如下
此时开始构建镜像
此时运行容器
就会执行查询ip的命令
但是此时没有显示http报文头信息,如果想要显示头部段信息的话,需要加上-i
再次运行并在尾部加上-i,代码
执行结果如下
发现报错了,这是因为cmd是覆盖,后面的-i替换了之前的cmd命令
"curl", "-s" ,"http://ip.cn"
此时的dockerfile相当于
这是CMD版本的查询ip,接下来创建ENTRYPOINT的dockerfile
内容如下
然后开始构建
运行容器
发现都能正常执行,原有的没有受到影响,且可以正常使用-i
此时的dockerfile文件就相当于CMD版本的
由此可见CMD和ENTRYPOINT的区别在于前者是覆盖,后者是追加
ONBULID命令案例
温习定义
首先创建一个父dockerfile文件
构建父镜像
此时docker images可以发现镜像已经搭建完成
然后此时再新建一个dockerfile文件,文件内容如下
此时构建镜像
红色部分就是子类在执行时,父类的onbuild被触发
自定义centos9
首先创建文件夹,代码如下
mkdir小科普
此时cd到当前路径,创建c.txt文件
再将文件拷贝到当前路径

此时再创建dockerfile文件,编辑内容如下
此时开始构建镜像
安装完成后docker images查看
然后运行容器,代码如下
再docker ps
如下图所示
发现已经运行,再进行验证,在虚拟机中访问localhost:9080
构建成功,我们是以后台进程式的方法启动的容器,那如果想要进行ls命令该怎么做呢?
答案是利用exec,构造代码如下
执行结果如下
此时如果想要将web服务test发布的话,该如何操作呢
首先进入test文件下,再创建WEB-INF文件夹
然后在其内创建并编辑web.xml文件,内容如下
此时呢,再创建并编辑a.jsp文件,其内容如下
重启容器,然后在虚拟机中访问
此时你再在虚拟机的内容里多两个换行符(< br>)会同步到centos中,那就会在访问时生效
此时再查看catlina.out文件,代码如下
执行结果如下
我访问了三次,后台日志记录了三次
docker安装mysql
docker安装mysql
首先呢搜索mysql,代码如下
执行结果如下
此时我们如果想要下载5.6的版本该怎么办呢,后面加上版本号即可,代码如下
下载完成,接下来运行容器,代码如下
执行结果如下
此时该如何启动容器,那当然是exec,代码如下
此时呢,通过密码进入mysql,代码如下
注:密码默认是不回显的,直接输入即可
此时先新建一个数据库
建表
插入字段
此时呢,我们尝试在外部进行连接(虚拟机ip可通过ifconfig指令查看,显示的docker中inet后的数字就是ip)
连接后,可以发现刚刚编写的内容
此时你把java改成tomcat
再从mysql里面看
完成了外部机器连接mysql
此时想要备份的话,如下操作即可
此时切换到这个目录下
查看文件
数据已全部备份到此文件中
本地镜像发布到阿里云上
首先呢,我们复习一下commit,使用commit构建一个镜像
执行结果如下
此时打开阿里云,在里面搜索容器镜像服务
然后创建个人版,然后开始创建个人仓库
再选本地仓库
此时给出了以下几个代码
按1、3步骤操作即可,但是第一个命令执行时会报错,如下图
这是因为没有设置固定密码的问题,找到刚刚的个人版那里,点击进去,选最下方的访问凭证,设置固定密码即可
然后最终设置完毕后在阿里云镜像仓库中就可以找到自己搭建的镜像啦,docker初学就到这里结束,本人只是小白,有问题还请各位大佬多多指教
上一篇:派出所里的故事|侯市派出所帮助智力障碍人士解决孩子落户问题
下一篇:没有了
相关新闻
- 2022-02-11 派出所里的故事|侯市派出所帮助
- 2022-02-11 GIT (分布式版本控制系统)
- 2022-02-11 MFC Windows 程序设计(七)之鼠标绘制
- 2022-02-10 FoneLab Mac Data Retriever for Mac v1.2.28 –
- 2022-02-10 【Easyx库基础用法教程】
- 2022-02-10 设计师的“福利”办公软件分享来
- 2022-02-10 qt在windows下打包全解
- 2022-02-09 windows10系统超全面优化攻略
- 2022-02-09 虚拟机测试Windows Server 2016原地升级
- 2022-02-09 【Pygame实战】曾经风靡全国的游戏
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
