docker 使用小记
由于最近需要在几台电脑上配置相同的环境,几台电脑的操作系统不一样,而且配置一台所需要的步骤是比较繁琐的,因此就想到了用 docker,下面是使用 docker 构造镜像并且在不同的电脑上使用这个镜像的记录。
docker 支持多个平台,各个平台上具体的安装步骤可参考官方文档。
docker 提供了一个镜像仓库,当从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改
- 从已经创建的容器中更新镜像,并且提交这个镜像
- 使用 Dockerfile 指令来创建一个新的镜像
这里采用的是第一种方法,由于我这里需要的是 python 环境,因此先 pull 一个 python 镜像作为基础镜像(可以通过 docker search python
找到相关的镜像,这里 pull 的是官方的 pytohn 3.5 镜像), 命令如下
docker pull python:3.5
等到镜像 pull 下来后,可以通过以下命令进入镜像中
docker run -t -i python:3.5 /bin/bash
这里 -t -i
含义如下
-t
: 在新容器内指定一个伪终端或终端。 -i
: 允许你对容器内的标准输入 (STDIN) 进行交互
这样便可进入装有 python 3.5 的系统(默认是 ubuntu),然后在其中像普通的系统一样通过 apt 和 pip 配置所需要的软件和库即可
配置完成后注意不能马上退出这个容器,因为在这个容器中的修改默认是不会影响到原来的镜像的,也就是说如果退出后在进入 python:3.5 镜像所创建的容器中,所安装的这些库会完全消失,因此需要将这个配置过的容器另存为一个新的镜像,具体做法如下
首先原来的容器不能退出,另开一个终端,通过 docker ps
命令获得修改过的容器的 id ,如下图所示
然后 docker commit id new_image
命令将这个修改过的容器存为新的镜像,这里的 id 不一定要写全,只要能跟其他的容器 id 区分开来,写前几个字符也可以。
如下所示是将前面的容器另存为镜像 modified_python
, 并且通过 docker images
查看到该创建的镜像的时间和大小。
如果要将这个容器分发到其他机器,可以先将这个镜像上传到 docker 官方的中央仓库 (需要注册账号),其他机器再从中央仓库 pull 下来,但是这样可能会存在着网速过慢的问题,因此可以在本地导出容器,然后直接拷贝到其他机器导入,具体操作如下
首先通过 docker ps -a
查看本地使用的容器,然后通过 docker export id > tar_file
将容器导出到 tar_file
中,其中容器 id 的书写规则同上。如下是将上面配置过的 python 环境导出到 ubuntu_python.tar
通过这个文件导入为镜像也很简单,通过 cat tar_file | docker import image_name
即可将 tar_file
导入为 image_name
镜像
其他的一些值得注意的地方就是 -v 参数可以将本地的目录挂到 docker 的目录中,从而可以在容器中写入本地磁盘,具体语法为 -v local_dir:contain_dir
, 当容器中的 container_dir
不存在时会自动创建这个目录。
参考资料:
Install Docker Docker 教程 关于 Docker 目录挂载的总结 保存对容器的修改 导出和导入容器