如何用Docker成为更高效的数据科学家?( 四 )


CMD [“./run_jupyter.sh”]
在上面的命令中 。我运行了一个实例化一个 Jupyter Notebook 服务器的 shell 脚本 。但是 。如果你没有什么要运行的特定应用而只是想保持你的容器运行(而不退出) 。你可以直接运行 bash shell 。只不过使用以下命令:
CMD [\"/bin/bash\"]
这种方法是有效的 。因为除非你退出 。否则 bash shell 就不会终止;因此该容器会一直保持运行 。
用户指南中介绍说:
在一个 Dockerfile 中只能有一个 CMD 指令 。如果你列出了不止一个 CMD 。那么只有最后一个才有效 。
CMD 的主要目的是为正在执行的容器提供默认配置 。这些默认配置可能包含一个可执行文件 。或者也可以省略可执行文件 。在这种情况下你还必须指定一个 ENTRYPOINT 指令 。
创建你的 Docker 镜像
Dockerfile 中的信息可真够多的 。不要担心 。后面的内容就相对很简单了 。现在我们已经在 Dockerfile 中创建了我们的配方 。是时候创造镜像了 。你可以通过以下命令完成:

如何用Docker成为更高效的数据科学家?

文章插图
GitHub 上也有:https://github.com/hamelsmu/Docker_Tutorial/blob/master/basic_tutorial/build_image.sh
这会创建一个 Docker 镜像(而不是容器;如果你不记得这两者之间的差异 。请查阅文章前面的术语介绍) 。你可以在后面运行这个镜像 。
从你的 Docker 镜像创建和运行容器
现在你已经准备好让这一切工作起来了!我们可以通过执行以下命令来调出环境:
如何用Docker成为更高效的数据科学家?

文章插图
同样 GitHub 也有:https://github.com/hamelsmu/Docker_Tutorial/blob/master/basic_tutorial/run_container.sh
运行完这个命令之后 。你的容器就运行起来了!Jupyter 服务器也运行起来了 。因为在该 Dockerfile 最后有这个命令:
CMD [“./run_jupyter.sh”]
现在你应该可以通过其使用的端口访问你的 Jupyter Notebook 了——在这个案例中可通过 http://localhost:7745/ 访问 。密码是 tutorial 。如果你是通过远程的方式运行这个 Docker 容器 。你还必须设置本地端口转发 。这样你才能通过你的浏览器访问你的 Jupyter 服务器 。端口转发介绍:https://help.ubuntu.com/community/SSH/OpenSSH/PortForwarding
与你的容器交互
一旦容器设置完成并运行起来 。下面这些命令就有用了:
·为容器附加一个新的终端会话 。如果你需要安装一些新软件或使用 shell 。这会很有用 。
如何用Docker成为更高效的数据科学家?

文章插图
·将你的容器的状态保存为新镜像 。即使你一开始就在 Dockerfile 中配置了你想安装的所有库 。随着时间的推移 。你也可能还是需要对容器的状态进行很大的调整——通过交互来增加更多库和软件包 。将你的容器的状态保存为镜像是很有用的 。你后面可以将其分享出去或在上面加层 。你可以使用 docker commit CLI 命令将容器状态保存为新镜像:
docker commit <container_name> new_image_name:tag_name(可选的)
比如说 。如果我想将名为 container1 的容器的状态保存为名为 hamelsmu/tutorial:v2 的镜像 。我可以直接运行这个命令:
docker commit container_1 hamelsmu/tutorial:v2
你可能会疑惑镜像名之前的 hamelsmu/ 是什么——这只是为了让之后将该容器推送到 DockerHub 的工作更轻松 。因为 hamelsmu 是我的 DockerHub 用户名(后面会再谈这个问题) 。如果你的工作要使用 Docker 。那么你的公司很可能有一个内部私有的 Docker 库 。你也可以将你的 Docker 推送到那里 。
·列出运行中的容器 。当我忘记现在正在运行的容器的名称时 。我就常常使用这个命令:
docker ps -a -f status=running
如果你在使用该命令时没有加上 status=running 。那么你就会看到你系统上的所有容器的列表(即使已经不再运行的容器也在) 。这对查找旧容器而言很有用 。
·列出你在本地保存的所有镜像 。
docker images
【如何用Docker成为更高效的数据科学家?】·将你的镜像推送到 DockerHub(或其它地方) 。如果你想与其他人分享你的工作或将镜像保存到云上 。这个命令就会很有用 。注意你在做这件事时可不要分享任何私人信息(DockerHub 上也有私有库) 。
首先创建一个 DockerHub 库并给你的库起一个适当的名称 。参考这里:https://docs.docker.com/docker-hub/repos/ 。然后要运行 docker login 命令来连接到你在 DockerHub 或其它注册位置的账户 。比如 。要推送一个镜像到这个容器(https://hub.docker.com/r/hamelsmu/tutorial/) 。我首先必须将我的本地镜像命令为 hamelsmu/tutorial(我可以选择任意标签名) 。比如说 。这个 CLI 命令就为:

推荐阅读