Docker 是一個開源的應用容器引擎,基於 Go 語言 並聽從Apache2.0協議開源。html
Docker 可讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,而後發佈到任何流行的 Linux 機器上,也能夠實現虛擬化。linux
容器是徹底使用沙箱機制,相互之間不會有任何接口(相似 iPhone 的 app),更重要的是容器性能開銷極低。web
- 一、簡化程序:
Docker 讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的 Linux 機器上,即可以實現虛擬化。Docker改變了虛擬化的方式,使開發者能夠直接將本身的成果放入Docker中進行管理。方便快捷已是 Docker的最大優點,過去須要用數天乃至數週的 任務,在Docker容器的處理下,只須要數秒就能完成。redis
- 二、避免選擇恐懼症:
若是你有選擇恐懼症,仍是資深患者。Docker 幫你 打包你的糾結!好比 Docker 鏡像;Docker 鏡像中包含了運行環境和配置,因此 Docker 能夠簡化部署多種應用實例工做。好比 Web 應用、後臺應用、數據庫應用、大數據應用好比 Hadoop 集羣、消息隊列等等均可以打包成一個鏡像部署。docker
- 三、節省開支:
一方面,雲計算時代到來,使開發者沒必要爲了追求效果而配置高額的硬件,Docker 改變了高性能必然高價格的思惟定勢。Docker 與雲的結合,讓雲空間獲得更充分的利用。不只解決了硬件管理的問題,也改變了虛擬化的方式。shell
Docker 是一個客戶端-服務器(C/S)架構程序。Docker 客戶端只須要向 Docker 服務器 或者守護進程發出請求,服務器或者守護進程將完成全部工做並返回結果。Docker 提供了 一個命令行工具 Docker 以及一整套 RESTful API。你能夠在同一臺宿主機上運行 Docker 守護 進程和客戶端,也能夠從本地的 Docker 客戶端鏈接到運行在另外一臺宿主機上的遠程 Docker 守護進程。數據庫
Docker 鏡像是由文件系統疊加而成(是一種文件的存儲形式)。最底端是一個文件引 導系統,即 bootfs,這很像典型的 Linux/Unix 的引導文件系統。Docker 用戶幾乎永遠不會和 引導系統有什麼交互。實際上,當一個容器啓動後,它將會被移動到內存中,而引導文件系 統則會被卸載,以留出更多的內存供磁盤鏡像使用。Docker 容器啓動是須要一些文件的, 而這些文件就能夠稱爲 Docker 鏡像。ubuntu
Docker 把應用程序及其依賴,打包在 image 文件裏面。只有經過這個文件,才能生成 Docker 容器。image 文件能夠看做是容器的模板。Docker 根據 image 文件生成容器的實例。同一個 image 文件,能夠生成多個同時運行的容器實例。bash
image 是二進制文件。實際開發中,一個 image 文件每每經過繼承另外一個 image 文件,加上一些個性化設置而生成。舉例來講,你能夠在 Ubuntu 的 image 基礎上,往裏面加入 Apache 服務器,造成你的 image。服務器
image 文件是通用的,一臺機器的 image 文件拷貝到另外一臺機器,照樣可使用。通常來講,爲了節省時間,咱們應該儘可能使用別人製做好的 image 文件,而不是本身製做。即便要定製,也應該基於別人的 image 文件進行加工,而不是從零開始製做。
Docker 用 Registry 來保存用戶構建的鏡像。Registry 分爲公共和私有兩種。Docker 公司 運營公共的 Registry 叫作 Docker Hub。用戶能夠在 Docker Hub 註冊帳號,分享並保存本身的 鏡像(說明:在 Docker Hub 下載鏡像巨慢,能夠本身構建私有的 Registry)。
Docker 能夠幫助你構建和部署容器,你只須要把本身的應用程序或者服務打包放進容 器便可。容器是基於鏡像啓動起來的,容器中能夠運行一個或多個進程。咱們能夠認爲,鏡 像是Docker生命週期中的構建或者打包階段,而容器則是啓動或者執行階段。 容器基於 鏡像啓動,一旦容器啓動完成後,咱們就能夠登陸到容器中安裝本身須要的軟件或者服務。
1)安裝(基於Ubuntu16.04)
sudo apt-key add gpg sudo dpkg -i docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb
2)Docker服務端的啓動與中止
docker是一個客戶端-服務端(C/S)架構程序,相似redis。
- 客戶端: docker命令行工具
- 服務器: Docker守護進程(docker引擎)
只有在服務端運行時,輸入docker的命令才能運行。咱們平時用的終端界面就是docker的客戶端。
# 啓動docker sudo service docker start # 中止docker sudo service docker stop # 重啓docker sudo service docker restart
注意:安裝完成Docker後,默認已經啓動了docker服務
1)搜索可用的docker鏡像
sudo docker search [鏡像名字]
示例:sudo docker search ubuntu
2)下載docker鏡像
sudo docker pull [鏡像名字]
注意:要寫完整的名字
示例:sudo docker pull ubuntu
3)加載本地鏡像
若是有已經下載好的鏡像,能夠直接加載
sudo docker load -i [包的位置]
-i, –input string Read from tar archive file, instead of STDIN
從tar歸檔文件讀取鏡像,而不是標準輸入流示例:sudo docker load -i ./ubuntu.tar
4) 刪除鏡像
sudo docker image rm [鏡像名字或鏡像id]
示例:sudo docker image rm ubuntu
5)鏡像的備份與遷移
咱們能夠經過save命令將鏡像打包成文件,拷貝給別人使用
sudo docker save -o 保存的文件名 鏡像名
示例:
sudo docker save -o ./裝載了web應用的鏡像.tar ubuntu
而後能夠拷貝給別人,別人拿到以後,用3)的方法就能夠運行了。
6)列出鏡像
sudo docker image ls
1)列出本機正在運行的容器
sudo docker container ls
- REPOSITORY:鏡像所在的倉庫名稱
- TAG:鏡像標籤
- IMAGEID:鏡像ID
- CREATED:鏡像的建立日期(不是獲取該鏡像的日期)
- SIZE:鏡像大小
2)列出本機全部容器,包括已經終止運行的
sudo docker container ls --all
3)建立容器
sudo docker run [option] 鏡像名 [向啓動容器中傳入的命令]經常使用可選參數說明:
- -i 表示以「交互模式」運行容器
- -t 表示容器啓動後會進入其命令行。加入這-it兩個參數後,容器建立就能登陸進去。即分配一個僞終端。
- --name 爲建立的容器命名
- -v 表示目錄映射關係(前者是宿主機目錄,後者是映射到宿主機上的目錄,即 宿主機目錄:容器中目錄),可使 用多個-v 作多個目錄或文件映射。注意:最好作目錄映射,在宿主機上作修改,而後 共享到容器上。
- -d 在run後面加上-d參數,則會建立一個守護式容器在後臺運行(這樣建立容器後不 會自動登陸容器,若是隻加-i -t 兩個參數,建立後就會自動進去容器)。
- -p 表示端口映射,前者是宿主機端口,後者是容器內的映射端口。可使用多個-p 作多個端口映射
- -e 爲容器設置環境變量
- --network=host 表示將主機的網絡環境映射到容器中,容器的網絡與主機相同
示例1:
若是是建立一個交互式的容器。
sudo docker run -it --name=myubuntu ubuntu /bin/bash
在容器中能夠隨意執行linux命令,就是一個ubuntu的環境,當執行exit命令退出時,該容器也隨之中止。注意是中止,不是沒了。用sudo docker container ls --all列出全部容器(包括已終止的),能夠看到容器還在的。
示例2:
若是是建立一個守護式的容器。
對於一個須要長期運行的容器來講,咱們能夠建立一個守護式容器。在容器內部exit退出時,容器也不會中止。
sudo docker run -dit --name=damonubuntu ubuntu [命令(可選)]
(爲何不用-d而用-dit呢?緣由就是:Docker容器後臺運行,就必須有一個前臺進程。主線程結束,容器會退出。)
4)進入已運行的容器
例如,我想進入剛剛建立的守護式容器damonubuntu。
sudo docker exec -it
容器名或容器id 進入後執行的第一個命令
示例:sudo docker exec -it damonubuntu /bin/ls
5)中止與啓動容器
# 中止一個已經在運行的容器 sudo docker container stop 容器名或容器id # 啓動一個已經中止的容器 sudo docker container start 容器名或容器id # kill掉一個已經在運行的容器 sudo docker container kill 容器名或容器id
6)刪除容器
sudo docker container rm 容器名或容器id
7)將容器保存爲鏡像
sudo docker commit 容器名 鏡像名