快捷搜索:  汽车  科技

docker基础知识入门:Linux 下的 Docker

docker基础知识入门:Linux 下的 Docker现在,你就回到了你原来的主机的终端窗口。请注意,容器还在后台运行中,我们并没有关掉它。使用 CTRL P然后CTRL Q就可以从运行中的容器脱离(不需要关闭)。启动容器后,会自动进入容器的 shell(命令行):基于最新 Ubuntu 镜像的容器现在已经启动了。所有的新容器都会被赋予一个名字和唯一的 ID。从上面的输出可以看到,那个 Ubuntu 容器的 ID 是 2f2a5b826762。一会儿我们会看到从哪找到容器的名字。现在就可以在容器里面工作了。当你完成容器内的工作后,你可以回到主机操作系统的终端(在我这个例子中,操作系统是 Ubuntu 22.04 LTS)而不需要关掉容器(客户机)。

从上面的解脱可以看到,标签是 latest20.04

  • 27941809078c是 Ubuntu latest 的 Docker 镜像的镜像 ID,
  • 20fffa419e3a是 Ubuntu 20.04 的 Docker 镜像的镜像 ID,
  • e66264b98777是 Alpine latest 的 Docker 镜像的镜像 ID。
4.1、使用标签运行容器

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

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

或者,

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

这里,

  • -t:在 Ubuntu 容器内分配一个伪终端。
  • -i:通过从容器获取一个标准输入(STDIN),允许我们创建一个可交互的连接。
  • ubuntu:latest:标签为latest的 Ubuntu Docker 镜像。
  • /bin/bash:新容器的 BASH shell。这个是可选项。如果你不加 shell 的话,会分配默认的 shell 给容器。

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

docker基础知识入门:Linux 下的 Docker(1)

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

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

4.2、从运行中的容器中脱离

使用 CTRL P然后CTRL Q就可以从运行中的容器脱离(不需要关闭)。

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

4.3、使用镜像 ID 运行容器

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

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

这里,

  • 20fffa419e3a- 镜像 ID

CTRL P然后CTRL Q可以从当前容器中脱离回到主机系统的终端。我们只是从容器中脱离,但是没有让它停止。容器仍然在后台运行中。

4.4. 在脱离模式中运行容器

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

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

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

$ sudo docker run -it -d alpine:latest

输出结果:

d74f2ceb5f3ad2dbddb0b26e372adb14efff91e75e7763418dbd12d1d227129d

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

通过 docker ps命令,你可以验证容器是否在运行:

$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d74f2ceb5f3a alpine:latest "/bin/sh" 3 seconds ago Up 2 seconds zen_pascal

docker基础知识入门:Linux 下的 Docker(2)

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

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

$ sudo docker attach d74f2ceb5f3a

5、查看运行中的容器

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

$ sudo docker ps

输出结果:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f7e04eed577e 20fffa419e3a "/bin/bash" 6 minutes ago Up 6 minutes brave_mclean 2f2a5b826762 ubuntu:latest "/bin/bash" 18 minutes ago Up 18 minutes hungry_leavitt

这里,

  • f7e04eed577e是由镜像2f2a5b826762创建的 Ubuntu 容器的 ID。并且,brave_mclean是这个容器的名字。
  • 2f2a5b826762是由镜像 “ubuntu:latest” 创建的 Ubuntu 容器的 ID。并且,hungry_leavitt是这个容器的名字。

当一个新容器被创建后,会赋给它一个唯一的 ID 和名字,这样我们就能通过它的 ID 和名字来连接它。

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

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

$ sudo docker ps -a

6、从运行中的容器脱离或连接

首先,通过 docker ps命令找到容器的 ID。

$ sudo docker ps

然后,运行 docker attach命令连接到运行中的容器。

$ sudo docker attach

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

$ sudo docker attach f7e04eed577e

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

$ sudo docker attach brave_mclean

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

想要从容器脱离,只要按 CTRL P然后CTRL Q

7、启动、重启、暂停和终止容器

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

首先,通过 docker ps -a命令找到容器的名字或 ID。

docker基础知识入门:Linux 下的 Docker(3)

现在,通过使用 docker start命令,加上名字或 ID,你可以启动一个容器,像下面这样:

$ 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

8、强行关闭 Docker 容器

docker stop命令可以非常优雅的关掉运行中的容器。有时候,你可能卡在一个没有响应的容器,或者你想强制关掉容器。

通过给一个运行中的容器发送 SIGKILL来强行关闭容器,运行:

$ sudo docker kill 10615254bb45

9、在关闭容器后自动删除他们

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

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

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

docker基础知识入门:Linux 下的 Docker(4)

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

10、给容器命名

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

现在看一下下面的例子:

$ sudo docker run -it -d alpine:latest 2af79e97a825c91bf374b4862b9e7c22fc22acd1598005e8bea3439805ec335d

$ sudo docker run -it -d alpine:latest 80b53b7e661d33696b65c78267fc3f067b6100799c925910db4721963e3fae0a

$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 80b53b7e661d alpine:latest "/bin/sh" 3 seconds ago Up 2 seconds bold_margulis 2af79e97a825 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 NAMES 397111fac537 alpine:latest "/bin/sh" 2 seconds ago Up 2 seconds ostechnix_alpine 80b53b7e661d alpine:latest "/bin/sh" 7 minutes ago Up 7 minutes bold_margulis 2af79e97a825 alpine:latest "/bin/sh" 7 minutes ago Up 7 minutes recursing_taussig

docker基础知识入门:Linux 下的 Docker(5)

猜您喜欢: