linux docker镜像信息,Docker 入门指南 | Linux 中国

news/2024/11/24 20:51:10/

原标题:Docker 入门指南 | Linux 中国

a958b96c74a11c30b97d75f7b514aa8f.png

该教程包含了如何创建一个新的 Docker 容器,如何运行该容器,如何从现有的 Docker 容器中创建自己的 Docker 镜像等 Docker 的一些基础知识、操作。

-- Sk

在我们的上一个教程中,我们已经了解,和如何在 。今天,我们将会了解 Docker 的一些基础用法。该教程包含了如何创建一个新的 Docker 容器,如何运行该容器,如何从现有的 Docker 容器中创建自己的 Docker 镜像等 Docker 的一些基础知识、操作。所有步骤均在 Ubuntu 18.04 LTS server 版本下测试通过。

入门指南

在开始指南之前,不要混淆 Docker 镜像和 Docker 容器这两个概念。在之前的教程中,我就解释过,Docker 镜像是决定 Docker 容器行为的一个文件,Docker 容器则是 Docker 镜像的运行态或停止态。(LCTT 译注:在 macOS 下使用 Docker 终端时,不需要加 sudo)

1、搜索 Docker 镜像

我们可以从 Docker 仓库中获取镜像,例如 Docker hub,或者自己创建镜像。这里解释一下,Docker hub 是一个云服务器,用来提供给 Docker 的用户们创建、测试,和保存他们的镜像。

Docker hub 拥有成千上万个 Docker 镜像文件。你可以通过 docker search命令在这里搜索任何你想要的镜像。

例如,搜索一个基于 Ubuntu 的镜像文件,只需要运行:

$sudodocker search ubuntu

示例输出:

5fd8ac370bd3b15c315254d30f32f12a.png

搜索基于 CentOS 的镜像,运行:

$sudodocker search centos

搜索 AWS 的镜像,运行:

$sudodocker search aws

搜索 WordPress 的镜像:

$sudodocker search wordpress

Docker hub 拥有几乎所有种类的镜像,包含操作系统、程序和其他任意的类型,这些你都能在 Docker hub 上找到已经构建完的镜像。如果你在搜索时,无法找到你想要的镜像文件,你也可以自己构建一个,将其发布出去,或者仅供你自己使用。

2、下载 Docker 镜像

下载 Ubuntu 的镜像,你需要在终端运行以下命令:

$sudodocker pull ubuntu

这条命令将会从 Docker hub 下载最近一个版本的 Ubuntu 镜像文件。

示例输出:

Usingdefaulttag:latest

latest:Pullingfromlibrary/ubuntu

6abc03819f3e:Pullcomplete

05731e63f211:Pullcomplete

0bd67c50d6be:Pullcomplete

Digest:sha256:f08638ec7ddc90065187e7eabdfac3c96e5ff0f6b2f1762cf31a4f49b53000a5

Status:Downloadednewer imageforubuntu:latest

f03b9e8cb4fabfe02b25dcfb278a45b9.png

下载 Docker 镜像

你也可以下载指定版本的 Ubuntu 镜像。运行以下命令:

$ docker pull ubuntu:18.04

Docker 允许在任意的宿主机操作系统下,下载任意的镜像文件,并运行。

例如,下载 CentOS 镜像:

$sudodocker pull centos

所有下载的镜像文件,都被保存在 /var/lib/docker 文件夹下。(LCTT 译注:不同操作系统存放的文件夹并不是一致的,具体存放位置请在官方查询)

查看已经下载的镜像列表,可以使用以下命令:

$sudodocker images

示例输出:

REPOSITORY TAG IMAGE ID CREATED SIZE

ubuntu latest7698f282e52414hours ago69.9MB

centos latest9f38484d220f2months ago202MB

hello-world latest fce289e99eb94months ago1.84kB

正如你看到的那样,我已经下载了三个镜像文件:ubuntu、centos 和 hello-world。

现在,让我们继续,来看一下如何运行我们刚刚下载的镜像。

3、运行 Docker 镜像

