***********************************************
補充參考:Python2.7+Django1.11 Docker鏡像搭建
************************************************
目標鏡像環境介紹:
操作系統:ubuntu16.04
python版本:python 3.7.4
django版本:2.2
操作步驟:
1. 本地安裝docker環境(略)
2. 拉取ubunut指定版本鏡像文件
docker pull ubuntu:16.04
3. 指定映射端口,啟動容器
補充啟動容器注意點:
啟動的時候,加參數-t -it有區別, https://www.cnblogs.com/miracle-luna/p/11111852.html
-i: 以交互模式運行容器,通常與 -t 同時使用;
-t: 為容器重新分配一個偽輸入終端,通常與-i 同時使用;
-it --若不加該參數,運行容器,發現容器雖然創建了,但是並沒有正常啟動,而你執行docker start *** 的時候,發現還是不能正常啟動,所以-i或-t參數也可以理解為,run容器時,必需加其中一個參數。
注意:一般加-t就可以,-i 或者 -it加上之后啟動容器,在執行docker attach XXX 命令看容器輸出的時候,若此時執行ctrl+C退出,會導致容器直接關閉。所以我一般習慣啟動容器的時候,加-d(后台進程啟動) -t 分配一個偽終端。
如下:
docker run -d -p 8000:8000 --name dj22_py37 -t ubuntu:16.04
如下圖:ctrl + c 強制退出終端之后,容器並沒有關閉。

4. 進入容器,確認系統版本,安裝常用包,python3.7.4 pip3 django2.2
docker exec -u root -it dj22_py37 /bin/bash

鏡像比較干凈, 鏡像文件只有120M,並且里邊沒裝python
ubuntu16-docker環境-更換阿里源,提高軟件包安裝速度:
更換之前要先備份之前的源:
cp /etc/apt/source.list /etc/apt/source.list.bak
編輯源列表文件
vim/etc/apt/sources.list
將原來的列表刪除,替換:
# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties deb http://archive.canonical.com/ubuntu xenial partner deb-src http://archive.canonical.com/ubuntu xenial partner deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse
更新:
apt-get update
先安裝zip vim 等包
apt-get install zip
apt-get install vim
OK,開始安裝當前最新版python3.7.4
下載地址:https://www.python.org/downloads/



也可以通過如下FTP地址下載:https://www.python.org/ftp/python/3.7.4/
將該文件上傳到容器內部,解壓:

先安裝python依賴環境: apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat1-dev liblzma-dev libffi-dev libc6-dev --時間較長,耐心等待 解壓python壓縮文件: tar -zxvf Python-3.7.4.tgz 解壓后,進入目錄: cd Python-3.7.4 建立本地安裝目錄: mkdir -p /usr/local/python3 編譯安裝: ---執行這步時,建議后邊加上參數:--enable-optimizations 字面意思就是"開啟優化",會自動安裝pip3及優化配置,
---但是這會造成編譯安裝需要較長到時間,如果網絡環境不穩定,或者着急使用python環境,可以不加該參數!!! ./configure --prefix=/usr/local/python3 --enable-optimizations make #耐心等待 make install

到此,本地編譯安裝已完成
這里由於是純凈的環境,假如同學你本地環境之前安裝過python,則需要將原先/usr/bin/下的python相關鏈接刪除,要不即使你安裝了新的python,但是系統默認還會讀取你原先的環境。
通過如下命令刪除舊的環境軟鏈接配置,這塊操作謹慎!!!---本地原先沒有python環境的同學,可以忽略如下步驟,跳過執行下一步。
rm -rf /usr/bin/python3
rm -rf /usr/bin/pip3
建立軟鏈接,將本地編譯安裝的/user/local/python下的執行文件 指向/user/bin下
#添加python3的軟鏈接 ---如果本地環境沒有裝python2,也不打算用python2,可以直接將鏈接指向寫成/usr/bin/python,也是可以的,這樣每次進入終端環境或者運行程序,直接輸入python就可以,但是還是建議2和3區分開指向。 ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3 #添加 pip3 的軟鏈接 ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3
驗證版本:
root@c3af9f44f7f7:/# python3 -V Python 3.7.4 root@c3af9f44f7f7:/# pip3 -V pip 19.0.3 from /usr/local/python3/lib/python3.7/site-packages/pip (python 3.7)
OK,至此,python3.7.4 環境安裝完成。
下一步開始安裝:django 2.2
參考官方文檔:https://www.djangoproject.com/download/

因為我們上邊安裝的是pip3,所以安裝命令需要改成如下:
pip3 install Django==2.2.4
安裝完成后,查看Django版本
python3 import django django.get_version()

安裝django框架下,python連接postgresql的驅動: psycopg2
pip3 install psycopg2
直接安裝出現如下錯誤:

網絡查找ubuntu環境下,報錯原因:---小伙伴們注意,如下處理方式只適用於解決ubunut下的安裝異常,對於其他系統的異常如下內容請作選擇性參考!!!
Error: pg_config executable not found. pg_config is in postgresql-devel (libpq-dev in Debian/Ubuntu) 1)安裝libpq-dev apt-get install libpq-dev python-dev 2)然后重新執行: pip3 install psycopg2 ------------------------------------------------------ root@c3af9f44f7f7:/# pip3 install psycopg2 Collecting psycopg2 Using cached https://files.pythonhosted.org/packages/5c/1c/6997288da181277a0c29bc39a5f9143ff20b8c99f2a7d059cfb55163e165/psycopg2-2.8.3.tar.gz Installing collected packages: psycopg2 Running setup.py install for psycopg2 ... done Successfully installed psycopg2-2.8.3 You are using pip version 19.0.3, however version 19.2.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command. root@c3af9f44f7f7:/#
驗證版本:

OK, 至此基礎環境已經配置完成。
docker commit c3af9f44f7f7 dj22_py37:1.0 ---耐心等待

鏡像創建成功,可以打包備份:
docker save dj22_py37:1.0 -o /home/dj22_py37.tar
