获取镜像的命令: docker pull, 格式为:
Docker 镜像仓库地址: 地址的格式⼀般是 <域名/IP>[:端口号], 默认地址是 Docker Hub。仓库名: 这里的仓库名是两段式名称, 即 <用户名>/<软件名>。 对于 Docker Hub, 如果不给出用户名,则默认为 library, 也就是官方镜像。 比如:
上面的命令中没有给出 Docker 镜像仓库地址, 因此将会从 Docker Hub 获取镜像。 而镜像名称是ubuntu:18.04, 因此将会获取官方镜像 library/ubuntu 仓库中标签为 18.04 的镜像。 从下载过程中可以看到我们之前提及的分层存储的概念, 镜像是由多层存储所构成。下载也是一层层的去下载,并非单一文件。 下载过程中给出了每⼀层的 ID 的前12位。并且下载结束后, 给出该镜像完整的sha256 的摘要,以确保下载一致性。
有了镜像后, 我们就能够以这个镜像为基础启动并运行一个容器。以上面的 ubuntu:18.04 为例, 如果打算启动里面的 bash 并且进行交互式操作的话,可以执行下面的命令。
关于上面启动容器中的参数解释
进⼊容器后,可以在 Shell下操作,执行任何所需的命令。这里执行了 cat /etc/osrelease ,这是 Linux 常用的查看当前系统版本的命令,从返回的结果可以看到容器内是 Ubuntu18.04.4 LTS 系统。最后我们通过 exit 退出了这个容器。
以下两条命令都可以列出镜像
列表包含了仓库名、标签、镜像ID、创建时间以及所占用的空间。镜像 ID 则是镜像的唯一标识,一个镜像可以对应多个标签。
docker image ls 列表中的镜像体积总和并非是所有镜像实际硬盘消耗。由于 Docker 镜像是多层存储结构,并且可以继承、复用,因此不同镜像可能会因为使用相同的基础镜像,从而拥有共同的层。由于Docker 使用 Union FS ,相同的层只需要保存⼀份即可, 因此实际镜像硬盘占用空间很可能要比这个列表镜像大小的总和要小的多。
通过以下命令来便捷的查看镜像、容器、数据卷所占用的空间。
以下是两种启动方式,一个是直接输出,一个是交互模式
当利用 docker run 来创建容器时, Docker 在后台运行的标准操作包括:检查本地是否存在指定的镜像, 不存在就从公有仓库下载利用镜像创建并启动⼀个容器分配一个文件系统, 并在只读的镜像层外面挂载一层可读写层从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去从地址池配置一个 ip 地址给容器执行用户指定的应用程序执行完毕后容器被终止。
可以利用docker container start命令,直接将⼀个已经终止的容器启动运行。
容器的核心为所执行的应用程序,所需要的资源都是应⽤程序运行所必需的。可以在伪终端中利用 ps 或 top 来查看进程信息。
容器中仅运行了指定的 bash 应用。这种特点使得 Docker对资源的利用率极高,是货真价实的轻量级虚拟化。
更多的时候需要让docker在后台运行,可以通过-d参数来实现,输出结果可以用docker logs查看。
也可以通过 docker container ls 命令来查看容器信息
可以使用 docker container stop 来终止一个运行中的容器。此外,当 Docker 容器中指定的应用终结时,容器也自动终止。
终止之前先查看一下运行的容器,-a参数可以不加,加上包括已经终止的容器。
下面停掉第一个
再次查看,显示已经终止。
用exec进入容器
在使用 -d 参数时,容器启动后会进入后台。某些时候需要进入容器进行操作: exec 命令 -i -t 参数。只用 -i 参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然可以返回。当 -i -t 参数⼀起使用时,则可以看到我们熟悉的 Linux 命令提示符。
可以使用 docker container rm 来删除一个处于终止状态的容器。
其格式为:
或者
或者用 ID、 镜像名、 摘要删除镜像 其中, <镜像> 可以是镜像短 ID、 镜像长 ID、 镜像名或者镜像摘要。 比如我们有这么一些镜像:
我们可以用镜像的完整ID,也称为长ID,来删除镜像。使用脚本的时候可能会用长 ID,但是人工输入就太累了,所以更多的时候是用 短ID 来删除镜像。docker image ls 默认列出的就已经是短 ID了,一般取前3个字符以上,只要足够区分于别的镜像就可以了。比如这里,如果我们要删除redis:alpine镜像,可以执行:
演示前,我们先拉取一个redis:alpine镜像
这里有两个镜像
这里只有一个镜像了
也可以用镜像名, 也就是 <仓库名>:<标签>, 来删除镜像。
镜像是容器的基础,每次执行 docker run的时候都会指定哪个镜像作为容器运行的基础。
当dockerhub上的镜像无法直接满足需求时, 就需要定制这些镜像 。
下面以构建WEB服务器为例
上面的命令会用nginx 镜像启动⼀个容器,命名为webserver,并且映射了80端口。
访问如下:
进入容器,对WEB页面进行修改
刷新页面
可以用下列命令查看具体的改动
将新修改的容器保存为镜像
接着查看新的镜像
查看镜像的变化
最后运行这个镜像,指定端口为81
最后总结:
不要使用docker commit 定制镜像, 定制镜像应该使用 Dockerfile 来完成 。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。