快捷搜索:  汽车  科技

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

docker基础知识入门:Linux 下的 Docker完成以后,从容器脱离(不要退出)回到主机系统的 shell。不要终止或者关闭容器。使用 CTRL P然后CTRL Q从容器中脱离,这样不会关闭容器。# apt update # apt install apache2 相似地,在容器中,可以根据自己的需要安装和测试软件。$ sudo docker run -it ubuntu:latest 现在,你会进入到容器的 shell。然后,在容器中,你可以安装任何的软件或者做你想做的事情。比如,我们在容器中安装 Apache Web 服务器。

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

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

11、构建自定义 Docker 镜像

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

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

$ sudo docker run -it ubuntu:latest

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

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

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

# apt update # apt install apache2

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

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

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

$ sudo docker ps

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

$ sudo docker commit 377e6d77ebb5 ostechnix/ubuntu_apache

输出结果:

sha256:bc5e5f95ca592a3585fda2c5a40ec30c98e292046ef70390a2c3b7863cc6f7c1

这里,

  • 377e6d77ebb5– Ubuntu 容器的 ID。
  • ostechnix– 创建容器的用户的名字。
  • ubuntu_apache– 用户ostechnix创建的 Docker 镜像的名字。

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

$ sudo docker images

输出结果:

ostechnix/ubuntu_apache

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

从上面给的结果中可以看到,从运行中的容器创建的新 Docker 镜像已经在我们的 Docker 主机系统中了。

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

$ sudo docker run -it ostechnix/ubuntu_apache

12、移除容器

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

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

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

$ sudo docker ps

输出结果:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 377e6d77ebb5 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] y Deleted Containers: 397111fac5374921b974721ee646b2d5fbae61ca9c6e8b90fbf47952f382a46b 80b53b7e661d33696b65c78267fc3f067b6100799c925910db4721963e3fae0a [...] Total reclaimed space: 176B

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

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

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

$ sudo docker ps -a

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

13、删除 Docker 镜像

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

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

列出所有下载的 Docker 镜像:

$ sudo docker images

输出结果:

REPOSITORY TAG IMAGE ID CREATED SIZE ostechnix/ubuntu_apache latest bc5e5f95ca59 14 minutes ago 229MB debian latest d2780094a226 11 days ago 124MB ubuntu latest 27941809078c 3 weeks ago 77.8MB ubuntu 20.04 20fffa419e3a 3 weeks ago 72.8MB alpine latest e66264b98777 5 weeks ago 5.52MB

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

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

$ sudo docker rmi ce5aa74a48f1

输出结果:

Untagged: ostechnix/ubuntu_apache:latest Deleted: sha256:bc5e5f95ca592a3585fda2c5a40ec30c98e292046ef70390a2c3b7863cc6f7c1 Deleted: sha256:a8e4797160a2b2d33d8bd1bd67e008260c022b3a53fbcc198b2b74d9eae5961d

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

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

$ sudo docker system prune -a

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

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

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

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

$ sudo docker system prune -a --volumes

Docker 问题汇总

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

比如,当我尝试从一个以前的 Ubuntu 服务器上删除 ID 为 b72889fa879c的 Docker 镜像。我会得到下面的错误:

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

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

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

$ sudo docker ps

输出结果:

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

噢,没有运行中的容器。

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

$ sudo docker ps -a

输出结果:

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

猜您喜欢: