用 Windows 的朋友应该都体会过, Windows 上做 Python 开发有多痛苦. 用 pip 装库各种报错, 然后每次都要花很多时间找解决办法, 每次的心情都像这样
之前我的解决方法是在 Windows 上装 VMWare,VMWare 上运行 Ubuntu, 然后在 Ubuntu 里面做开发. 但这样也不太方便, 每次进入开发环境都要先启动 VMWare, 再启动 Ubuntu, 然后打开命令行窗口开始开发, 而且有时候需要在宿主机和虚拟机之间来回切换, 也很麻烦.
最近了解到 Docker 也有 Windows 的版本, 于是就想到在 Windows 上利用 Docker 运行一个 Ubuntu 镜像, 在容器里搭建 Python 开发环境, 这 样既解决了安装库的问题, 也解决了 VMWare 虚拟机的不方便之处.
关于容器的基本使用, 可以参考我之前的一篇文章 Docker 初体验 https://zhuanlan.zhihu.com/p/31436920 .
需要注意的是, Windows 上安装 Docker 对系统有以下的要求:
需要支持 Hyper-V 的 Windows 版本, Hyper-V 目前仅在 Windows 10 之后的版本支持
BIOS 里需要启用 Virtualization(虚拟化)
如果你的系统满足上面的要求, 接下来, 我们来一步一步搭建环境.
安装 Docker for Windows
安装程序可以从这里下载 Docker for Windows
安装完之后, 运行 Docker for Windows.
Docker 运行后可以在状态栏里看到有一个小鲸鱼的图标, 如下所示
打开命令行窗口, 运行下面的命令查看 Docker 版本
docker --version
输出
Docker version 18.09.0, build 4d60db4
下载镜像
docker hub 上提供了很多 docker 镜像, 我们以 Ubuntu:18.04 为基础, 打造我们的 python 开发环境. 运行
docker pull Ubuntu:18.04
下载完后, 我们来查看一下本地的镜像, 运行
docker images
可以看到如下的输出
- REPOSITORY TAG IMAGE ID CREATED SIZE
- Ubuntu 18.04 93fd78260bd1 6 days ago 86.2MB
安装常用工具和 Python
我们启动一个容器, 并进到容器内的 bash, 运行
docker run -it Ubuntu:18.04 bash
我们的这个镜像现在只是一个最基本的 Ubuntu 的系统, 里面很多工具都没有, 如 ping,ifconfig,wget,VIM 等, 也没有 python. 接下来我们把这些一个一个都装上.
由于镜像默认用的是 Ubuntu 官方的源, 从国内连官方的源很慢, 我们先把源改成 163 的源. 修改 / etc/apt/sources.list 的内容为下面 的内容
- deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
- deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
- deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
- deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
- deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
- deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
- deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
- deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
- deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
- deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
运行
apt update
接下来, 安装 ping,wget,ifconfig,VIM 等工具
apt install iputils-ping wget.NET-tools VIM
安装 python3.6
- apt install python3.6
- ln -s /usr/bin/python3.6 /usr/bin/python
安装 pip
apt install python3-pip
配置 VIM
安装完工具后, 我们来配置一下 VIM. 打开~/.vimrc 文件, 输入 VIM 的配置. 比如我的配置是这样的
- set ru
- syntax on
- set background=dark
- set sw=4
- set ts=4
- set tabstop=4
- set shiftwidth=4
- set expandtab
- filetype plugin on
- set autoindent
- set smartindent
- set number
- set viminfo='10,\"100,:20,%,n~/.viminfo
- function! ResCur()
- if line("'\"") <= line("$")
- normal! g`"
- return 1
- endif
- endfunction
- augroup resCur
- autocmd!
- autocmd BufWinEnter * call ResCur()
- augroup END
- highlight WhiteSpaces ctermbg=green guibg=#55aa55
- match WhiteSpaces /\s\+$/
好了, 至此, 我们的开发环境配置好了.
提交镜像
为方便以后的使用, 我们把这个配置好的容器打成一个新的镜像. 在容器中执行 exit 退出, 我们现在来到了 Windows 的命令行窗口. 我们查看一下我们刚刚配置好的容器, 运行
docker ps -a
输出
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 39ca895c725e Ubuntu:18.04 "bash" 3 hours ago Exited (0) 19 seconds ago relaxed_wiles
运行下面的命令, 提交更改, 将容器打包成一个新的镜像
docker commit 39ca895c725e shenzhongqiang/python-dev:version1
我们再来查看一下本地的镜像
docker images
输出
- REPOSITORY TAG IMAGE ID CREATED SIZE
- shenzhongqiang/python-dev version1 fbf0ce58d00d 2 minutes ago 542MB
- Ubuntu 18.04 93fd78260bd1 6 days ago 86.2MB
可以看到, 现在我们本地有 2 个镜像了. 下面一个是原始的 docker hub 上的 Ubuntu 镜像, 上面一个就是我们自己定制的镜像.
之后我们就可以基于我们定制的镜像, 启动容器做开发了. 启动容器很简单, 只要运行
docker run -it fbf0ce58d00d bash
需要注意的是, 容器如果被删除了, 其中的更改也会丢失. 要保存容器中的更改, 需要像上面这样把更改 commit 到镜像中.
好, 以上就是定制的所有步骤. 这两天我逐渐把项目迁移到容器里了, 在容器里开发感觉比在虚拟机里开发顺滑多了.
为方便起见, 上面这个镜像放在了我的 docker hub 上, 大家可以通过下面的命令获取
docker pull shenzhongqiang/python-dev:version1
如果大家有更好的 Windows 上配置 Python 开发环境的建议, 也欢迎在评论里告诉我~
来源: https://juejin.im/post/5bfe5e65e51d4507400b5d57