10 分鐘入門 Docker,帶你贏在起跑線上!

Build,Ship and Run Any App,Anywhere

什麼是docker?

想學好Docker首先需要理解它。

Docker 到底是個什麼東西呢?很多同學都用過虛擬機,但是對容器這個概念比較的陌生。我們可以藉助虛擬機的概念幫助我們更好的理解Docker。

10 分鐘入門 Docker,帶你贏在起跑線上!

我們用的傳統虛擬機有:VMware , VirtualBox 之類的需要模擬整臺機器包括硬件。每臺虛擬機都需要有自己的操作系統,虛擬機一旦被開啟,預分配給它的資源將全部被佔用。每一臺虛擬機包括應用,必要的二進制和庫,以及一個完整的用戶操作系統。

10 分鐘入門 Docker,帶你贏在起跑線上!

而容器技術是和我們的宿主機共享硬件資源及操作系統,可以實現資源的動態分配。容器包含應用和其所有的依賴包,但是與其他容器共享內核。容器在宿主機操作系統中,在用戶空間以分離的進程運行。容器技術是實現操作系統虛擬化的一種途徑,可以讓您在資源受到隔離的進程中運行應用程序及其依賴關係。

10 分鐘入門 Docker,帶你贏在起跑線上!

舉例:

場景1:.net開發的網站和php開發的網站依賴的軟件不一樣,如果把他們依賴的軟件都安裝在一個服務器上就要調試很久,不僅很麻煩,還會造成一些衝突。 比如IIS和Apache訪問端口衝突。這個時候你就要隔離.net開發的網站和php開發的網站。常規來講,我們可以在服務器上創建不同的虛擬機在不同的虛擬機上放置不同的應用,但是虛擬機開銷比較高。docker可以實現虛擬機隔離應用環境的功能,並且開銷比虛擬機小。

場景2:你開發軟件的時候用的是Ubuntu,但是運維管理的都是centos,運維在把你的軟件從開發環境轉移到生產環境的時候就會遇到一些Ubuntu轉centos的問題,比如:有個特殊版本的數據庫,只有Ubuntu支持,centos不支持,在轉移的過程當中運維就得想辦法解決這樣的問題。這時候要是有docker你就可以把開發環境直接封裝轉移給運維,運維直接部署你給他的docker就可以了。而且部署速度快。

Docker 三大重要概念:

10 分鐘入門 Docker,帶你贏在起跑線上!

鏡像(Image),鏡像是隻讀的,鏡像中包含需要運行的文件(提供容器運行時所需的程序、庫、資源、配置等文件,還包含了一些為運行時準備的一些配置參數)。鏡像用來創建container,一個鏡像可以運行多個container;鏡像可以通過Dockerfile創建,也可以從Docker hub/registry上下載。

容器(Container),是Docker的運行組件,啟動一個鏡像就是一個容器,容器是一個隔離環境,多個容器之間不會相互影響,保證容器中的程序運行在一個相對安全的環境中。

倉庫(Repository),從認識上來說,就好像軟件包上傳下載站,有各種軟件的不同版本被上傳供用戶下載,共享和管理Docker鏡像,官方地址為:https://registry.hub.docker.com/

我們可以用Docker幹嘛呢?

10 分鐘入門 Docker,帶你贏在起跑線上!

舉簡單的幾個例子:

  1. 辛辛苦苦,兢兢業業幾個月的產品中午開發好了,要去給客戶演示的時,搭建演示環境就很麻煩,這個時候我可以直接將 Docker 鏡像提供給他們。
  2. 寫前端的同學和寫後端的同學開發,或者不同負責不同模塊的同學開發時配置的環境不同,一測試就衝突,無法正常運行。Docker就能很好的解決這個問題。
  3. 目前大多數的雲主機提供商已經全面支持 Docker,如果你的開發測試是在本地的,正式業務是再雲上,那麼你需要在雲主機上還配置一次運行環境。這個時候就可以使用Docker。
  4. 多個應用系統公用一臺服務器的時候,修改某個系統參數之後需要重啟服務器,其他業務可能也會受到影響,如果你使用的是Docker,你只需要重啟參數修改的container即可。

開啟我們的Docker之旅

安裝

  • Windows安裝

Windows主機,可以下載docker-toolbox(www.docker.com/products/docker-desktop)一鍵安裝,安裝過程中如果提示什麼錯,可以把360等類似軟件關閉。Windows安裝好Docker後,使用Docker Quickstart Terminal運行。

10 分鐘入門 Docker,帶你贏在起跑線上!

  • Linux安裝(以Ubuntu16.04+為例)
sudo apt-get update
apt-get install docker

其他系統安裝可以參考官網地址:https://docs.docker.com/install/

Docker常用命令

10 分鐘入門 Docker,帶你贏在起跑線上!

docker

# 查看 docker 版本
docker version
# 顯示 docker 系統的信息
docker info

images

# 檢索 image
docker search image_name
# 下載 image
docker pull image_name
# 列出鏡像列表
docker images
# 刪除一個或者多個鏡像
docker rmi image_name
# 顯示一個鏡像的歷史
docker history image_name

查看容器

# 列出當前所有正在運行的container 
docker ps
# 列出所有的container
docker ps -a
# 列出最近一次啟動的container
docker ps -l

操作容器

# 刪除所有容器 
docker rm `docker ps -a -q`
# 刪除單個容器;
docker rm Name/ID
# 停止、啟動、殺死一個容器
docker stop Name/ID
docker start Name/ID
docker kill Name/ID
# 從一個容器中取日誌;

docker logs Name/ID
# 列出一個容器裡面被改變的文件或者目錄
list列表會顯示出三種事件
A 增加的
D 刪除的
C 被改變的
docker diff Name/ID
# 顯示一個運行的容器裡面的進程信息
docker top Name/ID
# 從容器裡面拷貝文件/目錄到本地一個路徑
docker cp Name:/container_path to_path
docker cp ID:/container_path to_path
# 重啟一個正在運行的容器
docker restart Name/ID
# 附加到一個運行的容器上面
docker attach ID

保存和加載鏡像

# 保存鏡像到一個tar包; -o, --output="" Write to an file 
docker save image_name -o file_path
# 加載一個tar包格式的鏡像; -i, --input="" Read from a tar archive file
docker load -i file_path
# 機器a
docker save image_name > /home/save.tar
# 使用scp將save.tar拷到機器b上,然後:
docker load < /home/save.tar

登錄、發佈

# 登陸registry server 

docker login
# 發佈
docker push new_image_name

悄悄告訴你:記得點關注哦~

10 分鐘入門 Docker,帶你贏在起跑線上!


分享到:


相關文章: