三部曲
其一:当前文章:docker 使用
其二:在 docker 中部署 python 工程
其三:使用 Docker部署 Tensorflow Serving 模型服务
镜像:
sudo docker image pull python:3.6
:拉取 python3.6 镜像
sudo docker images
查看已经拉取的 python 镜像
创建容器:
查看容器:sudo docker ps -a
创建一个临时的容器:sudo docker run -it python:3.6 /bin/bash
创建后台运行的容器:sudo docker run -it -d --name=container_1 -v /xx/xx_dir:/home/xx_dir python:3.6 bash
其中:
- -i: 交互式操作
- -t: 终端 python:3.6: 使用 python:3.6镜像。 bash:交互式 Shell
- -d:在后台运行container并打印容器ID
- –name:给容器分配一个名称
- -v:挂载一个 linux 实体机上的目录,其中:前的是实体机上的真实目录,后面的是容器的默认 home 目录的子文件夹(会自动创建)
- -p :-p 1234:9002 表示将容器的 9002 端口映射到 Linux 实体机上的 1234 端口
创建完后会打印出容器 id
容器命令:
sudo docker exec -it container_1 bash
进入容器(使用 exec 这种方法退出时不会停止容器),容器是上面已经创建好的,容器里的挂载目录,有 linux 磁盘里的文件- 在容器命令行里
exit
退出,但是容器未停止、未被删除 sudo docker stop container_1
停止容器sudo docker rm container_1
删除容器sudo docker start/restart b750bbbcfd88
(ID)启动一个已停止的容器sudo docker rmi image_1
(镜像 ID)删除镜像,在这之前需要先暂停并删除容器
容器操作:
- 初次进入到容器命令行后,需要先:
apt-get update
,这个命令的作用是:同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。 不然后面安装 vim 的时候会报错:Unable to locate package vim - 但是 apt-get update 的时候报错连接失败问题(多安装执行几遍就行了,第二次安装时会从第一次的进度开始,而不是重新安装,所以可以避免 timeout 问题)
- 最好不要修改源!!! 因为修改后,apt-get update 成功了,但是会导致 vim 安装时出现 The following packages have unmet dependencies: ncurses-base : Breaks: libtinfo5 (< 6.1) but 6.0+20161126-1+deb9u2 is to be installed 错误,且未找到解决办法!!!所以下面的代码块略过,不要执行!!!
若需要更新apt-get源:
mv /etc/apt/sources.list /etc/apt/sources.list.bak && \
echo "deb http://mirrors.aliyun.com/debian stretch main contrib non-free" >/etc/apt/sources.list && \
echo "deb-src http://mirrors.aliyun.com/debian stretch main contrib non-free" >>/etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/debian stretch-updates main contrib non-free" >>/etc/apt/sources.list && \
echo "deb-src http://mirrors.aliyun.com/debian stretch-updates main contrib non-free" >>/etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/debian-security stretch/updates main contrib non-free" >>/etc/apt/sources.list && \
echo "deb-src http://mirrors.aliyun.com/debian-security stretch/updates main contrib non-free" >>/etc/apt/sources.list
-
新容器里没有 vim 命令,需要安装:
apt-get install vim
(这里也是会有 timeout 问题,所以也是多安装几遍就可以了!!!) -
批量安装 python 包,需要在挂载的目录下创建 requirements.txt 文件(可以从已存在的虚拟机上cat pip list 里的内容粘过来)然后进入到容器对应的目录里,并执行:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
制作镜像:
- 已经创建的容器 shell (按照上述步骤已经安装好环境了)不要关闭,重新打开一个 shell 窗口进行镜像制作
- 先
sudo docker ps -a
查看刚才创建的容器,找到 ID 号 - 然后复制 ID,执行:
sudo docker commit db62f724e846 py_container_1:3.6
:其中 commit 后面跟的即为刚才安装好环境的容器对应的 ID,py_container_1 与 3.6 分别对应 REPOSITORY 与 TAG,可随意命名。 - 制作镜像成功。输入
sudo docker images
查看是否已经存在 - 然后依据 py_container_1 这个镜像启动容器测试能否正常使用 Python 以及安装的包。启动命令为
sudo docker run -it py_container_1 :3.6 /bin/bash
,创建一个临时容器 - 若可以正常使用。为了此镜像能够在内网环境及离线环境使用,将此镜像打包为文件(需要打包为以.tar后缀或者以.tar.gz结尾的文件),移植到具体项目环境中即可使用:
sudo docker save py_container_1:3.6 | gzip > py_container_1.tar.gz
- 将 tar.gz 文件上传到另一台机器并 load,命令格式为:docker load < tar 包所在路径,此处即为
sudo docker load < /home/q/py_container_1.tar.gz
。之后再新的机器上,就可以和原机器上一样进行操作了