一般的虚悬镜像已经没有什么作用了,所以可以清理掉的,下面的命令可以清除所有的虚悬镜像:
$ docker image prune不过,如果我们想保留一些有用的虚拟镜像时,可以使用docker tag命令重新给镜像起个仓库名和标签:
$ docker tag 621d57f27e93 "test:1.0"1.4 镜像导出与导入
如果想与别人共享某个镜像,除了从镜像服务仓库中pull镜像和把镜像push到仓库上去之外,其实我们还可以将本地构建好的镜像直接导出并保存为文件发送给别人,如下:
$ docker image save /tmp/test_image.tar.gz而当你拿到别人导出的镜像文件,你可以使用docker load命令把镜像加载到本地的Docker镜像列表中,如下:
$ docker load < /tmp/test_image.tar.gz1.5 删除本地镜像
要删除一个或多个本地的镜像,可以使用下面的命令:
docker image rm [option] IMAGE1,IMAGE2,...IMAGEn也可以使用更简洁的方式,如:
docker rmi [option] IMAGE1,IMAGE2,...IMAGEn可以使用镜像的长id、镜像短id、镜像摘要以及镜像名称来删除镜像,如下
$ docker rmi f7302e4ab3a8一般更常用镜像的短id,如:
$ docker rmi f7302使用镜像的摘要也可以删除镜像,镜像的摘要可以使用下面的命令查询:
$ docker image ls --digests当然我们想要清除本地全部镜像时,可以使用下面的命令,不过一般不建议使用 。
$ docker rmi $(docker images -qa)另外,一般如果镜像已经被使用来创建容器,使用上面的命令删除会报下面的错误,告诉我们该镜像已经被使用,不允许删除 。
Error response from daemon: conflict: unable to remove repository reference "MySQL:5.7" (must force) - container ccd406c07a78 is using its referenced image e1e1680ac726对于已经被用于创建容器的镜像,删除方法有两种,一种是先把容器删除,再删除镜像,另一种则只需要在删除镜像的命令中跟一个-f参数便可,如:
$ docker rim -f f73021.6 使用docker commit构建镜像
上面的例子都是直接使用官方提供的镜像,其实,除了从官方仓库或其他镜像仓库拉取别人构建好的镜像外,我们也可以构建自己的镜像,一般有以下两种构建方式 。
使用docker commit命令,我们可以将修改过的容器重新提交为一个镜像,如:
$ docker commit conntaner_id my-hello:1.0使用这种方式构建的镜像,我们称为黑箱镜像,就是一个黑箱子一样,别人并不知道我们对容器做了哪些修改和操作,所以会对其安全性有所质疑 。
所以不推荐使用这种方式构建镜像,下面我们介绍一种更加通用且方便的方式 。
1.7 使用Dockerfile构建镜像
一般推荐编写Dockerfile来构建一种镜像,Docker Hub上的镜像都是采用这种方式构建的,采用这种方式的好处就是,我们不用把镜像分发给别人,而只是把Dockerfile和相应需要写入镜像的资料发给别人,别人也能自己构建镜像,安全透明 。
1.7.1 编写一个简单的Got程序
package mainimport "fmt"func main(){ fmt.Println("Hello Go")}将Go程序编译为可执行程序,如:
$ go build hello.go1.7.2 编写Dockerfile文件
下面我们编写一个简单的Dockerfile文件,构建自己的第一个镜像,如下:
# 从一个空白的镜像开始FROM stratchADD hello /# 执行CMD /hello1.7.3 开始构建镜像
编写好Dockerfile文件后,需要使用docker build命令进行构建,docker build命令的格式如下:
$ docker build [OPTIONS] PATH | URL | -# 注意最后的点(.)表示当前目录,即Dockerfile所在的目录$ docker build -t "hello-go:1.0" .上面只是简单演示了使用Dockerfile文件如何构建镜像,关于Dockerfile,还有许多更加深入地用法,我们之后有机再谈 。
02 容器(Container)容器与镜像的关系,就如同面向编程中对象与类之间的关系 。
因为容器是通过镜像来创建的,所以必须先有镜像才能创建容器,而生成的容器是一个独立于宿主机的隔离进程,并且有属于容器自己的网络和命名空间 。
我们前面介绍过,镜像由多个中间层(layer)组成,生成的镜像是只读的,但容器却是可读可写的,这是因为容器是在镜像上面添一层读写层(writer/read layer)来实现的,如下图所示:
文章插图
2.1 操作容器的相关命令
Usage: docker container COMMANDManage containersCommands: attach Attach local standard input, output, and error streams to a runnin g container commit Create a new image from a container's changes(把容器保存为镜像) cp Copy files/folders between a container and the local filesystem create Create a new container(创建一个新的容器) diff Inspect changes to files or directories on a container's filesyste m exec Run a command in a running container(在一个运行的容器中执行命令) export Export a container's filesystem as a tar archive inspect Display detailed information on one or more containers kill Kill one or more running containers(杀死一个或多个正在运行的容器) logs Fetch the logs of a container ls List containers(显示本地容器列表) pause Pause all processes within one or more containers port List port mAppings or a specific mapping for the container prune Remove all stopped containers rename Rename a container(重命名容器) restart Restart one or more containers(重启一个或多个容器) rm Remove one or more containers(删除一个或多个容器) run Run a command in a new container(运行一个新的容器) start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop one or more running containers(停止一个或多个容器) top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers wait Block until one or more containers stop, then print their exit codes
推荐阅读
- Nginx为什么高效?一文搞明白Nginx核心原理
- Docker 一键帮你搞定数据开发环境
- 今日美股三大指数 美国道琼斯指数实时行情
- 美国最大的音乐节 世界三大音乐节是哪些
- 中国三大红茶产地祁门红茶 滇红茶 正山小种
- 龙井茶产地在哪儿 龙井茶三大产区介绍
- 日照绿茶核心产区
- 强大而实用的8款APP,一次性解决工作、学习、生活三大难题
- 华为新版鸿蒙OS系统3.0更新,三大重磅功能,使用更加流畅!
- 信阳毛尖的核心产区有哪几个