Docker学习笔记(二)

笔者在上篇学习docker的笔记中,已经涵盖了Docker的运行底层原理,帮助命令以及镜像命令。在这篇笔记中,笔者将会记录学习docker的容器命令,镜像原理,镜像commit的一些原理。Docker有着更轻量、更高效以及更灵活的特点。Docker基于容器的虚拟化,仅包含业务运行所谓的runtime环境,Centos/Ubuntu基础镜像仅170M。并且宿主机可部署100~1000个容器。Docker同时分层储存和包管理,支持多种网络配置。

1. 容器命令

容器的根本前提是:镜像。
只有有了镜像才能创建容器。
笔者从官网拉下来一个ubuntu的镜像,使用了如下命令:
docker pull ubuntu

我们可以发现下载下来的这个ubuntu的镜像只有在这里插入图片描述
70M左右。

Docker 利用容器(container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。它能够被启动、开始、停止和删除。每个容器之间都是相互隔离的,保证安全的平台。

我们可以把容器看作是一个简易版的Linux环境和运行在其中的应用程序。容器的最上面那一层是可读可写的。

Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需要的所有资源打包到一个隔离的容器中。

容器与虚拟机又有不同。它不需要捆绑一整套的操作系统,只需要软件工作所需的库资源和设置。系统因此变得高校轻量,且能在任何环境中运行软件。

那么我们怎么新建并启动容器呢?

输入以下命令:
docker run [OPTIONS] IMAGES COMMAND

–name=“容器新名字” 为容器指定一个名称
-d 后台运行容器,并返回容器ID。
-i 以交互模式启动容器,通常与-t同时使用
-t 为容器重新分配一个伪输入终端,通常与-i同时使用
-P 随机端口映射,分为以下四种格式:
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort

现在我们已经下载完镜像了,那么我们开始新建并且启动容器。输入以下命令:
docker run -it IMAGE ID
在这里插入图片描述
如图所示,root@后面的一串就是我们生成的容器,我们可以把它看作一个地址,接下来我们使用ls命令。
在这里插入图片描述
接下来,我们使用ps -ef命令,若是能操作这个命令,则说明笔者已经成功登录进了docker里的ubuntu。我们输入命令docker ps,这样我们就可以看到docker里运行的所有进程。
在这里插入图片描述
可以看到容器ID,并且Up代表启动着。这里有个name为laughing_varahamihira。

那么我们如何去退出呢?

有两种方式:
第一种是exit 容器停止退出
第二种是ctrl + P + Q 容器不停止退出

在这里插入图片描述
用第一种方法时,我们可以看到docker ps中的进程已经被退出且没有正在运行的进程。
在这里插入图片描述
使用-l命令,即可查看上一次运行的进行显示。
-a就是对所有之前运行过的进行显示。
-q就是只显示容器编号。

在这里插入图片描述
在这里插入图片描述
我们通过输入命令
docker run -it --name Myubuntu ubuntu进行修改名字,我们可以将之前的laughing_varahamihira修改成为自己想要的名字,比如说笔者在这里把它修改成为了Myubuntu。我们使用docker ps查看正在运行的进程,我们可以发现它的name已经被笔者修改成功了。

那么我们如果想暂时离开这个进程,但并不想关闭这个进程怎么办?

按住ctrl + P + Q ,会弹出以下界面
在这里插入图片描述
在这里插入图片描述
我们查看一下,发现这个进程并没有关闭,只是暂时不用。

那么我们如何去启动容器呢?

只需要输入命令 docker start ID即可启动容器。

那么如何去重启呢?

输入命令docker restart ID即可。

那么如何去停止容器呢?

在这里插入图片描述
我们可以如图所示进行关闭。如果想要强制关掉的话就要使用到kill命令。输入docker kill ID即可强制停止。

如何去删除已停止的容器?

输入以下命令docker rm ID
在这里插入图片描述

使用镜像ubuntu以后台模式启动一个容器。
输入以下命令即可:docker run -d ubuntu。然后docker ps -a查看时,会发现容器已经退出。因此,有一个很重要的点是:要使Docker容器后台运行,就一定要有一个前台进程。容器运行的命令如果不是一直挂起的命令是会自动退出的。

查看容器日志:
docker logs -f -t --tail容器ID
-t是加入时间戳
-f跟随最新的日志打印
–tail数字显示最后多少条

当我们要查看容器内的进程时则使用top命令。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用该命令即可查看最新输出的三个记录。
在这里插入图片描述
因此,我们可以看到Linux的命令在docker中能用,我们把容器看成简易版的Linux环境。
在这里插入图片描述
Docker inspect查看当前正在运行的容器的具体信息。在这里面我们可以看到内部代码以及路径时间等。我们退出这个容器后,如果想要以命令进行交互,则输入以下命令 docker run -it ubuntu则登录进默认的地址。然后先使用ctrl+p+q退出(如果想要再次进入则写入命令docker attach ID)。

输入docker exec -t ID ls -l/tmp,进入容器,直接将结果返回给宿主机。
在这里插入图片描述
那么我们如何从容器内拷贝文件到主机上呢?

输入命令

docker cp [OPTIONS]CONTAINER:SRC_PATHDEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

便可将容器内拷贝文件到主机上

2. 镜像原理

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需要的所有内容,包括代码、运行时、库、环境变量和配置文件。

UnionFS(联合文件系统)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。镜像可以通过分层来继承,基于基础镜像,可以制作各种具体的应用镜像。

Docker的镜像实际上是由一层层的文件系统组成,这种层级的文件系统叫UnionFS. Bootfs主要包含bootloader和kernel。 Bootloader主要是引导加载kernel;Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix是一样的,包含boot加载器和kernel。当boot加载完成之后整个内核就在内存中,此时内存的使用权由bootfs交给内核,系统也将卸载bootfs.

rootfs在bootfs之上,包含典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。rootfs就是各种不同的操作系统的发行版,如Ubuntu,Centos等。

为什么我们下载Ubuntu或者是Centos都需要很大的内存,为什么docker下载他们只占用很少内存呢?

对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供rootfs就可以。因此对于不同linux发行版,bootfs基本一致,而rootfs会略有差别,因此不同发行版可以公用bootfs。

在这里插入图片描述
如图所示,当我们pull镜像时,在下载过程中,我们可以看到docker的镜像似乎是一层层往下加载。因此我们可以想象一下千层饼,这种分层镜像就类似于千层饼,一层外面包裹着一层。

为什么要有这样的结构呢?最大的好处就是共享资源。有多个镜像都从相同的base镜像构建而来,那么宿主机只需要在磁盘上保存一份base镜像,同时内存中也只需要加载一份base镜像就可以为所有容器服务,并且镜像每一层都可被共享。

Docker镜像都是只读的。当容器启动时,一个新的可写层被加载到镜像的顶部,这一层通常被称作“容器层”,“容器层”之下的都是“镜像层”。

3. 镜像commit

Docker commit操作:
docker commit提交容器副本使之成为一个新的镜像
docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]

