初識Docker
Docker是什么?
Docker 是一個開源的應用容器引擎,基於 Go 語言並遵從Apache2.0協議開源。
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。
容器是完全使用沙箱機制,相互之間不會有任何接口,更重要的是容器性能開銷極低。
Docker與傳統虛擬化的不同之處
Docker與傳統虛擬化的不同之處在於:傳統虛擬機技術是虛擬出一套硬件后,在其上運行一個完整操作系統,在該系統上再運行所需應用進程;而容器內的應用進程直接運行於宿主的內核,容器內沒有自己的內核,而且也沒有進行硬件虛擬。因此容器要比傳統虛擬機更為輕便。
Docker的優勢
Docker的五大優勢為:
- 持續集成
- 版本控制
- 可移植性
- 隔離性
- 安全性
關於其說明,具體可參考網址:http://dockone.io/article/389 。
Docker的安裝
本文以Mac系統為例,講解Docker的安裝,其它系統的安裝方式可參考:安裝 Docker 。
使用 Homebrew 安裝
Homebrew 的 Cask 已經支持 Docker for Mac,因此可以很方便的使用 Homebrew Cask 來進行安裝:
brew cask install docker
手動下載安裝
如果需要手動下載,可以通過這個鏈接下載:https://download.docker.com/mac/stable/Docker.dmg 。如同 MacOS 其它軟件一樣,安裝也非常簡單,雙擊下載的 .dmg
文件,然后將鯨魚圖標拖拽到 Application
文件夾即可。
啟動Docker
從應用中找到 Docker 圖標並點擊,即可啟動Docker,啟動后在最上側的菜單欄狀態如下:
啟動終端后,通過命令可以檢查安裝后的 Docker 版本:
$ docker --version
Docker version 18.09.1, build 4c52b90
接着我們運行docker中的hello world來驗證docker是否安裝且啟動成功:
Dockerhub賬號注冊
為了方便展示以及后續的docker使用,我們最好在DockerHub上注冊一個自己的賬號。 DockerHub,類似於代碼管理的Github,可以簡單高效地管理我們的docker項目。
DockerHub的注冊地址為:https://hub.docker.com/signup,界面如下:
注冊完DockerHub后,我們登錄個人賬號。點擊Create Repository +
按鈕新建Docker倉庫,名字為dockertest。如下:
再點擊Create
按鈕即可。創建后的dockertest項目如下:
至此,我們已經在DockerHub上創建了一個自己的賬號,並且新建的一個dockertest倉庫,盡管這個倉庫里面沒有任何東西。
下一步,我們往dockertest這個倉庫里面裝點什么。
Docker使用實例:hello world
首先,我們需要用docker在本地打包一個docker鏡像,然后對其打標簽(tag),然后將其推送(push)至個人的dockerhub賬號中的dockertest倉庫,最后將該鏡像拉下來,並運行。
鏡像打包
- 新建mydocker文件夾
$ tree mydocker
mydocker
├── src
│ └── test_docker.py
└── test_docker.build
- test_docker.py代碼:
print "hello world from python!"
print "this is from docker!"
- test_docker.build代碼(利用Dockerfile打包鏡像):
FROM centos:7.2.1511
#環境變量硬編碼及時區
ENV ENVIRONMENT DOCKER_PROD
RUN cd / && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 拷貝並so加密代碼
COPY src /root/src
# 工作目錄
WORKDIR /root/src/
這里,我們不再過多講述上述Dockerfile中的命令,有興趣的同學可移步:http://blog.51cto.com/wutengfei/2156797 , 筆者也會在后續的文章中給出Dockerfile命令的詳細講述。
- 命令行打包鏡像:
cd ./mydocker
docker build -f test_docker.build -t hub.docker.com/dockertest:test.1111 .
列出鏡像
在打包完鏡像后,我們可以列出docker的鏡像,查看鏡像的ID,方便后續操作。命令為docker images
,如下:
由此可知,我們新打包的docker鏡像的ID為be236e996983。
推送鏡像
- 打標簽(tag)
docker tag be236e996983 jclian91/dockertest:hello_world_test_19.01.31.1100
鏡像ID可通過docker images查看。
- 登錄dockerhub賬號
docker login
再輸入自己的賬號、密碼即可。
- 推送(push)鏡像
docker push jclian91/dockertest:hello_world_test_19.01.31.1100
所有命令的界面如下:
此時,我們去dockerhub的dockertest倉庫中去查看,發現已經上傳一個鏡像了,如下:
運行鏡像
- 為了運行新上傳的鏡像,我們先刪除本地打包的鏡像:
$ docker rmi -f be236e996983
Untagged: jclian91/dockertest:hello_world_test_19.01.31.1100
Untagged: jclian91/dockertest@sha256:c2ac02cb725a8256c2d752461133004cc05a6060390220b15a0aaefefc7c95e7
Untagged: hub.docker.com/dockertest:test.1111
Deleted: sha256:be236e996983339318796f588fd5acda1da5f942289a2559f948a4811d68428d
Deleted: sha256:5c46baa463a1e86d0924c493bb0e12888fc6aaefdcaf128d8193406eb0ef4ed1
Deleted: sha256:f76e87a3e84bf1a03e81dfdc53a569a7adce6cfc80bb56d7d2040e118e2848f7
- 拉取(pull)新上傳的鏡像
docker pull jclian91/dockertest:hello_world_test_19.01.31.1100
- 運行(run)該鏡像
docker run -it be236e996983 bash
參數說明:其中 -i
:交互式操作, -t
:終端,如存在-d參數,-d
:后台運行。
這樣我們就能進入到這台用docker創建好的虛擬機內部了,我們在該Linux虛擬機內部運行命令,如下:
[root@ca9070ce82e1 src]# ls
test_docker.py
[root@ca9070ce82e1 src]# python test_docker.py
hello world from python!
this is from docker!
總結
hello world是所有編程語言的入門例子,在本文中,我們用docker自己創建了一個hello world的例子,用來展示docker的基本用法,希望能給初入門的同學一個明顯直觀的例子。
后續的文章將會更多地介紹docker方面的知識,歡迎大家關注,如有任何疑問,請在留言區留言。
注意:本人現已開通微信公眾號: Python爬蟲與算法(微信號為:easy_web_scrape), 歡迎大家關注哦~~
參考文獻:
-
Docker —— 從入門到實踐: https://yeasy.gitbooks.io/docker_practice/content/install/
-
Docker基本介紹和操作:http://blog.51cto.com/wutengfei/2156381
-
Docker 教程: http://www.runoob.com/docker/docker-tutorial.html
-
《第一本Docker書 修訂版》 詹姆斯·特恩布爾 人民郵電出版社