docker镜像 | docker镜像制作ubuntu 19
Docker 镜像简介
Docker 镜像由一个或多个只读层组成,其中包括我们的应用程序代码、库和运行应用程序所需的依赖项。换句话说,镜像是不可变的文件,这意味着我们不能直接对现有镜像进行更改;要么我们需要重写 Dockerfile 并使用新的 Dockerfile 重新构建 Docker 镜像,要么使用该镜像运行一个容器,然后在容器内进行更改并将正在运行的容器作为 Docker 镜像提交。hub.docker.com 上有 Ubuntu、CentOS、nginx、nodejs 等流行操作系统和软件的官方镜像,hub.docker.com 是 Docker 提供的 Docker 镜像的公共存储库。任何人都可以从中提取 Docker 镜像;但是,您必须在 hub.docker.com 上拥有一个帐户才能将镜像推送到 hub.docker.com。
docker镜像制作ubuntu
如上所述,一个图像由多个层组成;让我们通过一个例子来理解它。我们想创建我们自己的 nginx Docker 镜像。它将包括以下层: –
- 基本操作系统镜像(例如 Ubuntu)
- 更新基础镜像
- 在 Ubuntu 上安装 nginx
- 配置 CMD 或入口点以在使用此镜像创建容器运行 nginx。
语法
docker build -t <name of the docker image>:<tag> <path of the Dockerfile>
例子
docker build -t my_nginx .
以下是docker通过dockerfile构建镜像命令: –
解释
上面的命令将构建一个名为 my_nginx 的新镜像,守护进程认为 ‘latest’ 标签没有指定,并检查 Dockerfile 的当前工作目录。
- 它将首先下载一个 ubuntu 镜像并使用 ubuntu 镜像运行一个中间容器
- 更新 ubuntu 镜像并提交一个新的中间镜像并移除中间容器。
- 使用在步骤 2 中提交的镜像运行一个新的中间容器。
- 相同的过程将一直持续到 Dockerfile 的最后一行。
- 最后提交的 Image 将是最终的 Image,守护进程会给它一个名字和标签。
以下是管理镜像的语法: –
docker image <command>
以下是可以与 Docker Image 一起使用的所有命令的截图: –
docker查看镜像命令
用于显示本地主机上可用镜像的命令,以下所有命令都将为我们提供相同的输出: –
docker image ls
docker images
docker image list
我们可以将多个选项与上述命令一起使用。例如,如果我们想列出所有镜像,包括中间镜像,我们需要在上面的命令中使用 -a 选项:
以下是可用于显示镜像的所有选项的参数: –
docker镜像下载命令
我们使用 pull 命令在本地下载镜像。
语法
docker pull <image_name>
例子
docker pull ubuntu
上面的命令将把 ubuntu Image 从 hub.docker.com 拉到 localhost。它将拉取具有最新标签的镜像,如下面的快照所示: –
如果我们必须下载任何镜像的特定标签或版本,我们需要在拉取镜像时指定标签。
语法
docker pull <image_name>:tag
例子
docker pull ubuntu:xenial
上面的例子将下载带有 xenial 标签的 Ubuntu 镜像,如下面的快照所示:
如果我们有一个私有仓库,那么我们需要提供仓库名称,很可能是运行仓库容器的主机名。让我们通过一个例子来理解它。
1. 首先,我们需要使用以下命令创建一个私有仓库: –
docker run -d -p 5000:5000 --restart always --name registry registry:2
说明: –上面的命令创建了一个带有镜像仓库的容器,并将它暴露给主机上和容器内部的 5000 端口,并将重启选项设置为始终,这意味着如果容器不在,守护进程每次都会重启容器运行。
2. 使用 localhost:5000 重新标记现有的 Docker 镜像,如下所示:
docker image tag ubuntu localhost:5000/ubuntu
说明:– 以上命令使用 localhost:5000/ubuntu 重新标记退出的 ubuntu 镜像,因为我们已将容器暴露给 5000 端口上的 localhost。
注意: – Docker 镜像名称必须以 localhost:5000 开头,在 / 之后我们可以随意命名,这里我们保留 ubuntu 本身。
3. 让我们将镜像推送到我们的私有仓库: –
docker push localhost:5000/ubuntu
说明: – 上述命令将新标记的 Docker 镜像推送到我们作为容器运行的私有仓库中心。
4. 现在我们删除本地可用的 Docker 镜像:
docker image rm localhost:5000/ubuntu
说明: –上面的命令将取消标记我们在上面步骤中刚刚标记的 ubuntu 镜像;但是,我们已经将此映像推送到我们的私有仓库,因此我们可以使用“localhost:5000/ubuntu”运行容器。
5. 使用 ‘localhost:5000/ubuntu’ 运行一个容器,如下所示:
docker run -d localhost:5000/ubuntu sleep 3000
说明: –在上面的快照中,您可以看到守护进程正在从 ubuntu 而不是 library/ubuntu 拉取镜像。以下是当前正在运行的容器。我们可以看到其中一个正在使用“localhost:5000/ubuntu”镜像运行。
docker镜像删除命令
如果没有任何容器引用,我们可以使用“rm”命令删除任何 Docker 镜像;但是,我们可以强制删除镜像,即使它被任何容器引用。
语法
docker image rm <image_name>
或者
docker image rm <image_id>
例子
docker image rm alpine
docker image rm 82f67be598eb
说明: –在上面的快照中,已删除带有最新标记的 alpine Docker 镜像。请记住,如果我们不指定标签,它将采用最新的标签。在下面的快照中,我们有一个标签为 3.9 的 alpine 镜像;如果我们尝试使用命令“docker image rm alpine”删除它,它会抛出错误“No such image: alpine”;我们需要指定标签或使用镜像 ID 删除,如下所示: –
docker image rm alpine:3.9
或者
docker image rm 82f67be598eb
如上所述,我们可以删除镜像,即使它被任何可能处于运行或激发状态的容器引用。我们必须使用 -f 来强制删除任何 Docker 镜像,如下所示: –
语法
docker image rm -f <image_name>or<image_id>
例子
docker image rm -f ubuntu
在上面的快照中,我们可以看到有一个容器引用了 ubuntu 镜像,如果我们尝试简单地删除该镜像,守护进程会提示冲突;但是,在下一个命令中,使用 -f 选项能够删除 ubuntu 镜像。
好处
1. 可移植性 -镜像是可移植的,因为它包含应用程序所需的所有依赖项和库,因此它可以在任何平台(如 Linux、Windows、云甚至 Raspberry Pi)上以完全相同的方式运行。
2. 轻量级——它有一个多层文件系统,使镜像非常轻量级,因为每一层都只包含与其他层的不同之处。
3. 一致性——镜像具有不可改变的强大特性;这就是所谓的不变性。它在测试任何应用程序的新功能时非常有用,因为它不会破坏我们现有的功能。如果出现问题,我们可以使用现有镜像再次运行应用程序,因为它没有改变。不变性还提供了一致性,这意味着如果应用程序在测试环境中按预期运行,那么它也将在其他环境中以相同的方式运行。
4. 共享 –我们可以将镜像存储在仓库中。我们有一个由 Docker 本身提供的公共仓库 hub.docker.com;但是,我们可以在 hub.docker.com 上创建我们自己的仓库,并根据需要将我们的镜像加密。我们也可以创建自己的私有仓库。它可以帮助我们更轻松地共享镜像
5. 安全——Docker 镜像是安全的。每个镜像都有其哈希值。我们还可以对镜像进行数字签名,因此如果有人尝试使用未签名的镜像运行容器,守护进程将不会启动容器。
结论
Docker 镜像是 Docker 的核心对象。我们无法想象没有镜像的 Docker。这是我们在安装 Docker 后需要与 Docker 一起工作的第一件事。镜像类似于虚拟机的模板或快照,但不限于此,因为它比模板或快照具有更多优势。
推荐文章
这是 Docker 镜像的指南。在这里,我们讨论docker镜像制作,以及docker如何查看镜像、docker镜像下载和docker 镜像删除。
本文是docker快速入门教程系列的一部分您也可以查看以了解更多信息 –
常见问题FAQ
- 程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
- 请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!