今天开始正式学习Docker,边学习边总结,任重而道远。
[toc]
格式:docker [image] pull NAME[:TAG]
例如:获取一个Ubuntu18.04系统的基础镜像:$ docker pull ubuntu:18.04
如果不显式指定TAG,则默认会选择latest标签,image指定镜像源,一般不用
pull子命令支持的选项:
下载镜像到本地后就可以随时使用该镜像了,例如利用该镜像创建一个容器,在其中运行bash应用,打印“Hello World”:
格式:docker images
或者docker image ls
在列出的信息中,可以看到几个字段:
images子命令支持的选项:
更多子命令可通过man docker-images
来查看。
格式:docker tag 旧标签 新标签
例如:添加一个新的myubuntu:latest镜像标签:
$ docker tag ubuntu:latest myubuntu:latest
再次使用docker images,可以看到多了一个myubuntu:latest标签的镜像,之后,用户就可以用新的标签来使用这个镜像了。
格式:docker [image] inspect 镜像标签
例如:docker [image] inspect ubuntu:18.04
结果返回一个JSON格式的消息,如果只要其中的一项内容,可以使用-f来指定。例如获取镜像的Id:
$ docker inspect -f .Id ubuntu:18.04 sha256:7698f282e5242af2b9d2291458d4e425c75b25b0008c1e058d66b717b4c06fa9
格式:docker history 镜像标签
例如:查看ubuntu:18.04镜像的创建过程:
$ docker history ubuntu:18.04
格式:docker search [option] keyword 支持的命令选项主要包括:
例如:搜索官方提供的带nginx关键字的镜像: docker search --filter=is-official=true nginx搜索所有收藏数超过4的、关键词包括tensorflow的镜像: docker search --filter=stars=4 tensorflow
格式:docker rmi IMAGE [IMAGE...]
或者docker image rm IMAGE [IMAGE...]
支持选项包括:
例如:删除myubuntu:latest镜像:
$ docker rmi myubuntu:latest
格式:docker rmi IMAGE-ID [IMAGE-ID...]
会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本身。注意,当有该镜像创建的容器存在时,镜像文件默认是无法删除的(docker ps -a
查看本机所有容器)。如果要强行删除,可以用 -f 选项,但是不推荐使用,正确的做法是先删除依赖该镜像的所有容器,再来删除镜像(docker rm 容器
删除指定容器)。
使用docker一段时间后,系统中可能会遗留一些临时的镜像文件,以及一些没有被使用的镜像,这时用到镜像清理命令。 格式:docker image prune 支持的选项包括:
格式:docker [container] commit [OPTIONS] CONTAINER [REPOSITORY [:TAG]] 主要选项包括:
格式:docker [image] import [OPTIONS] file|URL| - [REPOSITORY[:TAG]]
通过下载OpenVz提供的模板压缩包导入:
$ cat ubuntu-18.04-x86_64-minimal.tag.gz | docker import - ubuntu:18.04
Dockerfile是一个文本文件,利用给定的指令描述基于某个父镜像创建新镜像的过程。
格式:docker [image] save
该命令支持 -o、-output string参数,导出镜像到指定的文件中。
例如,导出本地的ubuntu:18.04镜像为文件ubuntu_18.04.tar:
$ docker save -o ubuntu_18.04.tar ubuntu:18.04
之后用户就可以通过复制ubuntu_18.04.tar文件将该镜像分享给他人。
格式:docker [image] load
支持 -i、-input string选项,从指定文件中读入镜像内容。
例如,从文件ubuntu_18.04.tar导入镜像到本地镜像列表:
$ docker load -i ubuntu_18.04.tar
格式:docker [image] push NAME[:TAG] | [REGISTRY_HOST[:REGISTRY_POST] / ] NAME [:TAG] 第一次上传时会提示输入登录信息或进行注册,之后登录信息会记录到本地的~/.docker目录下。
格式:docker [container] create
$ docker create -it ubuntu:latest 3fa6a10fb9243158d5673430f1930ef5b4b8af44875f9822a229d2442a9c415c
新建的容器处于停止状态,可以使用docker [container] start
命令来启动它。
由于容器是整个Docker技术栈的核心,create命令支持的选项十分复杂。选项主要包括以下几大类:与容器运行模式相关、与容器环境配置相关、与容器资源限制和安全保护相关。
格式:docker [container] start CONTAINER ID
可以通过docker ps
命令查看运行中的容器
格式:docker [container] run 等价于先执行docker create命令,再执行docker start命令。
$ docker run ubuntu /bin/echo ‘Hello World’ Hello World
利用run命令来创建并启动容器时,Docker在后台运行的标准操作包括:
通过添加 -d 参数来实现容器在后台以守护态形式运行。
$ docker run -d ubuntu /bin/sh -c “while true; do echo hello world; sleep 1; done” 171067c30ef818f79d82f173331e59e9ce2297857106c3fface447a90aa81fd3
容器启动后会返回一个唯一的id,通过docker ps
或docker container ls
来查看容器信息。
格式:docker [container] logs 支持的选项:
格式:docker [container] pause CONTAINER [CONTAINER…]
处于暂停状态的容器,可以使用docker [container] unpause CONTAINER [CONTAINER...]
命令来恢复到运行状态。
格式:docker [container] stop [-t | –time [=10]] [CONTAINER…]
该命令会首先向容器发送SIGTERM信号,等待一段超时时间(默认为10秒)后,再发送SIGKILL信号来终止容器。
还可以通过docker [container] kill
直接发送SIGKILL信号来强行终止容器。
此时可以通过docker container prune
命令清除掉所有处于停止状态的容器。
处于终止状态的容器,可以通过docker [container] start
命令来重新启动。
docker [container] restart
命令会将一个运行态的容器先终止,然后再重新启动。
在使用 -d 参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行操作,这个时候如果需要进入容器操作,就需要用到此命令。
格式:docker [container] attach 支持三个主要选项:
然而使用attach命令有时候并不方便。当多个窗口同时attach到同一个容器的时候,所有窗口都会同步显示;当某个窗口因命令阻塞时,其他窗口也无法执行操作了。
格式:docker [container] exec 比较重要的参数有:
格式:docker [container] rm 主要支持的选项:
容器的导入导出是为了实现容器从一个系统迁移到另外 一个系统。
导出容器:docker [container] export
-o 参数指定导出的tar文件名
导入容器:docker [container] import
docker load与docker import的区别和联系: 联系:docker load用来导入镜像存储文件到本地镜像库,docker import用来导入一个容器快照到本地镜像库。 区别:容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积更大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。