亞寵展、全球寵物產業風向標——亞洲寵物展覽會深度解析
703
2025-03-31
docker項目管理
本文目錄一覽:
docker是一個開源項目,誕生于2013年初,最初是dotCloud公司內部的一個業余項目。它基于Google公司推出的GO語言實現,項目后來加入了Linux基金會,遵從了apache2.0協議,項目代碼在GitHub上進行維護。
docker自開源后受到廣泛的關注和討論,以至于dotcloud公司后來都改名為docker lnc。Redhat已經在其rhel6.5中集中支持docker,Google也在其PaaS產品中廣泛應用。
docker項目的目標是實現輕量級的操作系統虛擬化解決方案,docker的基礎是Linux容器等技術。
1、更高效的利用系統資源
docker對系統資源的利用率更高,無論是應用執行速度,內存損耗或者文件存儲速度,都要比傳統虛擬機技術更高效。因此,相比虛擬機技術,一個相同配置的主機往往可以運行更多數量的應用。
2、更快速的啟動時間
傳統的虛擬機技術啟動應用服務往往需要數分鐘,而docker容器應用,由于直接運行于宿主內核,無需啟動完整的操作系統,因此可以做到秒級,甚至毫秒級的啟動時間,大大的節約了開發測試,部署的時間。
3、一致的運行環境
開發過程中常見的一個問題是環境一致問題,由于開發環境,測試環境,生產環境不一致,導致有些bug并未在開發過程中發現。而docker的鏡像提供了除內核外完整的運行時環境,確保環境一致性,從而不會在出現“這段代碼在我機器上沒問題”這類問題。
4、持續支付和部署
對開發和運維人員來說,最希望就是一次創建和部署,可以在任意的地方運行。(定制應用鏡像來實現集成、持續支付、部署。開發人員可以通過dockerfile來進行鏡像構建,并結合持續集成系統進行集成測試,而運維人員則可以直接在生產環境中快速部署該鏡像,甚至結合持續部署系統進行自動部署)。而且使用dockerfile使鏡像構建透明化,不僅僅開發團隊可以理解應用運行環境,也方便運維團隊理解應用運行所需條件,幫助更好的生產環境中部署該鏡像。
5、更輕松的遷移
由于docker確保了執行環境的一致性,使得應用的遷移更加的容易。docker可以在很多平臺上運行,無論是物理機、虛擬機、公有云、私有云、甚至是筆記本、其運行結果是一致的。因此用戶可以很輕易的將在一個平臺上運行的應用,遷移到另一個平臺上,而不用擔心運行環境的變化導致應用無法正常運行的情況。
6、更輕松的維護和拓展
docker使用的分層存儲以及鏡像的技術,使得應用重復部分的復用更為容易,也使得應用的維護更新更加簡單,基于基礎鏡像進一步擴展鏡像也變得十分簡單。此外,docker團隊同各個開源項目團隊一起維護了一大批高質量的官網鏡像,既可以直接在生產環境使用,又可以作為基礎進一步定制,大大的降低了應用服務的鏡像制作成本。
一、基本思路
1. 創建一個用于開發Django App的目錄
mkdir django-example cd django-example
2. 構建基本開發環境
touch Dockerfile
touch pip.conf requirements.txt
pip.conf文件填入以下內容,以便一會用pip安裝Python 模塊時使用阿里云鏡像加速:
[global]
index-url =
[install]
trusted-host=mirrors.aliyun.com
requirements.txt文件中填入要安裝的Python 模塊:
django
編寫構建開發環境的Dockerfile文件,填入以下內容:
# MAINTAINER ? ? ? ?Gevin flyhigher139@gmail.com
# DOCKER-VERSION ? ?1.12.0
#
# Dockerizing Python: Dockerfile for building python applications
FROM python:2.7.12
MAINTAINER Gevin flyhigher139@gmail.com
WORKDIR /usr/src/app
# 使用阿里云的pip鏡像
COPY pip.conf /root/.pip/pip.conf
COPY requirements.txt /usr/src/app/requirements.txt
RUN pip install -r /usr/src/app/requirements.txt
EXPOSE 8000
CMD ["bash"]
然后執行下面命令構建鏡像:
docker build -t gevin/django-example:0.1 .
構建成功后,執行docker images命令,可以查看到當前構建好的image
docker images
REPOSITORY ? ? ? ? ? ? TAG ? ? ? ? ? ? ? ? IMAGE ID ? ? ? ? ? ?CREATED ? ? ? ? ? ? SIZE
gevin/django-example ? 0.1 ? ? ? ? ? ? ? ? 1855fc3c8062 ? ? ? ?12 hours ago ? ? ? ?698.9 MB
3. 使用構建的image拉起開發環境
執行下面命令,可以以前臺形式拉起django-example鏡像的一個container:
docker run -it --rm -v $(pwd):/usr/src/app gevin/django-example:0.1
上面命令使用了data volume,把當前目錄掛載到container中的工作目錄下,這樣當前目錄下的所有文件都會映射到container的工作目錄下,在工作目錄下的所有改動,也都會保存到宿主機的當前目錄下。
4. 創建django項目
上一步的命令創建了一個安裝了django的交互式的container,直接在該container中執行創建django項目的命令即可:
root@7c91f460599f:/usr/src/app# django-admin startproject dj_example
上述命令,在container中基于django的命令創建了一個django項目,由于上一步操作時把宿主機的當前目錄掛載到container的工作目錄下,因此,剛剛在container中創建的django項目,在宿主機上也能看到。
container:
root@7c91f460599f:/usr/src/app# lsDockerfile ?dj_example ? ?pip.conf ?requirements.txt
宿主機:
django-example ls
Dockerfile ? ? ? dj_example ? ? ? pip.conf ? ? ? ? requirements.txt
5. 啟動django項目
docker run -it --rm -p 8000:8000 -v $(pwd):/usr/src/app gevin/django-example:0.1 python dj_example/manage.py runserver 0.0.0.0:8000
二、Docker-compose與Django環境的結合
每次使用上面章節中介紹的冗長命令來使用django環境非常麻煩,docker-compose可以簡化操作。
首先在當前目錄下創建docker-compose.yml文件:
? ?django-example touch docker-compose.yml
然后在該文件中寫入如下內容:
version: '2'
services:
django-example:
image: gevin/django-example:0.1
volumes:
- ./dj_example:/usr/src/app
ports:
- 8000:8000
command: python manage.py runserver 0.0.0.0:8000
執行下面命令即可拉起django服務:
? ?django-example docker-compose up# Starting djangoexample_django-example_1# Attaching to djangoexample_django-example_1
在瀏覽器中訪問,即可看到默認的django頁面
注:
上面的docker-compose文件,把./dj_example目錄掛載到/usr/src/app,免去執行django命令時,需要對應到下級目錄的麻煩,但這樣隱藏了原來container中的requirements.txt文件,需要注意。
基于docker-compose 執行django 命令
使用docker-compose 的 run命令,可以在容器內執行相應操作,如:
對django服務的數據庫做migrate操作:
docker-compose run django-example python manage.py migrate
創建超級用戶:
docker-compose run django-example python manage.py createsuperuser# Username (leave blank to use 'root'): gevin# Email address:# Password:# Password (again):# Superuser created successfully.
創建成功后,訪問,即可使用剛創建的用戶(即gevin),登錄數據庫管理頁面
由于使用了數據卷,保存在sqlite數據庫中的數據會一直有效。
三、簡化方案
上面方案已經成功構建了django 環境,并應用于開發。上面的方案主要是為了闡述實現思路,在實際操作起來至少有兩個麻煩:(1)需要進入容器里面創建django項目;(2)由于django項目是建立在當前目錄的子目錄下,使用docker-compose 時為了命令簡單通用,更換了數據卷。
在實踐中,利用docker-compose的run命令,沒必要進入容器創建django項目;只要把django項目建立在當前目錄下,也沒必要更換數據卷了。
因此,可以把上面的方案再理一下,按下面步驟構建開發環境,并應用到開發中去。
Outline:
創建Dockerfile文件
構建鏡像
創建docker-compose文件
創建項目
拉起項目
1. 創建Dockerfile文件
對Python開發環境而言,最好再創建pip.conf和requirements.txt文件,以便方便安裝項目必須的Python依賴,其他語言的開發環境就具體情況而定。
以Python為例,Dockerfile 內容如下:
# MAINTAINER ? ? ? ?Gevin flyhigher139@gmail.com
# DOCKER-VERSION ? ?1.12.0
#
# Dockerizing Python: Dockerfile for building python applications
FROM python:2.7.12
MAINTAINER Gevin flyhigher139@gmail.com
WORKDIR /usr/src/app
# 使用阿里云的pip鏡像
COPY pip.conf /root/.pip/pip.conf
COPY requirements.txt /usr/src/app/requirements.txt
RUN pip install -r /usr/src/app/requirements.txt
EXPOSE 8000
CMD ["bash"]
2. ?構建鏡像
docker build -t gevin/django-example:0.1 .
3. ?創建docker-compose文件
docker-compose文件內容如下:
version: '2'
services:
? django-example:
? ?image: gevin/django-example:0.1
? ?volumes:
? ? ?- .:/usr/src/app
? ?ports:
? ? ?- 8000:8000
? ?command: python manage.py runserver 0.0.0.0:8000
4. ?創建項目
docker-compose run django-example django-admin startproject dj_project .
果然需要migrate數據庫,創建超級用戶等,可以在這里一并創建,也可以在后面的開發中再創建:
docker-compose run django-example python manage.py migrate
docker-compose run django-example python manage.py createsuperuser
5. ?拉起項目
docker-compose up
四、其他
Gevin認為,雖然基于docker可以構建開發環境,但還是vagrant用起來更舒服,docker更加適合做CI,測試和部署。
實際工作中如何使用docker,就仁者見仁,智者見智了。
作者:Gevin
鏈接:
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
Docker容器虛擬化的好處
Docker項目的發起人和Docker Inc.的CTO Solomon Hykes認為,Docker在正確的地點、正確的時間順應了正確的趨勢—即高效地構建應用。現在開發者需要能方便地創建運行在云平臺上的應用,也就是說應用必須能夠脫離底層機器,而且同時必須是“任何時間任何地點”可獲取的。因此,開發者們需要一種創建分布式應用程序的方式,這也是Docker所能夠提供的。
舉個簡單的應用場景的例子。假設用戶試圖基于最常見的LAMP(Linux + Apache + MySQL + PHP)組合來運維一個網站。按照傳統的做法,首先,需要安裝Apache、MySQL 和PHP以及它們各自運行所依賴的環境;之后分別對它們進行配置(包括創建合適的用戶、配置參數等);經過大量的操作后,還需要進行功能測試,看是否工作正常;如果不正常,則意味著更多的時間代價和不可控的風險。可以想象,如果再加上更多的應用,事情會變得更加難以處理。
更為可怕的是,一旦需要服務器遷移(例如從阿里云遷移到騰訊云),往往需要重新部署和調試。這些瑣碎而無趣的“體力活”,極大地降低了工作效率。
而Docker提供了一種更為聰明的方式,通過容器來打包應用,意味著遷移只需要在新的服務器上啟動需要的容器就可以了。這無疑將節約大量的寶貴時間,并降低部署過程出現問題的風險。
Docker在開發和運維中的優勢
對開發和運維(DevOps)人員來說,可能最夢寐以求的就是一次性地創建或配置,可以在任意環境、任意時間讓應用正常地運行。而Docker恰恰是可以實現這一終極目標的瑞士軍刀。
具體說來,Docker在開發和運維過程中,具有如下幾個方面的優勢。
更快速的交付和部署。使用Docker,開發人員可以使用鏡像來快速構建一套標準的開發環境;開發完成之后,測試和運維人員可以直接使用相同環境來部署代碼。Docker可以快速創建和刪除容器,實現快速迭代,大量節約開發、測試、部署的時間。并且,各個步驟都有明確的配置和操作,整個過程全程可見,使團隊更容易理解應用的創建和工作過程。
更高效的資源利用。Docker容器的運行不需要額外的虛擬化管理程序(Virtual Machine Manager,VMM,以及Hypervisor)支持,它是內核級的虛擬化,可以實現更高的性能,同時對資源的額外需求很低。
更輕松的遷移和擴展。Docker容器幾乎可以在任意的平臺上運行,包括物理機、虛擬機、公有云、私有云、個人電腦、服務器等。 這種兼容性讓用戶可以在不同平臺之間輕松地遷移應用。
更簡單的更新管理。使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。并且所有修改都以增量的方式進行分發和更新,從而實現自動化并且高效的容器管理。
Docker與虛擬機比較
作為一種輕量級的虛擬化方式,Docker在運行應用上跟傳統的虛擬機方式相比具有顯著優勢:
Docker容器很快,啟動和停止可以在秒級實現,這相比傳統的虛擬機方式要快得多。
Docker容器對系統資源需求很少,一臺主機上可以同時運行數千個Docker容器。
Docker通過類似Git的操作來方便用戶獲取、分發和更新應用鏡像,指令簡明,學習成本較低。
Docker通過Dockerfile配置文件來支持靈活的自動化創建和部署機制,提高工作效率。
Docker容器除了運行其中的應用之外,基本不消耗額外的系統資源,保證應用性能的同時,盡量減小系統開銷。傳統虛擬機方式運行N個不同的應用就要啟動N個虛擬機(每個虛擬機需要單獨分配獨占的內存、磁盤等資源),而Docker只需要啟動N個隔離的容器,并將應用放到容器內即可。
當然,在隔離性方面,傳統的虛擬機方式多了一層額外的隔離。但這并不意味著Docker就不安全。Docker利用Linux系統上的多種防護機制實現了嚴格可靠的隔離。從1.3版本開始,Docker引入了安全選項和鏡像簽名機制,極大地提高了使用Docker的安全性。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。