Docker小白到实战之常用命令演示,通俗易懂
前言
上一篇大概认识了Docker,主要是从概念、架构、优点及流程方面进行阐述,并进行安装和体验; 接下来就开始进行实操学习,在演示过程中会针对关键的知识点进行归纳和总结,这里先从常用命令说起,来吧,小伙伴们。
正文
1. 预览
Docker和我们熟悉的Git很类似,都是通过命令执行相关操作,当然也有一些界面管理工具(点按钮的那种),但大家似乎更喜欢直接敲命令,毕竟这种方式更加灵活、更加容易理解操作本质;有大神将常用命令用一张图很好的展现出来,这里借用一下(图片来源于网络,侵删):
不熟悉Docker的小伙伴可能看见这图直接懵圈了,别急,接着往下看, 看完再回过头来瞅这张图,绝对感觉很给力。
2. 常用命令实操
2.1 全局命令
docker version
:查看docker版本信息。docker info
:查看docker详情信息,比如仓储信息、加速器配置信息、有多少个镜像、有多少个容器、CPU、内存等。docker events
:从docker 服务获取实时事件,通俗一点理解就是操作日志,比如对镜像、容器、网络、挂载卷等操作,就会记录对应的事件信息;最多能返回最近的1000条日志信息。先在一个终端执行命令,终端会阻塞:
开启另一个终端,执行根据镜像运行容器的命令:
此时开启的第一个终端就实时输出事件消息,如镜像拉取、容器启动、容器结束等信息,如下:
既然可以把这个命令当做操作日志理解,那肯定可以根据条件查看对应的数据,如下:
如图所示,会先显示符合条件的事件信息,然后会继续阻塞,如果对服务端有操作,信息还会实时显示。常用的参数指定如下:
-f :根据条件过滤事件,如上图指定的是镜像为hello-world相关的事件信息;
--since :从指定的时间戳后显示所有事件,可以理解为开始时间,支持多种时间格式,默认使用本地主机的时区;
--until :显示到指定的时间为止,可以理解为结束时间;
2.2 镜像常用命令
镜像(image)可以理解为一种轻量级、可独立运行的软件包,包含了应用程序及其他运行需要的基础设施,如运行时、配置文件、依赖的库等,所以没有镜像就没法启动容器;就好比开发中没有类(class),又怎么去根据类创建实例呢。
镜像是只读的,所以操作命令不多,一般就是增、删、查。
docker images
:列出Docker主机上的镜像可以指定参数,比较常用的如下:
-a :列出本地所有的镜像(含中间镜像层,默认过滤掉中间镜像层)。
-q :只显示镜像ID。
上图中的-aq就是显示所有镜像的ID,一般用于批量删除。
docker search
:从远程仓储中搜索镜像,后面直接根镜像名称即可可以指定条件进行搜索,如下:
--filter:指定条件搜索,is-official表示是否为官方的,stars表示要找多少星星以上的。
对于搜索,我还是比较喜欢用界面,直观好看:
docker pull
:从远程仓储中拉取镜像,后面跟镜像名和tag即可,即指定版本拉取,如果不指定tag,默认就latest,最新的。镜像的分层原理就是采用UnionFS(联合文件系统),是一种分层、轻量级的高性能文件系统;镜像可以通过分层来进行继承,可以基于基础镜像制作出各种具体的应用镜像,比如我们刚拉取下来的nginx镜像,这里先了解,后续我们自己制作镜像的时候就明白了。
docker pull 镜像名:tag
:指定版本拉取;docker rmi
:删除指定镜像,后面可以跟名称或镜像ID删除指定版本,如下:
根据镜像ID删除,可以一下删除多个,中间用空格隔开:
删除全部镜像,就是找出所有镜像ID,然后删除就行了,当然肯定不是一个一个的拷贝镜像ID;
docker images -aq
可以显示所有镜像ID ,所以两个命令结合用即可,如下:docker rmi -f $(docker images -aq)
-f:代表强制删除,比如一些镜像和容器有依赖,会提示不能直接删除,加上这个选项就可以强制删除。
docker save
:导出镜像,可以离线拷贝到其他主机上使用,避免没有网络不能下载镜像的场景。生成的tar文件就可以根据需要拷贝到对应设备上加载使用,不用在线拉取,因为很多场景是不允许连外网的。
docker load
:加载镜像,根据拷贝过来的tar文件可以直接加载镜像到主机上。这里演示就将原来拉取的镜像删除,然后通过load命令重新加载,如下:
加载镜像,如下:
换一种写法,如下:
选项说明:
--input , -i : 指定导入的文件。
--quiet , -q : 简化输出信息,不显示具体加载过程。
注:这里因为是在TestDockerImage目录下执行命令,所以指定tar的文件时,就在当前目录下。
2.3 容器常用命令
容器是用镜像创建的运行实例, 它可以被启动、开始、停止、删除,每个容器都是相互隔离;可以把容器看做是一个极简版的Linux环境和在其中运行程序的组合;
容器和镜像几乎一样,唯一的区别就是镜像层上面加载了一个可写层,这层称为容器层;
以下对容器的操作,可以指定容器名称,也可以指定容器ID,演示统一用容器ID,不再重复截图。
docker run
:根据镜像启动容器;语法如下:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
;常用选项参数说明,如下:
--name="容器名" : 为容器指定一个名称;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,一般和 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,一般和 -i 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机端口:容器端口
演示如下:
上图可以看到终端阻塞了,这种模式称为attached默认,即前台运行,与之对应的是detached模式,及后台运行,接下来会演示。 由于终端阻塞,这里另开一个终端执行
docker ps
命令看运行的容器,如下:前台运行模式终端很容易被关闭,启动的nginx容器也会停掉,这种情况对于很多场景是不允许的,所以可以指定为后台模式运行,即detached模式,如下:
现在只是在容器内启动了一个nginx,并监听80端口,如果需要通过主机能访问到容器里面的nginx,还需进行端口映射,如下:
这里启动了两个nginx容器,都是监听80端口,但并没有报端口被占用的错,所以容器之间是互不影响的。通过-p选项进行端口映射,这下就可以通过主机的9999端口访问到容器内部的80端口,如下:
既然刚开始说可以将容器理解为简易版的Linux,那就应该可以进入容器内部操作一把,如下:
在容器里面只能执行一些核心的命令,因为是极简版,所以内部只包含重要的功能,如果需要其他功能可以自己安装扩展。
退出容器的两种方式:
a、容器中执行exit命令,容器停止并退出,回到主机;
b、利用组合键ctrl+p+q,容器不停止退出,回到主机;
docker ps [OPTIONS]
:显示主机中的容器,不加选项默认只列出运行中的容器;-a : 显示所有的容器,包括未运行的;
-n : 列出最近创建的n个容器;
演示如下:
启动和停止容器的命令;
docker start 容器id # 启动被停止的容器
docker stop 容器id # 停止运行中的容器
docker restart 容器id # 重启容器
docker kill 容器id # 强制停止容器
docker stop
停止容器,后面可以跟一个或多个容器ID:docker start
:启动被停止的容器,后面可以跟一个或多个容器ID:docker restart
重启命令和docker kill
强制停止命令就不截图啦docker exec
和docker attach
两种方式进入正在运行的容器。很多场景容器都是后台运行,但有时需要进入容器内部进行相关配置的更改。
docker exec
:进入容器后开启一个新的终端,正常执行Linux相关命令。docker attach
:进入容器正在执行的终端,不会启动新的进程。退出容器模式:
容器中执行exit命令,容器停止并退出;
利用组合键ctrl+p+q,容器不停止退出;
docker logs [OPTIONS] 容器ID
:查看指定容器的日志;常用OPTIONS如下:
-f :跟踪日志输出
--since :显示指定开始时间之后所有日志
-t : 显示时间戳
--tail :列出最新N条容器日志
可以指定选项,查看需要的日志,如下:
docker top 容器ID
:列出指定容器内部的进程,可以看到容器内的应用进程是否正常运行,如下:docker inspect 容器ID
:查看指定容器的详细信息,比如运行状态、网络配置、挂载的卷等信息都有,如下:docker commit
:根据容器生成一个新的镜像;容器是可编辑的,有些时候需要将已更改的容器生成一个新的镜像给其他人用。命令说明:
-a :提交的镜像作者;
-m :提交时的说明文字;
命令中testcommitimage:v1是自定义的镜像名和tag;
根据新生成的镜像启动容器,则内部就会有创建的对应文件(容器内部可以根据需要任意改,这里只是演示创建文件而已)。
docker export
和docker import
将容器方便离线导出和导入;命令说明:
#将容器导出为tar文件
docker export -o testexport.tar 030aa6fcd7f3
# -o 指定输出位置和文件名
# 030aa6fcd7f3 这个是容器ID #根据生成的tar文件导入为镜像
docker import testexport.tar testexportimagename:v2
# 指定对应的tar文件
# testexportimagename:v2 镜像名和版本, 可以自己定义
这对命令是不是和镜像的
docker save
、docker load
这对命令用法很相似,但两种方式不能混用,因为export导出的仅仅是容器快照,save保存的是完整的镜像文件。docker rm 容器ID
:删除指定容器,运行中的容器默认不让删除,可以增加-f选项强制删除,如下:
以上只是总结了平时比较常用的命令,并没有全部列出,更多细节可以进入官网:https://docs.docker.com/engine/reference/commandline/rm/;
总结
上面内容主要针对镜像和容器的常用命令进行演示和说明,关于数据卷、dockerfile、网络相关的命令后面单独分享;
看到这里,相信文章开头的那张图小伙伴们已经差不多看懂了,而且图片中的模块划分、箭头指向都很有意义;还有好多干货在后面,关注“Code综艺圈”,和我一起学习吧;
Docker小白到实战之常用命令演示,通俗易懂的更多相关文章
- Docker小白到实战之Dockerfile解析及实战演示,果然顺手
前言 使用第三方镜像肯定不是学习Docker的最终目的,最想要的还是自己构建镜像:将自己的程序.文件.环境等构建成自己想要的应用镜像,方便后续部署.启动和维护:而Dockerfile就是专门做这个事的 ...
- Docker小白到实战之容器数据卷,整理的明明白白
前言 上一篇把常用命令演示了一遍,其中也提到容器的隔离性,默认情况下,容器内应用产生的数据都是由容器本身独有,如果容器被删除,对应的数据文件就会跟着消失.从隔离性的角度来看,数据就应该和容器共存亡:但 ...
- Docker小白到实战之Docker网络简单了解一下
前言 现在对于Docker容器的隔离性都有所了解了,但对容器IP地址的分配.容器间的访问等还是有点小疑问,如果容器的IP由于新启动导致变动,那又怎么才能保证原有业务不会被影响,这就和网络有挂钩了,接下 ...
- 03-Git常用命令演示、冲突演示
Git常用命令演示 Git的的思想其实和SVN还是蛮像的,可以参考之前svn文章一起加深了解. 新建一个user2目录,clone下代码. 修改readme.txt git status 可以看到re ...
- docker学习笔记二:常用命令
docker学习笔记二:常用命令 查看docker常用命令 docker --help 返回结果如下: 其中常用的命令如下: 1.image相关操作 展示所有的image: 删除image: rmi ...
- docker系列四之docker镜像与容器的常用命令
docker镜像与容器的常用命令 一.概述 docker的镜像于容器是docker中两个至关重要的概念,首先给各位读者解释一下笔者对于这两个概念的理解.镜像,我们从字面意思上看,镜子里成像,我们人 ...
- Docker小白到实战之开篇概述
前言 "不对啊,在我这运行很正常啊",这句话小伙伴们在前几年应该听得很多:每次一到安装.部署时总有一堆问题,毕竟操作系统版本.软件环境.硬件资源.网络等因素在作怪,此时难免会导致开 ...
- Docker小白到实战之Docker Compose在手,一键足矣
前言 Docker可以将应用程序及环境很方便的以容器的形式启动,但当应用程序依赖的服务比较多,或是遇到一个大系统拆分的服务很多时,如果还一个一个的根据镜像启动容器,那就有点累人了,到这有很多小伙伴会说 ...
- Docker系列教程05 容器常用命令
https://mp.weixin.qq.com/s?__biz=MzI4ODQ3NjE2OA==&mid=2247483890&idx=1&sn=2721f08624e6de ...
随机推荐
- Docker单机网络下
前言 Docker系列文章: 此篇是Docker系列的第七篇,大家一定要按照我做的Demo都手敲一遍,印象会更加深刻的,加油! 为什么要学习Docker Docker基本概念 Docker镜像基本原理 ...
- log4j配置相对路径实现日志记录
从网上简单搜索了一下,发现有三种介绍的方法.总结在这里1. 解决的办法自然是想办法用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如: log4j.appender ...
- python 两种排序方法 sort() sorted()
python中有两种排序方法,list内置sort()方法或者python内置的全局sorted()方法 区别为: sort()方法对list排序会修改list本身,不会返回新list.sort()只 ...
- Linux | Shell脚本的编写
Shell 脚本的介绍 Shell脚本通过Shell终端解释器当作人与计算机硬件之间的翻译官,用户可以通过它执行各种命令,不仅有简单的,还有复杂的,比如:判断.循环.分支等这些高级编程中才有的特性.S ...
- RWLock——一种细粒度的Mutex互斥锁
RWMutex -- 细粒度的读写锁 我们之前有讲过 Mutex 互斥锁.这是在任何时刻下只允许一个 goroutine 执行的串行化的锁.而现在这个 RWMutex 就是在 Mutex 的基础上进行 ...
- C++11标准特性的一些理解
(1)auto 和 decltype 关键字 在C++11之前,auto关键字用来指定存储期(C++98中指的是自动生命周期).在新标准中,它的功能变为类型推断.C++11引入auto关键词与之前C语 ...
- ArrayList 从源码角度剖析底层原理
本篇文章已放到 Github github.com/sh-blog 仓库中,里面对我写的所有文章都做了分类,更加方便阅读.同时也会发布一些职位信息,持续更新中,欢迎 Star 对于 ArrayList ...
- java02动手动脑
1 编写一个方法,生成一千个随机数,用ppt提供的纯随机数发生器. 做这个题目时,看到老师已经给出Xn+1=(aXn+c) mod Integer.MAX_VALUE;给出了公式自然就算法明了. 我想 ...
- 网络损伤仪WANsim中关于丢包的介绍
网络损伤仪WANsim中的4种丢包模型 丢包是指在网络上传输的数据包无法到达指定目的地.丢包在广域网中是一个很常见的问题.想要模拟出真实的广域网环境,对丢包的精确模拟是必不可少的. 在网络损伤仪WAN ...
- 【NOIP2007】Hanoi双塔问题
题目描述 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形). 现要将这些圆盘移到C柱上 ...