繁体   English   中英

如何获取从 docker-in-docker 创建的 docker 图像

[英]How to get docker images created from docker-in-docker

我正在使用docker:dind来创建一些图像。 它工作正常。 当我执行到docker:dind容器并执行docker imagesdocker ps时,我可以分别看到图像和容器。

但是,如果不总是执行到docker:dind容器,我如何从外部列出图像和容器?

(我知道这是可能的,因为我读过一篇关于这个的文章。但我似乎找不到那篇好文章。)

Docker 插座

Docker 使用 unix(在大多数情况下)套接字与其守护进程通信,因此您需要将此套接字文件挂载到正在运行的容器中。

Docker 套接字通常在/var/run/docker.sock

如果 docker 在 VM 上运行,则 docker 中的 Docker 可能很难。


Docker 在 docker

让我们做一些简单的例子。

1.拉取docker镜像

$ docker pull docker:latest

2.在docker中启动docker

首先,您需要找到 unix 套接字并使用-v标志将其安装到 docker 容器中。 Docker 将在完成执行传递的命令时执行。 所以让我们执行sleep 1 hour

$ docker run -v /var/run/docker.sock:/var/run/docker.sock -d docker:latest sleep 3600
52201aaa3e6ebaaafab0a7323fd621f9f41765bad6363bf4eae43bf06c5825ee

3.让shell进入启动容器

我们可以使用带有-ti标志的exec命令

$ docker exec -ti 52201aaa3e6ebaaafab0a7323fd621f9f41765bad6363bf4eae43bf06c5825ee sh
/ # 

4.尝试从docker容器启动MySQL

/ # docker run -e MYSQL_ALLOW_EMPTY_PASSWORD=true  mysql:5.7

2021-01-28 20:17:24+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.32-1debian10 started.
2021-01-28 20:17:24+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2021-01-28 20:17:24+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.32-1debian10 started.
2021-01-28 20:17:24+00:00 [Note] [Entrypoint]: Initializing database files
...
...
...

2021-01-28T20:17:33.146086Z 0 [Note] Server socket created on IP: '::'.
2021-01-28T20:17:33.147569Z 0 [Warning] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
2021-01-28T20:17:33.156949Z 0 [Note] Event Scheduler: Loaded 0 events
2021-01-28T20:17:33.157405Z 0 [Note] mysqld: ready for connections.
Version: '5.7.32'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)

5.验证它是否正常工作

让我们在主机上打开另一个终端选项卡并验证启动的容器是否正常工作

$ docker ps | grep mysql:5.7
bc90ce617ee4        mysql:5.7              "docker-entrypoint.s…"   About a minute ago   Up About a minute   3306/tcp, 33060/tcp                   trusting_neumann

这就是一切。 您正在 Docker 中运行 Docker。


Docker 在另一台主机

你也可以在你的电脑上启动docker容器,在另一台机器上控制Docker。 要求是,远程机器上的 docker 有套接字侦听 TCP 套接字,并且您可以与该端点通信。 这是在虚拟机中使用 docker 时控制 docker 的常用方法,您可以在本地笔记本电脑上,也可以在服务器机房的某些服务器上进行开发。

要了解更多信息,您可以在 官方 docker 文档中查看如何设置 docker 守护程序侦听 TCP 套接字以及如何连接到远程套接字

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM