玖叶教程网

前端编程开发入门

Docker篇(二):Docker实战,命令解析

大家好,我是杰哥


上周我们通过几个问题,让大家对于Docker有了一个全局的认识。然而,说跟练往往是两个概念。从学习的角度来说,理论知识的学习,往往只是第一步,只有经过实战,才能真正掌握一门技术


所以,本周我们将进入Docker的实战


进入实战前,先回顾一下Docker的架构图



我们看到,Docker实际上使用的是客户端-服务器架构。我们是作为客户端向Docker发送命令,与Docker守护进程进行对话,由守护进程完成命令的分发、运行和构建动作。那么,也就是说,我们只要掌握了Docker的执行命令,也就自会使用Docker了


一 理论

Docker命令,混个眼熟


总得来说,Docker的命令,从操作对象来说,包含仓库、镜像以及容器的三种类型。其中,我们把容器的命令分为容器生命周期管理容器的操作命令,并加入进了简单却很重要的帮助命令


温馨提示1

结合github思想以及linux命令知识,进行对比理解这些命令,方可快速get哦~


1 帮助命令

1)docker version


显示docker的版本信息


2)docker info


docker version更强大。除了显示docker的版本信息外,还显示docker的系统信息,包括镜像和容器等



我们可以看到,docker中的容器总数,正在运行、暂停以及停止状态的个数,还有镜像的个数等信息


3)docker help


不得不说,它是最万能的命令,也是我们可以用来自己学习docker命令的最全最便捷的资料


执行docker help,可以看到会显示三类命令的使用说明:docker已经给定的配置命令、管理命令以及我们常用的操作命令三类。而实际上,我们只需要关心第三类即可


事先声明

以下说的image,指的是镜像名称:TAG的组合。若只有镜像名称,则表示该镜像的TAGlatest


2 仓库命令

即操作对象为仓库的相关命令,包括登录到仓库、从仓库拉取镜像、往仓库上传本地镜像以及从仓库中查找镜像等命令


1)docker login

登录到docker hub

  • docker login -u 用户名 -p 密码


2)docker pull

从镜像仓库中拉取或者更新指定镜像

  • docker pull image


3)docker push

将本地的镜像上传到镜像仓库,要先登陆到镜像仓库

  • docker push image

4)docker search

从docker hub上查找镜像

  • docker search image

3 本地镜像管理


1)docker images

  • 列出本地镜像列表
  • docker images


2)docker rmi

  • 删除镜像
  • docker rmi image


3)docker build

  • 构建镜像,用来将一个Dockerfile构建成镜像

  • docker build [OPTIONS] PATH | URL | -


4)docker history

  • 查看指定镜像的创建历史
  • docker history image


5)docker save

  • 将指定镜像保存为tar文件
  • docker save -o test.tar image


6)docker load

  • 导入使用docker save保存的tar镜像
  • docker load --input test.tar

4 容器生命周期管理

容器的生命周期管理命令,即对容器进行新建、启动、停止、暂停、删除等操作,可以参考线程的生命周期来对比学习


1)docker run

运行镜像,相当于新建一个容器

docker run containerId


2)docker start

启动一个或多个已经被停止的容器

docker start containerId


3)docker stop

停止一个正在运行的容器

docker stop containerId


4)docker restart

重启容器

docker restart containerId


5)docker kill

杀掉一个运行中的容器

docker kill  containerId


  • 相比kill,stop给了容器自行处理结束的时间,更为优雅


6)docker rm

删除容器,与kill的效果一样,即直接删除当前的容器

docker rm containerId


7)docker pause

暂停正在运行的容器

  • docker pause containerId


8)docker unpause

恢复运行容器

docker unpause containerId

9)docker create

创建容器

docker create containerId

docker run image表达的效果一样


10)docker exec

在运行中的容器中执行命令

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
  • -d :分离模式: 在后台运行
  • -i :即使没有附加也保持STDIN 打开
  • -t :分配一个伪终端

5 容器操作

包括对容器的查看、容器日志获取等命令


