這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
Ubuntu 14.04 上使用 Docker 建立新的 Images
環境準備
Ubuntu 14.04.1 LTS 發布後,我歡快地去官網下載並建立了一個虛擬機器,但是在在執行下面命令的時候:
sudo apt-get update
一直會遇到下面的錯誤
W: 無法下載 http://extras.ubuntu.com/ubuntu/dists/trusty/main/binary-amd64/Packages Hash 校正和不符W: 無法下載 http://extras.ubuntu.com/ubuntu/dists/trusty/main/binary-i386/Packages Hash 校正和不符
Google 找解決方案,嘗試了個遍,問題依舊。最讓人不解的是 Ubuntu 官方源裡面這個地址是存在的,裡面的內容也是存在的,在瀏覽器中也可以訪問但就是無法 Update。最後進行了如下嘗試:
- 將下面的內容添加入 /etc/resolv.conf,使用 Google 的 DNS 解析:
nameserver 8.8.8.8nameserver 8.8.4.4
sudo rm -rf /var/lib/apt/lists/*sudo mkdir /var/lib/apt/lists/partialsudo apt-get cleansudo apt-get update
遺憾的是問題還是存在,而且由於使用的是官方源,速度很慢。換國內源吧,幸好 Ubuntu 的更新管理器可以檢測當前網路環境中最快的第三方源,進行檢測後,換成對我的網路來說最快的 yun-idc.com 的鏡像。再次清理緩衝並重新更新,然後。。。
重複地做相同的事情,但是卻期待不一樣的結果 ————愛因斯坦
結果還是一樣的,就像更新速度快了些。雖然已經不影響正常安裝軟體和日常工作,但是想到上面那個 Warning 還是很鬱悶。更關鍵的是,在使用 Dockerfile 來 Build 新的 Image 的時候,由於 Base Image 都是官方的乾淨系統,所以都需要 apt-get update 的步驟,上面提到的錯誤會導致這條命令返回 100 而不是 0,Docker 的 Build 過程也會因此中斷,實在鬱悶。
由於還是沒有有效解決方案,就想想 Workaround 吧。既然 extras.ubuntu 這個地址的包不一定用得上,那就暫時不更新這個地址了,之後如果需要可以通過添加 ppa 來解決。於是從 /etc/apt/sources.list 裡面去掉 extras.ubuntu 地址相關的內容,再次更新終於沒有錯誤了。
建立 Nginx 和 Python 鏡像
基於上面提到的解決方案,我建立了兩個 Dockerfiles,分別用來建立自己的 Nginx 和 Python 的開發環境鏡像:
# Pull base image.FROM dockerfile/ubuntu# Patch the proper apt-get sourcesADD assert/sources.list /etc/apt/sources.list# Install Nginx.RUN \ add-apt-repository -y ppa:nginx/stable && \ apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 16126D3A3E5C1192 && \ apt-get update && \ apt-get install -y nginx && \ rm -rf /var/lib/apt/lists/* && \ chown -R www-data:www-data /var/lib/nginx# Define mountable directories.VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/conf.d", "/var/log/nginx"]# Expose ports.EXPOSE 80
# Pull base image.FROM dockerfile/ubuntu# Patch the proper apt-get sourcesADD assert/sources.list /etc/apt/sources.list# Install Python Dev Env.RUN \ apt-get update && \ apt-get install -y python python-dev python-virtualenv# Expose ports.EXPOSE 8080
這兩個 repositories 和我在 Docker 的官方鏡像庫進行了關聯:
- ubuntu-nginx
- ubuntu-python
都已經在 Docker registry Hub 中 build 成功。之所以選擇 dockerfile/ubuntu 是由於其是官方提供的,而且預先安裝了 Git,curl 等常用工具。
注意: 本文主要的目的是如何建立自己的 Docker Image,使用 ubuntu-nginx Image 建立的 Container 是無法運行在 daemon 模式下的。生產環境中的 Nginx 需要在 Docker 容器中使用 -d 選項運行,這樣 Nginx 本身就不能運行在 daemon 狀態,可以參考 Github 上的這個方案 進行部署。
-- EOF --
- 基於 Flask 實現 RESTful API→
- ← Ubuntu 14.04 系統基於 Gunicorn 和 Nginx 部署 Flask 應用
聲明: 本文採用 BY-NC-SA 協議進行授權. 轉載請註明轉自: Ubuntu 14.04 上使用 Docker 建立新的 Images