在这里插入图片描述

--name=tomcatTest  

这个启动容器的名称,不可重复,以后要操作容器可以根据这个去找到对应容器

 -p 8080:8080

端口映射,因为容器和宿主机(就是Linux那台)网络是相通的,但是外部和容器网络是不通的,通过映射8080端口,我们就可以通过访问 宿主机的8080口,从而访问到容器的8080端口。

 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat

目录映射,简单来说就是把宿主机下的目录映射到容器中,把文件(比如war包)放到 linux的对应目录中,就会自动复制到 tomcat 容器里面,比较方便,当然也可以用 docker cp 命令复制,看个人习惯。

在这里插入图片描述
在这里插入图片描述

看到404或者是个猫则说明容器正常启动了。
在这里插入图片描述
我们用exec命令进入镜像,再使用ls读取目录,我们可以找到webapps。
然后我们输入cd webapps,后输入ls则可查找当前存在在webapps中的文件,如果想删除文件则使用 rm -rf 文件名的命令即可。
在这里插入图片描述
可以使用如下命令来将自己修改的文件内容上传。

$docker commit -a="hello" -m="tomcat without docs" 4314038d6161 atguige/mytomcat:1.2

在这里插入图片描述
现在将docker上运行的镜像全部删光。
在这里插入图片描述
我们此时的副本是删除了docs的,但是在原先的镜像中是有docs的,所以我们可以通过镜像的方式获得自己想要的版本。当要后台访问时,我们可以使用以下命令

docker run -d -p 7777:8080 tomcat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值