-
镜像:
Docker 镜像(Image),就相当于是一个 root 文件系统。
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
容器:
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。
每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。
仓库:
镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。
Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。 -
docker version
docker的版本详细信息,分客户端和服务器。
执行这个命令时,如果docker守护进程没有启动,则只会返回client的信息。server信息不会显示,会提示无法连接到docker daemon。
左至右理解上图:
最左侧是Docker客户端,即Docker命令行。我们可以运行各种Docker命令,比如构建镜像(docker build),下载镜像(docker pull),运行容器(docker run)。Docker命令行可以安装在各种操作系统上,例如Windows,MacOS或者Linux服务器。
中间是Docker主机,Docker守护进程运行在上面。Docker命令行可以轻松地连接远程的Docker主机(给定IP和端口即可)。而在MacOS与Windows上”运行”Docker时,Docker守护进程事实上运行在Linux虚拟机中。这里关键点在于,Docker守护进程和命令行可以运行在不同的主机上。
最右侧是Docker仓库,它也是Docker生态系统中的一份子。它是我们下载、上传、存储以及分享Docker镜像的地方。Docker仓库的细节与本文无关,因此不再赘述。
-
Docker info 可以查看运行的容器数量和镜像数量
-
Docker images 显示已经下载的镜像
-
docker ps -a -q
说明 -a表示列出所有容器(包括停止运行的容器),否则只会列出运行中的容器。 -q表示只返回容器ID信息,其它容器信息(如状态、对应的镜像等)不显示。 -
拉去镜像docker pull
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
• Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub。
• 仓库名:如之前所说,这里的仓库名是两段式名称,即 <用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像。
• 例如:docker pull ubuntu:16.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
镜像 ID 则是镜像的唯一标识,一个镜像可以对应多个标签。因此,在上面的例子中,我们可以看到 ubuntu:16.04 和 ubuntu:latest 拥有相同的 ID,因为它们对应的是同一个镜像。
镜像既没有仓库名,也没有标签,均为 <none>。:虚旋镜像
<none> <none> 00285df0df87 5 days ago 342 MB
产生原因:发布新版,标签转移,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除。
docker image prune -
删除本地镜像
docker image rm [选项] <镜像1> [<镜像2> ...]
容器是以镜像为基础,再加一层容器存储层,组成这样的多层存储结构去运行的。因此该镜像如果被这个容器所依赖的,那么删除镜像必然会导致故障。
如果这些容器是不需要的,应该先将它们删除,然后再来删除镜像。 -
Commit
$ docker run --name webserver -d -p 80:80 nginx
这条命令会用 nginx 镜像启动一个容器,命名为 webserver,并且映射了 80 端口,这样我们可以用浏览器去访问这个 nginx 服务器。虚拟机的话直接输入虚拟机ip地址即可。例如我的虚拟机:http://172.30.84.93/
当我们运行一个容器的时候(如果不使用卷的话),我们做的任何文件修改都会被记录于容器存储层里。而 Docker 提供了一个 docker commit 命令,可以将容器的存储层保存下来成为镜像。 -
docker container rm trusting_newton 删除已经停止运行的容器
用 docker container ls -a 命令可以查看所有已经创建的包括终止状态的容器,如果数量太多要一个个删除可能会很麻烦,用下面的命令可以清理掉所有处于终止状态的容器。
$ docker container prune -
Docker search name搜索镜像
网友评论