运行一个容器有两种方法。我们可以使用标签或者是镜像 ID。标签指的是特定的镜像快照。镜像 ID 是指镜像的唯一标识。

正如上面结果中显示,latest 是所有镜像的一个标签。7698f282e524 是 Ubuntu Docker 镜像的镜像 ID,9f38484d220f是 CentOS 镜像的镜像 ID,fce289e99eb9 是 hello_world 镜像的 镜像 ID。

下载完 Docker 镜像之后,你可以通过下面的命令来使用其标签来启动:

$sudodocker run-t-i ubuntu:latest/bin/bash

在这条语句中:

◈ -t:在该容器中启动一个新的终端

◈ -i:通过容器中的标准输入流建立交互式连接

◈ ubuntu:latest:带有标签 latest 的 Ubuntu 容器

◈ /bin/bash:在新的容器中启动 BASH Shell

或者,你可以通过镜像 ID 来启动新的容器:

$sudodocker run-t-i7698f282e524/bin/bash

在这条语句里:

◈ 7698f282e524 — 镜像 ID

在启动容器之后,将会自动进入容器的 shell 中(注意看命令行的提示符)。

2de6abfd8ac37dc029aa606ab9143b70.png

Docker 容器的 Shell

如果想要退回到宿主机的终端(在这个例子中,对我来说,就是退回到 18.04 LTS),并且不中断该容器的执行,你可以按下 CTRL+P,再按下 CTRL+Q。现在,你就安全的返回到了你的宿主机系统中。需要注意的是,Docker 容器仍然在后台运行,我们并没有中断它。

可以通过下面的命令来查看正在运行的容器:

$sudodockerps

示例输出:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

32fc32ad0d54ubuntu:latest"/bin/bash"7minutes agoUp7minutes modest_jones

8dc9b1f2c8fa99f48180984ecf6bf4ae.png

列出正在运行的容器

可以看到:

◈ 32fc32ad0d54 – 容器 ID

◈ ubuntu:latest – Docker 镜像

需要注意的是,容器 ID 和 Docker 的镜像 ID是不同的。

可以通过以下命令查看所有正在运行和停止运行的容器:

$sudodockerps-a

在宿主机中断容器的执行:

$sudodocker stop

例如:

$sudodocker stop32fc32ad0d54

如果想要进入正在运行的容器中,你只需要运行:

$sudodocker attach32fc32ad0d54

正如你看到的,32fc32ad0d54 是一个容器的 ID。当你在容器中想要退出时,只需要在容器内的终端中输入命令:

#exit

你可以使用这个命令查看后台正在运行的容器:

$sudodockerps

4、构建自己的 Docker 镜像

Docker 不仅仅可以下载运行在线的容器,你也可以创建你的自己的容器。

想要创建自己的 Docker 镜像,你需要先运行一个你已经下载完的容器:

$sudodocker run-t-i ubuntu:latest/bin/bash

现在,你运行了一个容器,并且进入了该容器。然后,在该容器安装任意一个软件或做任何你想做的事情。

例如,我们在容器中安装一个 Apache web 服务器。

当你完成所有的操作,安装完所有的软件之后,你可以执行以下的命令来构建你自己的 Docker 镜像:

#apt update

#apt install apache2

同样的,在容器中安装和测试你想要安装的所有软件。

当你安装完毕之后,返回的宿主机的终端。记住,不要关闭容器。想要返回到宿主机而不中断容器。请按下CTRL+P,再按下 CTRL+Q。

从你的宿主机的终端中,运行以下命令如寻找容器的 ID:

$sudodockerps

最后,从一个正在运行的容器中创建 Docker 镜像:

$sudodocker commit3d24b3de0bfcostechnix/ubuntu_apache

示例输出:

sha256:ce5aa74a48f1e01ea312165887d30691a59caa0d99a2a4aa5116ae124f02f962

在这里:

◈ 3d24b3de0bfc — 指 Ubuntu 容器的 ID。

◈ ostechnix — 我们创建的容器的用户名称

◈ ubuntu_apache — 我们创建的镜像

让我们检查一下我们新创建的 Docker 镜像:

$sudodocker images

示例输出:

REPOSITORY TAG IMAGE ID CREATED SIZE

ostechnix/ubuntu_apache latest ce5aa74a48f1Abouta minute ago191MB

ubuntu latest7698f282e52415hours ago69.9MB

centos latest9f38484d220f2months ago202MB

hello-world latest fce289e99eb94months ago1.84kB

73c0a412546bebc27d7bb9a2fb30dc54.png

列出所有的 Docker 镜像

正如你看到的,这个新的镜像就是我们刚刚在本地系统上从运行的容器上创建的。

现在,你可以从这个镜像创建一个新的容器。

$sudodocker run-t-i ostechnix/ubuntu_apache/bin/bash

5、删除容器

如果你在 Docker 上的工作已经全部完成,你就可以删除那些你不需要的容器。

想要删除一个容器,首先,你需要停止该容器。

我们先来看一下正在运行的容器有哪些

$sudodockerps

示例输出:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

3d24b3de0bfcubuntu:latest"/bin/bash"28minutes agoUp28minutes goofy_easley

使用容器 ID 来停止该容器:

$sudodocker stop3d24b3de0bfc

现在,就可以删除该容器了。

$sudodockerrm3d24b3de0bfc

你就可以按照这样的方法来删除那些你不需要的容器了。

当需要删除的容器数量很多时,一个一个删除也是很麻烦的,我们可以直接删除所有的已经停止的容器。只需要运行:

$sudodocker container prune

按下 Y,来确认你的操作:

WARNING!Thiswill remove all stopped containers.

Areyou sure you want tocontinue?[y/N]y

DeletedContainers:

32fc32ad0d5445f2dfd0d46121251c7b5a2aea06bb22588fb2594ddbe46e6564

5ec614e0302061469ece212f0dba303c8fe99889389749e6220fe891997f38d0

Totalreclaimed space:5B

这个命令仅支持最新的 Docker。(LCTT 译注:仅支持 1.25 及以上版本的 Docker)

6、删除 Docker 镜像

当你删除了不要的 Docker 容器后,你也可以删除你不需要的 Docker 镜像。

列出已经下载的镜像:

$sudodocker images

示例输出:

REPOSITORY TAG IMAGE ID CREATED SIZE

ostechnix/ubuntu_apache latest ce5aa74a48f15minutes ago191MB

ubuntu latest7698f282e52415hours ago69.9MB

centos latest9f38484d220f2months ago202MB

hello-world latest fce289e99eb94months ago1.84kB

由上面的命令可以知道,在本地的系统中存在三个镜像。

使用镜像 ID 来删除镜像。

$sudodocekr rmi ce5aa74a48f1

示例输出:

Untagged:ostechnix/ubuntu_apache:latest

Deleted:sha256:ce5aa74a48f1e01ea312165887d30691a59caa0d99a2a4aa5116ae124f02f962

Deleted:sha256:d21c926f11a64b811dc75391bbe0191b50b8fe142419f7616b3cee70229f14cd

解决问题

Docker 禁止我们删除一个还在被容器使用的镜像。

例如,当我试图删除 Docker 镜像 b72889fa879c 时,我只能获得一个错误提示:

Errorresponsefromdaemon:conflict:unable todeleteb72889fa879c(must be forced)-imageisbeing used by stopped container dde4dd285377

这是因为这个 Docker 镜像正在被一个容器使用。

所以,我们来检查一个正在运行的容器:

$sudodockerps

示例输出:

2277b162c8a8a7ff934163ae62ff6cfe.png

注意,现在并没有正在运行的容器!!!

查看一下所有的容器(包含所有的正在运行和已经停止的容器):

$sudodocker pa-a

示例输出:

055170349308c2e17bd7edf78750f6fc.png

可以看到,仍然有一些已经停止的容器在使用这些镜像。

让我们把这些容器删除:

$sudodockerrm12e892156219

我们仍然使用容器 ID 来删除这些容器。

当我们删除了所有使用该镜像的容器之后,我们就可以删除 Docker 的镜像了。

例如:

$sudodocekr rmi b72889fa879c

我们再来检查一下本机存在的镜像:

$sudodocker images

想要知道更多的细节,请参阅本指南末尾给出的官方资源的链接或者在评论区进行留言。

这就是全部的教程了,希望你可以了解 Docker 的一些基础用法。

更多的教程马上就会到来,敬请关注。

作者: 选题: 译者: 校对:

本文由 原创编译, 荣誉推出返回搜狐,查看更多

责任编辑:


http://www.ppmy.cn/news/357496.html

相关文章

【云原生技术】容器编排学习(第五集)

1、系统环境 1.1 系统基本信息查看 // Linux查看版本当前操作系统内核信息 uname -a // Linux查看当前操作系统版本信息 cat /proc/version // Linux查看版本当前操作系统发行版信息 cat /etc/redhat-release1.2 系统配置 // 设置主机名 hostnamectl set-hostname foxk8s// …

vue2.6.10+element-ui2.15.8 实现多功能列表

一、效果 二、解决el-table标头和表格滑动抖动问题 element-ui2.15.9源码中有修改&#xff0c;但是element-ui2.15.9也有其他bug这里直接进行copy相关代码使用 创建table集成element-ui的el-table <script> // 继承自element-ui的table组件 import { Table } from elemen…

ttc error oracle,ORA-03137: TTC 协议内部错误

本帖最后由 87728854 于 2014-8-25 13:49 编辑 昨天通过OEM检查oracle,发现如下两条告警信息: 2014-08-25_132828.png (10.62 KB, 下载次数: 0) 2014-8-25 13:31 上传 分别点击相关条目后显示下图: 2014-08-25_132851.png (42.09 KB, 下载次数: 2) 2014-8-25 13:33 上传 201…

Fedora 17 U盘安装成功

为什么80%的码农都做不了架构师&#xff1f;>>> 硬盘装了一天的CentOS&#xff0c;失败了&#xff0c;各方请教也没找到原因。今天退而求其次&#xff0c;用U盘安装Fedora 17,居然一次成功&#xff0c;傻瓜似的安装过程如下&#xff1a; 准备&#xff1a; 我们需要…

CodeForce 774 div2 A-C,E题解

E. Power Board 思路 重复的数是从哪里来的&#xff1f;比如4 2 2 2^2 22, 那么 4 2 4^2 42 就会跟 ( 2 2 &#xff09; 2 (2^2&#xff09;^2 (22&#xff09;2 2 4 2^4 24 重复,所以可以看出&#xff0c;所有的重复&#xff0c;都是因为底数可以划分为某个数的k次幂造…

【平头哥蓝牙Mesh网关开发套件试用体验】PHY6220 蓝牙键盘

作者&#xff1a;robe PHY6220 开发板烧录此程序后会变成蓝牙键盘。 此程序是demo程序&#xff0c;跑通此工程的意义在于熟悉PHY6220开发流程&#xff0c;为后续项目开发做准备。 PHY6220 蓝牙键盘工程方法步骤&#xff1a; 打开剑池CDK开发环境创建工作目录创建工程&#xff…

Error: L6200E: Symbol xxx multiply defined (by adc_1.o and adc.o)的解决办法

问题&#xff1a; Keil MDK-ARM V5的工程&#xff0c;使用HAL库搭建的。 HAL库从STM32Cube FW_F1 V1.6.1升级到STM32Cube FW_F1 V1.7.0&#xff0c; 重新编译工程后提示有102条错误&#xff0c; 而原来的工程是能正确运行的。解决办法&#xff1a; 错误信息提示如下&#xff1…

Flutter网络请求框架Dio源码分析以及封装(二)--Cookie管理分析

Flutter网络请求框架Dio源码分析以及封装--Cookie管理分析 前言问题如何使用CookieJarCookieManagerPersistCookieJar总结 前言 上一篇文章我们简单分析了一下Dio发出请求时的大致工作流程&#xff0c;这个只是Dio最基本的功能&#xff0c;而且我们还没有分析走到httpClientA…