1)docker ps

查看容器列表

docker ps

2)docker inspect

查看容器具体信息

docker inspect containerId

3)docker top

查看容器中运行的进程信息,支持 ps 命令参数

docker top  containerId

4)docker attach

连接到正在运行中的容器

docker attatch  containerId

5)docker logs

查看容器日志

docker -f --tail=10  containerId

6)docker export

将文件系统作为一个tar归档文件导出到STDOUT

docker export  containerId

7)docker port

列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口

docker port

8)docker commit

提交镜像,即从容器创建一个新的镜像

docker commit containerId

9)docker cp

用于容器与主机之间的数据拷贝

docker cp  CONTAINER:SRC_PATH DEST_PATH|


好了,浏览完这些常用的命令,接下来就进入实战啦


可能你会觉得,这些命令大部分都很生疏呀


没关系,从实战中学习,边练边学,谁不是从跑起来一个demo开始慢慢学习一门技术的?用着用着就熟悉啦

我们通过在docker中安装运行一个tomcat来进行这些命令的实际应用

二 实战

Docker安装tomcat


1 查看本地镜像 docker images



2 删除不再使用的镜像 docker rmi imageId


删除掉不再使用的hello-world镜像吧,执行docker rmi bf756fb1ae65


提示

Error response from daemon: conflict: unable to delete bf756fb1ae65 (must be forced) - image is being used by stopped container a95514aca795


那就使用强制删除命令:docker rmi -f imageId,即删除命令后加"-f"



提示删除成功


3 检验

再次运行docker images,查看当前的镜像,hello-world镜像已被成功删除



4 搜索镜像


执行docker search tomcat



会出来一堆镜像,默认是按照star的数量排序的,并且前几个往往标明了是官方版(official),一般默认是选择第一个啦


5 拉取镜像至本地


选择好镜像以后,我们执行docker pull tomcat从仓库中,将该镜像拉取到本地



在不指定版本时,它下载的就默认是latest,即最新版本的tomcat


6 查看镜像


执行docker images



我们看到,本地就多了一个latest版本的tomcat,大小为649M


什么?wait a moment......


649M!这......也太大了吧,大家不是都说docker的镜像比较小吗?我这是不是哪里出现问题了?


是呀,最开始我也怀疑呀!


但是,经过一步深入探究,就慢慢豁然开朗了


来来来,你可以细品一下


Tips1

你也知道,docker的出现,就是为了解决传统从开发到运维之间的交付缓慢等问题。它最终是将软件和软件运行环境,即代码及其运行需要的环境打包为一个镜像包,进行交付的


那么,也就是说,tomcat镜像就不仅仅包含tomcat,还包含tomcat运行的各种环境:kernel、centos以及java环境这些咯


这不,一下子就恍然大悟了!


好,顺利地消除了疑问,那就继续往下走


7 运行镜像

执行docker run命令,运行tomcat镜像,即创建一个tomcat容器

docker run --name tomcat 
-itd 
--privileged=true  
-v /Users/wangjie/Downloads/documents/webapp:/usr/local/tomcat/webapps/webapp 
-p 8080:8080 
tomcat

运行一个名称为tomcat的tomcat镜像,开启运行权限,并指定容器卷:指定本地目录和docker目录的相互映射(其实就是相互共享,感兴趣可以测试一下),并指定映射端口为8080


Tips2


选项

简写

说明

–detach

-d

在后台运行容器,并且打印容器id。

–interactive

-i

即使没有连接,也要保持标准输入保持打开状态,一般与 -t 连用。

–volumn

-v

绑定一个容器卷

–tty

-t

分配一个伪tty,一般与 -i 连用


8 查看容器


执行docker ps,查看当前的容器列表


发现tomcat已经成功运行,并且容器号为f4d4541dfead


9 查看容器日志

执行

docker  logs -f --tail=10  f4d4541dfead

查看tomcat的日志



其中-f--tail与linux中的相应命令的含义完全一致,即

