写在前面的话
之前谈了啥是 docker 和怎么安装 docker,这里就谈谈 docker 命令的使用,当然,这里的使用可能只是局限于 docker 的增删查改。
另外需要注意的是,为了图片的美观,接下来的截图有些图片可能是经过我处理过的,只保留了重要的内容,所有如果你发现和我的结果不一致,也不需要担心,是那个意思就行。
镜像命令
【1】万物起源于 Hello world,运行第一个容器:
docker run hello-world
输出如图:
这是一个类似于 demo 容器,docker 先会在本地查找对应的镜像,如果镜像存在,则直接运行,如果镜像不存在,则去 docker hub 上面下载镜像,然后再运行~
【2】搜索镜像:这里以 nginx 镜像为例
docker search nginx
输出如图:
我们可以看到,名字为顶层,没有用户名区隔的项目一般都是官方的,从后面的 OFFICIAL 也可看出来,第一个是 Nginx 官方的镜像,用户自己制作上传的镜像都是以 用户或者组织名称/项目名称 这样命名的~
当然,我们也可以去 docker hub 上面查看搜索有哪些镜像:
https://hub.docker.com/
搜索结果如图:
点进去可以在 TAGS 选项中查看需要的版本:
【3】下载镜像:我们这里以下载 CentOS 的镜像为例
docker pull centos
自动从 docker hub 上面去下载最新版本的 CentOS 镜像,当然,既然可以在 dcoker hub 上面看到这么多版本,就意味着可以选中其他版本,比如下载 nginx 的 1.14-alpine 版本:
docker pull nginx:1.14-alpine
只需加个冒号,在后面加版本名称即可:
从下载过程可以看出 docker 镜像的明显特征:镜像分层,然后复用,最大可能节省资源占用~
同时,在这里可以谈谈另外一个概念:在老版本的 docker 中,命令是没做区分的,比如下载镜像就是直接 docker pull,但新版本中,慢慢的这些都被规范了起来~
也希望大家跟着规范起来,通过 docker --help 查看,可以看到命令为了几类,其中很重要一类就是管理命令:
我们一开始需要记住的主要包括:image,container,network,volume
新的命令方式为:
docker image pull busybox
【4】查看镜像:
# 旧方法 docker images # 新方法 docker image ls
结果如图:
donker 镜像都很小,CentOS 的镜像也才 202M。
【5】删除镜像:
# 旧方法 docker rmi nginx:1.14-alpine # 新方法 docker image rm nginx:1.14-alpine
结果如图:
【6】查看镜像详细信息:
docker image inspect busybox
返回一个 json 数据,具体内容都在里面,感兴趣的可以看下。
【7】查看镜像占用的磁盘:
docker system df
结果如图:
容器命令
【1】查看现在运行的容器:
# 查看正在运行的容器 docker container ps # 查看所有容器 docker container ps -a # 另外一种查看方式 docker container ls # 另一种查看所有容器 docker container ls -a
结果如图:
【2】带参数创建容器:
docker container create -it --name b1 busybox
--name:指定容器名称,这里以 busybox 镜像创建一个名为 b1 的容器。
-i:指的是交互式操作,--interactive 的简写。
-t:是 --tty 的缩写,代表打开一个终端。
效果如图:
返回一串随机生成的 ID,这个 ID 是容器的唯一标识,可以通过上面的命令可以查看该容器:
可以看到此时 b1 容器的状态是 create 状态,其中 CONTAINER ID 就是刚返回的 ID 的前部分。
由此可知:创建容器有两种方式,一是 docker run 创建,另一个就是 docker container create 创建。
另外,还有一些常见的参数:
--rm,指该容器停止以后自动删除。
--restart,重启规则,配置参数:
on-failure:容器停止时报错了则重启,但是重启 docker 不会重启。
unless-stopped:容器停止,如果没有报错就重启,重启 docker 一般会跟着重启。
always:无论如何至于停止就重启。
【3】启动,关闭,暂停,继续运行容器:
# 启动容器 docker container start b1 # 停止容器 docker container stop b1 # 暂停容器 docker container pause b1 # 继续运行 docker container unpause b1
如图所示:
注意,因为给容器命名了,所以可以直接通过容器名进行操作,只要能唯一标识这个容器就行。
【4】进入容器内部:
进入容器一般有两种方法,第一种:
docker container attach b1
结果如图:
值得注意的是,这种方法在退出容器的时候需要使用:按住 Ctrl,再按 p,再按 q
如果直接 exit 则会导致在退出容器以后,容器也停止退出。
第二种方法:
docker container exec -it b1 /bin/sh
这种方法可以直接 exit 退出容器,且保持继续运行。
当然,在创建容器的时候,也跟了参数 -it,这意味着在最后加上 /bin/sh 是可以在容器创建完成以后直接进入容器的:
docker run -it --name b2 busybox /bin/sh
结果如图:
但是这种方式有个问题,那就是我们以 /bin/sh 替代原本容器种运行的进程,那么在我们 exit 以后,就相当于退出了 sh 进程,这样导致的结果就是容器也跟着停止了。
为了便于管理,在每个容器之中一般只允许一个进程也就是业务进程运行。所以容器落实到最后更像一个服务在运行。
【5】删除容器:
# 旧方法 docker rm b2 # 新方法 docker container rm b2
直接 rm 就删除了,当然,一般 docker 命令后面如果不接 container 命令也能直接对容器进行操作,但如之前所说,一切都是为了规范。
【6】查看容器详情:
docker container inspect b1
其中有几个参数很重要,包括 IP 地址,数据保留在宿主机中的位置等等。
【7】查看容器的日志:
docker container logs b1
【8】 批量操作容器:这里就不具体演示了,大家知道就行,格式就这样
# 删除所有容器 docker container rm $(docker container ls -aq) # 删除所有 redis 镜像 docker image rm $(docker image ls -aq redis) # 删除所有在 mongo:3.2 之前的镜像 docker image rm $(docker image ls -aq -f before=mongo:3.2)
小结
以上是目前得记住的基础命令,至于其他命令,会在后面的章节进行单独的讲解,那时候将会是更深层次的应用,如果你觉得还不错,可以先点 推荐 试试~