Windows上做Python開發太痛苦?Docker瞭解一下

沈仲強發表於2018-11-28

用Windows的朋友應該都體會過,Windows上做Python開發有多痛苦。用pip裝庫各種報錯,然後每次都要花很多時間找解決辦法,每次的心情都像這樣

Windows上做Python開發太痛苦?Docker瞭解一下

之前我的解決方法是在Windows上裝VMWare,VMWare上執行Ubuntu,然後在Ubuntu裡面做開發。但這樣也不太方便,每次進入開發環境都要先啟動VMWare,再啟動Ubuntu,然後開啟命令列視窗開始開發,而且有時候需要在宿主機和虛擬機器之間來回切換,也很麻煩。

最近了解到Docker也有Windows的版本,於是就想到在windows上利用Docker執行一個Ubuntu映象,在容器裡搭建Python開發環境,這 樣既解決了安裝庫的問題,也解決了VMWare虛擬機器的不方便之處。

Windows上做Python開發太痛苦?Docker瞭解一下

關於容器的基本使用,可以參考我之前的一篇文章 Docker初體驗

需要注意的是,Windows上安裝Docker對系統有以下的要求:

  • 需要支援Hyper-V的windows版本,Hyper-V目前僅在Windows 10之後的版本支援
  • BIOS裡需要啟用Virtualization(虛擬化)

如果你的系統滿足上面的要求,接下來,我們來一步一步搭建環境。

安裝Docker for Windows

安裝程式可以從這裡下載 Docker for Windows

安裝完之後,執行Docker for Windows。

Docker執行後可以在狀態列裡看到有一個小鯨魚的圖示,如下所示

Windows上做Python開發太痛苦?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開發環境的建議,也歡迎在評論裡告訴我~

本文已同步更新到公眾號【Python與資料分析】,歡迎關注~

相關文章