-f:跟踪日志输出
--tail:显示尾部(最新)多少行数的日志信息


我们看到,在docker中已经成成功启动了一个端口为8080的tomcat服务器


由于在启动的时候我们也通过“-p 8080:8080”做好了主机与docker的8080端口的映射。


那么按照正常逻辑来讲,我们请求链接:http://localhost:8080/,页面会显示tomcat的介绍页面


带着期待,进入测试环节~


10 测试


访问链接:http://localhost:8080/

奇怪,居然是404

莫慌,回想一下,既然正常启动了,就首先肯定不是服务本身的问题,那就要么是端口映射不正确防火墙未关闭。检查过,这些可能的原因全部被排除了


那会是什么原因呢?


404的话,难道,是webapps下没有对应的html文件?!这,不太可能吧,一边摇着头一边进行排查


1)进入tomcat根目录


执行命令

docker exec -it 6ea8e9882ae6 /bin/bash


进入tomcat容器的根目录



Tips3

docker attach 也可以直接进入正在运行的tomcat容器,也就是说

docker attach 6ea8e9882ae6与命令

docker exec -it 6ea8e9882ae6 /bin/bash是相同的效果


但是,本人在真实测试的时候,执行前者,却根本卡住进不去,于是索性采用了后者,难道是最新版本将docker attach命令给排除了?! 有可能呢,所以建议大家进入容器可以采用 docker exec命令即可


2)进入webaps目录



并没有东西,但是查看webapps.dist下是有文件的,这,那就试试把这个文件换成webapps


于是分别执行

mv webapps webapps2
mv webapps.dist/ webapps


备份好之前的webapps目录,然后将webapps.dist目录名称修改为webapps



重新刷新页面



你说神奇不神奇,这就成功了!


11 暂停容器

执行docker pause f4d4541dfead,暂停当前容器



12 恢复容器


执行docker unpause f4d4541dfead,恢复已暂停的容器



13 重启容器


执行docker restart f4d4541dfead,重启容器



14 杀掉tomcat容器


执行docker kill f4d4541dfead,杀掉正在运行的容器



15 查看端口

执行命令

docker port f4d4541dfead

查看该tomcat对外映射的端口情况



16 导出容器为一个tar包


执行命令

docker export -o tomcat-`date +%Y%m%d`.tar f4d4541dfead

导出tomcat容器为一个名为tomcat-当前日期.tar的tar文件


查看当前目录,就存在了这个文件


17 创建新镜像


说实话,在进行tomcat安装之前,我并不知道过程中会出现这个小插曲(启动之后并不能直接访问的问题)。不过也刚好,干脆我们把这个修改之后的tomcat容器,重新创建为一个新的镜像


1)创建镜像

执行命令

docker commit 6ea8e9882ae6 mytomcat:1.1


那么,我们以后使用的话就可以直接使用我们自己创建的这个镜像了

试着运行一下我们自己的这个镜像,

2)运行镜像

执行命令

docker run --name mytomcat 
-itd 
--privileged=true  
-p 8088:8080 mytomcat:1.1

启动镜像


3)页面测试


成功运行~

到现在为止,docker命令的实战环节结束~


温馨提示2

此时再回过头浏览一下那些命令,学习效果会更佳哦~


三 总结

总而言之

好了,Docker实战篇圆满结束~我们分别总结了以下几种类型的命令:

1 帮助命令

2 仓库命令

3 本地镜像管理命令

4 容器生命周期管理命令

5 容器操作命令

并通过在docker中安装运行tomcat镜像的实战操作,实际应用了这些命令,让大家对于这些命令也有了进一步的认识(当然我这边列出来的并不是docker的所有命令,你也可以自己去再探索剩余的命令,进行练习),个人觉得受益匪浅,相信对你会有帮助。只要你跟我一样,也去实践了一遍~

因为,真正动手实践,与你知道了理论的效果,还是不一样的


嗯,就这样。每天学习一点,时间会见证你的强大~


下期预告:


Docker篇(三):Dockerfile实战开启

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言