Docker的基本使用

# 轉載請留言聯繫

 

  • Docker是什麼?

Docker 是一個開源的應用容器引擎,基於 Go 語言 並聽從Apache2.0協議開源。html

Docker 可讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,而後發佈到任何流行的 Linux 機器上,也能夠實現虛擬化。linux

容器是徹底使用沙箱機制,相互之間不會有任何接口(相似 iPhone 的 app),更重要的是容器性能開銷極低。web

 

  • Docker的優勢

 

  • 一、簡化程序:

Docker 讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的 Linux 機器上,即可以實現虛擬化。Docker改變了虛擬化的方式,使開發者能夠直接將本身的成果放入Docker中進行管理。方便快捷已是 Docker的最大優點,過去須要用數天乃至數週的 任務,在Docker容器的處理下,只須要數秒就能完成。redis

 

 

  • 二、避免選擇恐懼症:

若是你有選擇恐懼症,仍是資深患者。Docker 幫你 打包你的糾結!好比 Docker 鏡像;Docker 鏡像中包含了運行環境和配置,因此 Docker 能夠簡化部署多種應用實例工做。好比 Web 應用、後臺應用、數據庫應用、大數據應用好比 Hadoop 集羣、消息隊列等等均可以打包成一個鏡像部署。docker

 

  • 三、節省開支:

一方面,雲計算時代到來,使開發者沒必要爲了追求效果而配置高額的硬件,Docker 改變了高性能必然高價格的思惟定勢。Docker 與雲的結合,讓雲空間獲得更充分的利用。不只解決了硬件管理的問題,也改變了虛擬化的方式。shell

 

  • Docker組件

1)Docker 客戶端和服務器

Docker 是一個客戶端-服務器(C/S)架構程序。Docker 客戶端只須要向 Docker 服務器 或者守護進程發出請求,服務器或者守護進程將完成全部工做並返回結果。Docker 提供了 一個命令行工具 Docker 以及一整套 RESTful API。你能夠在同一臺宿主機上運行 Docker 守護 進程和客戶端,也能夠從本地的 Docker 客戶端鏈接到運行在另外一臺宿主機上的遠程 Docker 守護進程。數據庫

 

 

2)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 文件進行加工,而不是從零開始製做。

 

3)Registry(註冊中心)

Docker 用 Registry 來保存用戶構建的鏡像。Registry 分爲公共和私有兩種。Docker 公司 運營公共的 Registry 叫作 Docker Hub。用戶能夠在 Docker Hub 註冊帳號,分享並保存本身的 鏡像(說明:在 Docker Hub 下載鏡像巨慢,能夠本身構建私有的 Registry)。

 

4)Docker容器

Docker 能夠幫助你構建和部署容器,你只須要把本身的應用程序或者服務打包放進容 器便可。容器是基於鏡像啓動起來的,容器中能夠運行一個或多個進程。咱們能夠認爲,鏡 像是Docker生命週期中的構建或者打包階段,而容器則是啓動或者執行階段。 容器基於 鏡像啓動,一旦容器啓動完成後,咱們就能夠登陸到容器中安裝本身須要的軟件或者服務。

 

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服務

 

  • 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

  • Docker的容器

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 容器名 鏡像名
相關文章
相關標籤/搜索