-
拉取镜像
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
Docker 镜像仓库地址:地址的格式一般是 <域名/IP
>[:端口号]
。默认地址是 Docker Hub,当然不要忘了Docker加速器的存在。
仓库名:如之前所说,这里的仓库名是两段式名称,即 <用户名>/<软件名>
。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像。
举例:
docker pull ubuntu:16.04
-
运行镜像
以ubuntu16.04为例
docker run -it --rm ubuntu:16.04 bash
上述命令说明:
-it
:这是两个参数,一个是-i
:交互式操作,一个是-t
终端。我们这里打算进入bash
执行一些命令并查看返回结果,因此我们需要交互式终端。--rm
:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动docker rm
。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用--rm
可以避免浪费空间。ubuntu:16.04
:这是指用ubuntu:16.04
镜像为基础来启动容器。bash
:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是bash
。
-
列出镜像
docker image ls
//或者
docker images
- 镜像大小的相关说明
如果仔细观察,会注意到,这里标识的所占用空间和在 Docker Hub 上看到的镜像大小不同。这是因为 Docker Hub 中显示的体积是压缩后的体积。在镜像下载和上传过程中镜像是保持着压缩状态的,因此 Docker Hub 所显示的大小是网络传输中更关心的流量大小。而 docker image ls
显示的是镜像下载到本地后,展开的大小,准确说,是展开后的各层所占空间的总和,因为镜像到本地后,查看空间的时候,更关心的是本地磁盘空间占用的大小。
另外一个需要注意的问题是,docker image ls
列表中的镜像体积总和并非是所有镜像实际硬盘消耗。由于 Docker 镜像是多层存储结构,并且可以继承、复用,因此不同镜像可能会因为使用相同的基础镜像,从而拥有共同的层。由于 Docker 使用 Union FS,相同的层只需要保存一份即可,因此实际镜像硬盘占用空间很可能要比这个列表镜像大小的总和要小的多。
- 虚悬镜像
由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为 <none>
的镜像,这就称之为虚悬镜像。除了 docker pull
可能导致这种情况,docker build
也同样可以导致这种现象。
一般来说,虚悬镜像已经失去了意义,所以可以使用以下命令进行删除:
//prune意为精简
docker image prune
注意,在镜像删除虚悬镜像之前,看其是否被其他容器占用,否则删除会失败!
-
删除镜像
docker image rm <镜像1> [<镜像2> ...]
//或者
docker rmi <镜像1> [<镜像2> ...]
-
容器的相关命令
//查看活跃容器
docker ps
//查看所有容器
docker ps -a
//删除容器
docker rm -f containerId [containerId]
//重启容器
docker restart 容器id
//停止容器
docker stop 容器id(or name)
//容器重命名
docker run -p 8080:8080 --name tomcat tomcat
//以守护态运行容器
docker run -p 8080:8080 --name tomcat -d tomcat
//删除一切未处于运行状态的容器
docker container prune
docker容器的隔离机制:沙箱隔离/沙盒隔离
docker run命令相当于面向对象编程的new,此时的容器与先前通过该镜像通过run命令创建的容器毫无关系。这与面向对象编程机制中的类与对象原理一模一样,可以相互验证。