docker容器中配置python环境
docker中配置python环境
使用docker的好处
当我们在迁移python项目的时候,python环境是个让人头疼的问题,特别是用的库特别多的时候,环境不匹配会导致各种问题发生。
用docker把python环境或者和项目一起打包就能很好解决这个问题。docker实际上就是一个轻量级别的虚拟机,我们可以把python环境部署到docker中,这样就能随时打包带走,非常方便。
docker的基本概念
docker一般由三个部分组成,镜像,仓库和容器
-
仓库:存放镜像的地方
-
镜像:环境模板,容器就由镜像产生并且运行
-
容器:根据镜像生成的实际执行环境
docker的安装与卸载
# 安装
sudo yum install docker
# 启动
sudo systemctl start docker
# 卸载
sudo yum remove docker-ce
sudo rm -rf /var/lib/docker
docker修改镜像源
在根目录下有个叫daemon的json文件,上网找到国内镜像源将其替换即可
# 重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
下载docker镜像
使用python3的话,推荐使用miniconda3的镜像
docker pull continuumio/miniconda3
docker run -i -t continuumio/miniconda3 /bin/bash
docker 容器的基本操作
# 查看本地有那些镜像
sudo docker images
# 从镜像启动一个容器
sudo docker run -it image_name /bin/bash
# 查看正在运行的容器
sudo docker ps
# 查看全部容器,包括已经停止的容器
sudo docker ps -a
# 启动一个停止的容器
sudo docker start container_id
# 进入一个正在运行的容器
sudo docker exec -it container_id /bin/bash
# 重命名容器
sudo docker rename old_container_name new_container_name
# 删除容器
docker rm container_id
# 删除镜像
docker rmi image_id
# 拷贝宿主机的文件到docker容器
docker cp [OPTIONS] dest_path container:src_path
# 拷贝docker容器中的文件到宿主机
docker cp [OPTIONS] container:src_path dest_path
docker容器的导入和导出
docker容器最方便的就是打包导出,和导入,能够方便地进行环境迁移,一个容器打包导出后可以在另一台机器的docker中解压导入成一个镜像。
# 容器迁移,先导出容器,在导入成镜像
# 导出容器
sudo docker export container_id | gzip > image_name.tar.gz
# 导入成镜像
zcat image_name.tar.gz | sudo docker import - image_name
数据卷挂载
一般情况下,容器只是运行环境,不应该承担数据存储的角色,如果有数据存储的需求或者需要读取系统文件,就需要将系统的某个文件夹挂在到容器中,这样容器既能读取系统文件,也能将运行时生成的文件写到系统中保存起来。如果不将数据保存起来,随着容器的消失,数据也跟着消失了。
数据卷通过启动参数 -v 来指定。
-v后面的映射关系是"宿主机文件/目录:容器里对应的文件/目录",其中,宿主机上的文件/目录是要提前存在的,容器里对应的文件/目录会自动创建。
docker run -it -v /xxx/xxx:/xxx/xxx 容器名或id /bin/bash
为了方便管理,推荐将容器里的目录设置成和宿主机一致
开放端口
有些对外服务的容器,比如tomcat,mysql等,需要开放端口给外部访问。
端口开放通过启动参数 -p 来指定。
-p 宿主机端口:容器端口。
一般来说,为了方便管理,会设置宿主机端口和容器端口保持一致.
比如web端口:-p 80:80