docker怎么用

面向初学者的Docker基本命令指南。这篇详细的Docker教程覆盖了核心的Docker命令,比如,如何创建新容器、运行容器、删除容器等。另外,这篇教程也解释了如何从已有的容器构建你自己的Docker

面向初学者的 Docker 基本命令指南。

这篇详细的 Docker 教程覆盖了核心的 Docker 命令,比如,如何创建新容器、运行容器、删除容器等。另外,这篇教程也解释了如何从已有的容器构建你自己的 Docker 镜像,如何移除容器和镜像。言归正传,现在开始 Docker 的基本用法。

Docker 安装步骤

在 AlmaLinux、CentOS、Rocky Linux 上 安装 Docker Engine 和 Docker Compose

如何在 Ubuntu 上 安装 Docker 和 Docker Compose

什么是 Docker 镜像和 Docker 容器?

在开始 Docker 之前,我先说明一下 Docker 镜像和 Docker 容器是什么。

Docker 镜像是一个描述容器如何运行的的文件,Docker 容器是 Docker 镜像在运行或被终止时的一个阶段。

容器和主机上的其他文件是隔离的。

当我们运行一个 Docker 容器的时候,它会使用一个被隔离出来的文件系统,这个文件系统是由一个 Docker 镜像提供的。Docker 镜像包含了运行应用程序所需要的一切东西 - 所有的依赖、配置、脚本、二进制文件等等。

镜像也包含容器所需要的其他配置项,比如说环境变量、默认运行的命令,以及其他元数据。

Linux 下的 Docker 入门

我们可以从叫做 Docker hub的 Docker 官方库获得镜像,或者我们也可以制作自己的镜像。

有些人可能不清楚,Docker hub 是一个线上的中心化仓库,Docker 用户们在上面构建、测试、然后保存他们的 Docker 镜像。Docker hub 有数以万计的 Docker 镜像,而且这个数字还在每天增长。

你可以从命令行通过 ``docker search` 命令搜索任意 Docker 镜像。

比如要搜索基于 AlpineLinux 的 Docker 镜像,运行:

$ sudo docker search alpine

输出结果:

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

$ sudo docker search ubuntu

你还可以搜索其他任意的应用,比如 Nginx,像下面这样:

$ sudo docker search nginx

Docker hub 有各种各样的镜像。你能在 Docker hub 上找到各种已构建好的 Docker 镜像,比如说操作系统、应用,或者多个应用的合体(比如 LAMP 栈)。

如果你找的东西不在上面,你还可以构建一个镜像,然后通过 Docker hub 向其他人开放,或者只是自己用。

从终端运行下面的命令可以下载 Ubuntu OS 的 Docker 镜像:

$ sudo docker pull ubuntu

上面的这个命令会从 Docker hub 下载最新的 Ubuntu 镜像。

输出结果:

Using default tag: latestlatest: Pulling from library/ubuntu405f018f9d1d: Pull completeDigest: sha256:b6b83d3c331794420340093eb706a6f152d9c1fa51b262d9bf34594887c2c7acStatus: Downloaded newer image for ubuntu:latestdocker.io/library/ubuntu:latest

你也可以用下面的命令下载指定版本的 Ubuntu 镜像:

$ sudo docker pull ubuntu:20.04

Docker 允许我们下载任何镜像,并且在那个镜像上创建容器,这些操作与主机的操作系统无关。

比如要下载 Alpine 系统的镜像,运行:

$ sudo docker pull alpine

所有已下载的 Docker 镜像都保存在 var/lib/docker

要查看所有已下载的 Docker 镜像,运行:

$ sudo docker images

输出结果:

REPOSITORY TAG IMAGE ID CREATED SIZEubuntu latest27941809078c 3 weeks ago 77.8MBubuntu 20.04 20fffa419e3a 3 weeks ago 72.8MBalpine lateste66264b98777 5 weeks ago 5.52MB

从上面可以看出来,我已经下载了三个 Docker 镜像 - Ubuntu latest、Ubuntu 20.04 和 Alpine Linux。

现在,我们看一下接下来如何从下载的镜像启动或者运行容器。

有两种方法我们可以启动一个容器 - 使用 Docker 镜像的标签TAG 或者 镜像 IDImage ID。

标签指的是一个特定的镜像快照,镜像 IDImage ID 是那个镜像对应的唯一识别码。

可以查看下面这个截图:

从上面的解脱可以看到,标签是 latest

20.04

27941809078c

20fffa419e3a

而 e66264b98777

下载选择好的 Docker 镜像后,运行下面的命令来启动 Docker 容器,并且通过它的标签进行连接。

$ sudo docker run -t -i ubuntu:latest /bin/bash

或者。

$ sudo docker run -it ubuntu:latest /bin/bash

这里。

-t

-i

ubuntu:latest

latest

bin/bash

启动容器后,会自动进入容器的 shell(命令行):

基于最新 Ubuntu 镜像的容器现在已经启动了。所有的新容器都会被赋予一个名字和唯一的 ID。从上面的输出可以看到,那个 Ubuntu 容器的 ID 是 2f2a5b826762

现在就可以在容器里面工作了。当你完成容器内的工作后,你可以回到主机操作系统的终端(在我这个例子中,操作系统是 Ubuntu 22.04 LTS)而不需要关掉容器(客户机)。

使用 CTRL+P

CTRL+Q

现在,你就回到了你原来的主机的终端窗口。请注意,容器还在后台运行中,我们并没有关掉它。

另一种启动容器并且连接进去的方式是通过使用镜像 ID,像下面这样:

$ sudo docker run -it 20fffa419e3a /bin/bash

这里。

20fffa419e3a

按 CTRL+P

CTRL+Q

在前面的小结中,我们启动了一个容器并且立刻连接了进去。然后当容器中的工作结束后,我们从容器中脱离了出来。

你也可以在脱离模式(不需要自动连接进去)中启动容器。

在后台运行一个容器,输入命令:

$ sudo docker run -it -d alpine:latest

输出结果:

上面输出结果的前 12 字符代表的是容器的 ID。

通过 docker ps

$ sudo docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESd74f2ceb5f3a alpine:latest "/bin/sh" 3 seconds ago Up 2 seconds zen_pascal

从上面个的输出结果中可以看到,我们创建了一个 Alpine 容器,但是还没有连接进去。

如果你想连接进去,很简单,运行:

$ sudo docker attach d74f2ceb5f3a

查看运行中的容器,运行下面的命令:

$ sudo docker ps

输出结果:

这里。

f7e04eed577e

2f2a5b826762

brave_mclean

2f2a5b826762

hungry_leavitt

docker怎么用

注意:请注意容器 ID 和 Docker 镜像 ID 是不同的。

列出所有可用的(运行或者停止)容器,运行:

$ sudo docker ps -a

首先,通过 docker ps

$ sudo docker ps

然后,运行 docker attach

$ sudo docker attach

比如像下面这样,我要连接到 ID 为 f7e04eed577e

$ sudo docker attach f7e04eed577e

你也可以通过使用它的名字连接到一个容器。

$ sudo docker attach brave_mclean

现在你就登录到这个容器了。

想要从容器脱离,只要按 CTRL+P

CTRL+Q

你可以使用容器的名字或 ID 来启动,重启,暂停或者终止一个 Docker 容器。

首先,通过 docker ps -a

现在,通过使用 docker start

$ sudo docker start modest_cray

$ sudo docker start 10615254bb45

用空格隔开,就可以启动多个容器,像下面这样:

$ sudo docker start 24b5ee8c3d3a 56faac6d20ad d74f2ceb5f3a

优雅的重启一个运行中的容器,运行:

$ sudo docker start 10615254bb45

暂停一个运行中的容器:

$ sudo docker pause 10615254bb45

把暂停的容器恢复过来:

$ sudo docker unpause 10615254bb45

直到其它容器都停止前,阻塞一个容器:

$ sudo docker wait 10615254bb45

我们可以很容易地通过使用它的名字或 ID 来终止一个容器。如果你已经在容器的 shell 里了,只需要运行下面的命令就可以非常简单的终止:

# exit

你也可以使用下面的命令从 Docker 的主机系统中终止容器:

$ sudo docker stop 10615254bb45

用空格隔开,你可以退出多个容器,像下面这样。

$ sudo docker stop 35b5ee8c3d3a 10615254bb45

在退出容器之后,通过列出所有容器的命令来确保它确实被终止了:

$ sudo docker ps

docker stop

通过给一个运行中的容器发送 SIGKILL

$ sudo docker kill 10615254bb45

也许你想测试一个容器,然后当你完成在容器中的工作就把它删掉。如果是这样,通过使用 --rm

$ sudo docker run -it --rm debian:latest

当你从容器中退出,它会自动被删掉。

从上面的结果可以看到,我先创建了一个新的 Debian 容器。当我退出这个容器的时候,它就被自动删掉了。docker ps -a

如果你再看一下之前命令的输出结果,当你启动一个容器的时候,每个容器都被赋予了一个随机的名字。如果你不命名你的容器,Docker 会自动替你给他们命名。

现在看一下下面的例子:

$ sudo docker run -it -d alpine:latest2af79e97a825c91bf374b4862b9e7c22fc22acd1598005e8bea3439805ec335d

$ sudo docker run -it -d alpine:latest80b53b7e661d33696b65c78267fc3f067b6100799c925910db4721963e3fae0a

$ sudo docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES80b53b7e661d alpine:latest "/bin/sh" 3 seconds ago Up 2 seconds bold_margulis2af79e97a825 alpine:latest "/bin/sh" 6 seconds ago Up 5 seconds recursing_taussig

从上面的结果可以看到,尽管我用同一个 Docker 镜像创建了两个容器,它们获得了不同的 ID 和名字。

如果你想给容器赋一个不变的名字,使用 --name

$ sudo docker run -it -d --name ostechnix_alpine alpine:latest

上面的命令会在脱离模式中创建一个叫做 ostechnix_alpine

我们看一下当前运行的容器列表:

$ sudo docker ps

输出结果:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES397111fac537 alpine:latest "/bin/sh" 2 seconds ago Up 2 seconds ostechnix_alpine80b53b7e661d alpine:latest "/bin/sh" 7 minutes ago Up 7 minutes bold_margulis2af79e97a825 alpine:latest "/bin/sh" 7 minutes ago Up 7 minutes recursing_taussig

注意到上面输出结果中的第一个容器的名字了吗?对了,我们给这个容器分配了一个自定义的名字(也就是 ostechnix_alpine

给容器分配自定义的名字可以给我们带来其他好处。只要看一下容器的名字,我们就能很容易的确定那个容器里面安装了什么。

Docker 不仅仅是下载和使用已存在的容器。你也可以创建自己的自定义 Docker 镜像。

现在我们开始一个 Ubuntu 容器:

$ sudo docker run -it ubuntu:latest

现在,你会进入到容器的 shell。

然后,在容器中,你可以安装任何的软件或者做你想做的事情。

比如,我们在容器中安装 Apache Web 服务器。

apt install apache2

相似地,在容器中,可以根据自己的需要安装和测试软件。

完成以后,从容器脱离(不要退出)回到主机系统的 shell。不要终止或者关闭容器。使用 CTRL+P

CTRL+Q

在你的 Docker 主机的终端,运行下面的命令来找到容器 ID:

$ sudo docker ps

最后,创建一个当前运行中的容器的 Docker 镜像,使用命令:

输出结果:

sha256:bc5e5f95ca592a3585fda2c5a40ec30c98e292046ef70390a2c3b7863cc6f7c1

这里。

377e6d77ebb5

ostechnix

ubuntu_apache

ostechnix

现在我们查看一下新的 Docker 镜像是否被创建了,使用下面的命令:

$ sudo docker images

输出结果:

ostechnix/ubuntu_apache

现在你就可以从这个新的 Docker 镜像创建行容器了,用之前的命令:

$ sudo docker run -it ostechnix/ubuntu_apache

当你在 Docker 容器中完成所有开发后,如果你不需要它们了,你可以删掉它们。

为此,首先我们需要终止运行中的容器。

用这个命令来看一下运行中的容器:

$ sudo docker ps

输出结果:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES377e6d77ebb5 ubuntu:latest "bash"7 minutes ago Up 7 minutes elegant_beaver

通过使用它的 ID 来终止运行中的容器:

$ sudo docker stop 377e6d77ebb5

现在,使用这个命令删除容器:

$ sudo docker rm 377e6d77ebb5

同样,如果不再需要所有的容器,关闭并删除它们。

一个一个的删除多个容器会是一项繁琐的工作。所以,我们可以把所有停止的容器一次性删掉,运行:

$ sudo docker container prune

敲 Y

WARNING! This will remove all stopped containers.Are you sure you want to continue? [y/N] yDeleted Containers:397111fac5374921b974721ee646b2d5fbae61ca9c6e8b90fbf47952f382a46b80b53b7e661d33696b65c78267fc3f067b6100799c925910db4721963e3fae0a[...]Total reclaimed space: 176B

这个命令只有在最新版中有效。

使用下面的命令来验证是否所有容器都被删除了:

$ sudo docker ps -a

如果看不到任何结果,说明所有容器被删掉了。

记住,在删除所有镜像之前,首先要删掉所有从那些镜像创建的容器。

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

列出所有下载的 Docker 镜像:

$ sudo docker images

输出结果:

REPOSITORYTAG IMAGE ID CREATEDSIZEostechnix/ubuntu_apache latestbc5e5f95ca59 14 minutes ago 229MBdebianlatestd2780094a226 11 days ago124MBubuntulatest27941809078c 3 weeks ago77.8MBubuntu20.04 20fffa419e3a 3 weeks ago72.8MBalpinelateste66264b98777 5 weeks ago5.52MB

从上面可以看到,在我们的主机上有 5 个 Docker 镜像。

通过使用镜像 ID 来删掉它们:

$ sudo docker rmi ce5aa74a48f1

输出结果:

Untagged: ostechnix/ubuntu_apache:latestDeleted: sha256:bc5e5f95ca592a3585fda2c5a40ec30c98e292046ef70390a2c3b7863cc6f7c1Deleted: sha256:a8e4797160a2b2d33d8bd1bd67e008260c022b3a53fbcc198b2b74d9eae5961d

同样,删除其他所有 Docker 镜像。

删掉所有未运行的容器、所有镜像、构建的缓存、所有网络,运行:

$ sudo docker system prune -a

使用这个命令的时候要注意,它会删掉所有没有使用的容器、网络、镜像(包括 挂起dangling和未使用unreferenced 的)

默认情况下,即使当前没有容器在使用磁盘卷volumes,为防止重要数据被删除,磁盘卷也不会被删除。

如果你想删掉所有东西,包括分配的卷,使用 --volumes

$ sudo docker system prune -a --volumes

Docker 问题汇总

如果 Docker 镜像正在被运行或停止的容器使用,Docker 不会允许你删除这些镜像。

比如,当我尝试从一个以前的 Ubuntu 服务器上删除 ID 为 b72889fa879c

Error response from daemon: conflict: unable to delete b72889fa879c (must be forced) - image is being used by stopped container dde4dd285377

这是因为你想删除的 Docker 镜像正在被另一个容器使用。

所以,我们先查看一下运行中的容器,使用命令:

$ sudo docker ps

输出结果:

噢,没有运行中的容器。

我们在看一下所有的容器(运行和停止的),用这个命令:

$ sudo docker ps -a

输出结果:

可以看到,仍然有停止的容器在使用其中一个 Docker 镜像。所以,我们先把所有容器删掉。

比如:

$ sudo docker rm 12e892156219

类似地,向上面那样,用对应容器的 ID 将它们都删除。

当把所有容器删掉后,移除掉 Docker 镜像。

比如:

$ sudo docker rmi b72889fa879c

就这么简单。现在确认是否还有其他 Docker 镜像在主机上,使用命令:

$ sudo docker images

你现在应该不再有任何 docker 镜像了。

总结

在这篇全面的 Docker 入门教程中,我们解释了 Docker 的基本操作,比如创建、运行、搜索、删除容器,还有从 Docker 镜像构建你自己的容器。同时,我们也解释了如何在不需要 Docker 容器和镜像的时候删除它们。

希望你现在对 Docker 的使用有一个基本的了解。

相关资料

Docker 官网

Docker 文档

via:

上一篇 2023年02月09 10:40
下一篇 2023年02月08 04:44

相关推荐

  • 软件闪退怎么办,软件闪退有什么解决方法

    我们有时候会遇到手机软件无法打开或者突然闪退、黑屏。虽然稍微等待一两分钟,又或重启一下就可以继续正常使用,但你是否好奇过,app为什么会闪退呢?今天老猿跟大家讲讲其中的原因,软件闪退有什么解决方法,并

    2023年02月11 203
  • 学习机多少钱

    课程资源方面,预置了中学、小学课程应用,足不出户就可以享受海量精品学习资源,30000+同步教材课程任意看,深度适配全网500家教育主流APP,Vipkid、学而思培优、火花思维、Gogotalk、作

    2023年03月03 264
  • 腾讯电话人工服务电话多少,腾讯到底有没有人工客服电话

    腾讯天游科技客服服务热线:用心服务,解决客户问题,真诚沟通,热情,耐心,敬业。我们追求「安全性」、「舒适性」、「方便性」、提供健康环保的商品。我们在「热能资源」与「人类生活」的调和方面,积累所有技术知

    2023年02月19 222
  • qq群解散了怎么恢复,用手机怎么恢复qq群

    端午假期前,扬州江苏油田公安分局河西油田派出所接到市民王老先生报警,称其遭遇了诈骗。王老先生称,他今年六十多岁,很喜欢炒股,没事就在网上观看财经栏目和炒股知识。4月中旬,用手机怎么恢复qq群,王老先生

    2023年02月06 249
  • qq回执编号怎么用,qq回执编号怎么帮助好友验证

    提笔写这边文章时,心里请有些特别。就在不久之前,我最老的一个QQ,在我设置了电脑登录需手机验证,手机登录需设备验证的情况下,被盗了。好在最后找回来了,也没造成非常大的损失。接下来,说一下我是怎么找回来

    2023年02月02 302
  • 苹果内存怎么清理,iOS所占内存能清理吗

    苹果手机的内存相较于华为、三星,一直算比较小的,iOS所占内存能清理吗,特别是早期的iPhone6、iPhone7等内存,最小的仅有16G。要知道,1分钟左右的高清视频,也就是手机正常拍摄的视频,大概

    2023年02月11 294
  • 怎么删除应用,手机上卸载不掉的软件怎样卸载

    当手机出现卡顿时。我们一般会选择将手机中。使用频率不高的APP卸载。以清理出内存空间。很多人卸载APP的方式是。在手机桌面长按APP图标。1、首先在手机主页面长按需要移除的应用,然后点击移除App。2

    2023年02月09 206
  • 怎么查看网页源代码,如何看懂网页源代码

    网页源代码是什么?网站源码,也称源代码,如何看懂网页源代码,源程序,是指未编译的文本代码或一个网站的全部源码文件,是一系列人类可读的计算机语言指令。通过浏览器或服务器翻译后才是用户最终看到的效果。如何

    2023年02月05 225
  • 谷歌怎么用,谷歌浏览器怎样才能正常使用

    1、下载谷歌浏览器,谷歌浏览器怎样才能正常使用,大家可以去谷歌官网下载,对于已经安装过谷歌浏览器的同学可以跳过此步骤,以为需要用谷歌浏览器安装插件。2、下载一个谷歌的插件,谷歌浏览器就是通过这个插件来

    2023年02月03 283
  • ipad2怎么升级系统,苹果平板2怎么升级系统

    你的iPad升级到iPadOS16了吗?新的UI设计、新的功能体验,虽然新系统整体流畅度提高了,但也出现了不少BUG。1、下载对应iPadmini2的iOS8.0.2固件2、将iPadmini2连接电

    2023年02月01 210
  • 网络诈骗多少钱立案

    现如今,网络诈骗层出不穷,被网络诈骗的人数日益增多,被诈骗的金额也不等。为了保护我们的权益,大多数人都采取报警这一方式,警方也对这类案件有着自己的立案标准。那么,网络诈骗数额立案标准是怎么样的呢?一、

    2023年03月01 273
  • 苹果xsmax多少钱,苹果xsmax三大缺点

    IT之家9月13日消息苹果公司已宣布推出其下一代iPhone,其中一款是迄今为止最大的iPhone手机。iPhoneXs和iPhoneXsMax看起来与它们的前辈iPhone几乎完全相同。iPhone

    2023年02月26 220
  • 怎么不用迅雷下载

    FreeDownloadManager1迅雷是一直在作死的道路上越走越远,于是大家都纷纷寻找它的替代品。1、配置中性---我的下载---监视设置去掉对应的勾选2、确认目前使用的浏览器是否可以设置迅雷为

    2023年02月04 305
关注微信