Docker的安裝和命令使用

虛擬化技術

虛擬化技術是對軟件基礎設施、操做系統、軟件等IT資源進行有效的管理,使用戶再也不受物理資源的限制,提升計算機資源的利用率。虛擬化技術是雲計算的基礎,例如阿里雲的雲主機、騰訊雲等都應用了虛擬化技術。
虛擬化技術總體上包括兩個方面:硬件虛擬化和軟件虛擬化,具體分爲:網絡虛擬化、存儲虛擬化、桌面虛擬化、服務器虛擬化等,咱們日常說的最多的是服務器虛擬化。
服務器虛擬化就是在同一個物理服務器上運行多個虛擬機,讓服務器的cpu、內存、磁盤、I/O等硬件設施爲每一個虛擬機服務,在每一個虛擬機中運行不一樣的軟件,虛擬機之間是隔離狀態。html

服務器虛擬化主要有兩種技術:
一、Hypervisor也叫VMM(virtual machine monitor)即虛擬機監視器
Hypervisor是一種將操做系統與硬件抽象分離的方法,實如今宿主機(host machine)上能同時運行多個客戶機(guest machine),每一個客戶機就是一個虛擬機,這些虛擬機高效地分享宿主機的硬件資源。
1.jpg
在服務器(宿主機)上安裝操做系統,並安裝hypervisor虛擬機管理軟件,如VMware、VirtualBox等,由hypervisor管理多個虛擬機,每一個虛擬機上須要安裝客戶操做系統、依賴庫、應用軟件。java

容器化技術

容器技術中docker引擎取代了hypervisor,docker引擎是運行在住宿操做系統上的一個進程,該進程管理了多個docker容器,每一個docker容器集成了應用軟件、依賴庫,容器之間相互隔離。
2.jpgmysql

技術對比:linux

  • 資源佔用:虛擬機因爲是獨立的操做系統,佔用資源比docker多。
  • 啓動速度:虛擬機包括操做系統,啓動虛擬機至關於啓動一個操做系統,容器則不同,容器中只包括操做系統的內核,啓動一個容器實例至關於啓動一個進程,容器的啓動速度比虛擬機快。
  • 體積:容器包括操做系統內核、軟件及依賴庫,虛擬機不只包括軟件和依賴庫還將完整的操做系統打包進去,虛擬機的體積比容器大的多。

docker簡介

Docker 是一個開源的應用容器引擎,基於 Go 語言 並聽從Apache2.0協議開源。Docker 可讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,而後發佈到任何流行的 Linux 機器上,也能夠實現虛擬化。容器是徹底使用沙箱機制,相互之間不會有任何接口(相似 iPhone 的 app),更重要的是容器性能開銷極低。
1.jpgnginx

  • 一、Docker daemon(Docker守護進程): Docker守護進程是部署在操做系統上,負責支撐Docker Container的運行以及本地Image的管理。
  • 二、Docker client: 用戶不直接操做Docker daemon,用戶經過Docker client訪問Docker,Docker client提供pull、run等操做命令。
  • 三、Docker Image: Docker 鏡像就是一個只讀的模板。 例如:一個鏡像能夠包含一個完整的 ubuntu 操做系統環境,裏面僅安裝了 Tomcat或用戶須要的其它應用程序。 鏡像能夠用來建立 Docker 容器。 Docker 提供了一個很簡單的機制來建立鏡像或者更新現有的鏡像,用戶甚至能夠直接從其餘人那裏下載一個已經作好的鏡像來直接使用。
  • 四、Docker Container: Docker 利用容器來運行應用。容器是從鏡像建立的運行實例。它能夠被啓動、開始、中止、刪除。每一個容器都是相互隔離的、保證安全的平臺。打個比方,鏡像至關於類,容器至關於對象。
  • 五、Docker Registry: Docker 倉庫分爲公開倉庫(Public)和私有倉庫(Private)兩種形式 最大的公開倉庫是Docker Hub,存放了數量龐大的鏡像供用戶下載。 用戶也能夠在本地網絡內建立一個私有倉庫。 當用戶建立了本身的鏡像以後就可使用 push 命令將它上傳到公有或者私有倉庫,這樣下次在另一臺機器上使用這個鏡像時候,只須要從倉庫上 pull 下來就能夠了。

docker安裝

Docker能夠運行MAC、Windows、Centos、DEBIAN、UBUNTU等操做系統上,提供社區版和企業版,基於Centos安裝Docker。Centos6對docker支持的很差,使用docker建議升級到centos7。web

一、在Centos7上安裝Docker,直接經過yum安裝便可:spring

yum install -y docker

完成後查看docker版本:docker info 或docker -vsql

啓動docker:systemctl start docker
1.jpgdocker

經常使用命令使用

1.鏡像倉庫
1)docker pull : 從鏡像倉庫中拉取或者更新指定鏡像ubuntu

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

OPTIONS說明:

  • -a :拉取全部 tagged 鏡像
  • --disable-content-trust :忽略鏡像的校驗,默認開啓

從Docker Hub下載hello-world最新版鏡像。
1.jpg

2)docker push : 將本地的鏡像上傳到鏡像倉庫,要先登錄到鏡像倉庫
語法

docker push [OPTIONS] NAME[:TAG]

上傳本地鏡像test:v1到鏡像倉庫中,docker push test:v1

3)docker search : 從Docker Hub查找鏡像語法

docker search [OPTIONS] TERM

OPTIONS說明:

  • --automated :只列出 automated build類型的鏡像;
  • --no-trunc :顯示完整的鏡像描述;
  • -s :列出收藏數不小於指定值的鏡像。

從Docker Hub查找全部鏡像名包含java,而且收藏數大於10的鏡像
1.jpg

2.本地鏡像管理
1)docker images : 列出本地鏡像

docker images [OPTIONS] [REPOSITORY[:TAG]]

OPTIONS說明:

  • -a :列出本地全部的鏡像(含中間映像層,默認狀況下,過濾掉中間映像層)
  • --digests :顯示鏡像的摘要信息
  • -f :顯示知足條件的鏡像
  • --format :指定返回值的模板文件
  • --no-trunc :顯示完整的鏡像信息
  • -q :只顯示鏡像ID

這些鏡像都是存儲在Docker宿主機的/var/lib/docker目錄下
查看本地鏡像列表
1.jpg

2)docker rmi : 刪除本地一個或多少鏡像。

docker rmi [OPTIONS] IMAGE [IMAGE...]

OPTIONS說明:

  • -f :強制刪除
  • --no-prune :不移除該鏡像的過程鏡像,默認移除

強制刪除本地鏡像
1.jpg

刪除全部鏡像:

docker rmi `docker images -q`

按條件刪除鏡像

docker rmi `docker images -q | awk '/^<none>/ { print $3 }'` //沒有打標籤
docker rmi --force `docker images | grep test | awk '{print $3}'` //鏡像名包含關鍵字,其中test爲關鍵字

3)docker tag : 標記本地鏡像,將其納入某一倉庫。

docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

將鏡像hello-world:latest標記爲hello-world:v1 鏡像
docker tag hello-world:latest hello-world:v1

4)docker build : 使用Dockerfile建立鏡像

docker build [OPTIONS] PATH | URL | -

OPTIONS說明:

  • --build-arg=[] :設置鏡像建立時的變量
  • -f :指定要使用的Dockerfile路徑
  • -q :安靜模式,成功後只輸出鏡像ID

使用當前目錄的Dockerfile建立鏡像,Dockerfile內容爲:

[root@2 dockerjdk8]# cat Dockerfile 
FROM java:8
ADD docker-0.0.1-SNAPSHOT.jar /docker-test.jar 
EXPOSE 9000
ENTRYPOINT ["java","-jar","/docker-test.jar"]

docker build -t test-docker .
1.jpg

3.容器生命週期管理
1)docker run :建立一個新的容器並運行一個命令

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS說明:

  • -d: 後臺運行容器,並返回容器ID,會建立一個守護式容器在後臺運行(這樣建立容器後不會自動登陸容器,若是隻加-i-t兩個參數,建立後就會自動進去容器)
  • -i: 以交互模式運行容器,一般與 -t 同時使用
  • -t: 爲容器從新分配一個僞輸入終端,一般與 -i 同時使用
  • --name="nginx-lb": 爲容器指定一個名稱
  • -e username="ritchie": 設置環境變量
  • --env-file=[]: 從指定文件讀入環境變量
  • --expose=[]: 開放一個端口或一組端口
  • -v:表示目錄映射關係(前者是宿主機目錄,後者是映射到宿主機上的目錄),可使用多個一v作多個目錄或文件映射。注意:最好作目錄映射,在宿主機上作修改,而後共享到容器上(若是你共享的是多級的目錄,可能會出現權限不足的提示。這是由於CentOS7中的安全模塊selinux把權限禁掉了,咱們須要添加參數-privileged=true來解決掛載的目錄沒有權限的問題)
  • -p:表示端口映射,前者是宿主機端口,後者是容器內的映射端口。可使用多個-p作多個端口映射

使用鏡像nginx:latest以後臺模式啓動一個容器,將容器的80端口映射到主機的80端口,主機的目錄/data映射到容器的/data。

docker run -d -p 80:80 -v /data:/data nginx:latest

3.jpg

使用鏡像nginx:latest以交互模式啓動一個容器,在容器內執行/bin/bash命令。

docker run -it nginx:latest /bin/bash

使用docker鏡像nginx:latest之後臺模式啓動一個容器,並將容器命名爲mynginx。
docker run --name mynginx -d nginx:latest

使用鏡像nginx:latest之後臺模式啓動一個容器,並將容器的80端口映射到主機隨機端口。
docker run -p -d nginx:latest

2)docker start :啓動一個或多少已經被中止的容器
docker stop :中止一個運行中的容器
docker restart :重啓容器

3)docker rm :刪除一個或多少容器

docker rm [OPTIONS] CONTAINER [CONTAINER...]

OPTIONS說明:

  • -f :經過SIGKILL信號強制刪除一個運行中的容器
  • -l :移除容器間的網絡鏈接,而非容器自己
  • -v :-v 刪除與容器關聯的卷

強制刪除全部容器

docker rm -f `docker ps -a -q`

4)docker create :建立一個新的容器但不啓動它

docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

使用docker鏡像nginx:latest建立一個容器,並將容器命名爲nginx-test
4.jpg

5)docker exec :在運行的容器中執行命令

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

OPTIONS說明:

  • -d :分離模式: 在後臺運行
  • -i :即便沒有附加也保持STDIN 打開
  • -t :分配一個僞終端

在容器elastic_pasteur中開啓一個交互模式的終端
[root@2 ~]# docker exec -it elastic_pasteur /bin/bash
root@7fee9a910b13:/#

4.容器操做
1)docker ps : 列出容器

docker ps [OPTIONS]

OPTIONS說明:

  • -a :顯示全部的容器,包括未運行的
  • -f :根據條件過濾顯示的內容
  • --format :指定返回值的模板文件
  • -l :顯示最近建立的容器
  • -n :列出最近建立的n個容器
  • --no-trunc :不截斷輸出
  • -q :靜默模式,只顯示容器編號
  • -s :顯示總的文件大小

列出全部建立的容器ID
1.jpg

2)docker inspect : 獲取容器/鏡像的元數據。

docker inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...]

OPTIONS說明:

  • -f :指定返回值的模板文件
  • -s :顯示總的文件大小
  • --type :爲指定類型返回JSON

獲取正在運行的容器elastic_pasteur的IP
docker inspect -f '{{.NetworkSettings.IPAddress}}' elastic_pasteur

3)docker top :查看容器中運行的進程信息,支持 ps 命令參數

docker top [OPTIONS] CONTAINER [ps OPTIONS]

容器運行時不必定有/bin/bash終端來交互執行top命令,並且容器還不必定有top命令,可使用docker top來實現查看container中正在運行的進程。

查看容器mymysql的進程信息
docker top elastic_pasteur
查看全部運行容器的進程信息

for i in  `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done

4)docker logs : 獲取容器的日誌

docker logs [OPTIONS] CONTAINER

OPTIONS說明:

  • -f : 跟蹤日誌輸出
  • --since :顯示某個開始時間的全部日誌
  • -t : 顯示時間戳
  • --tail :僅列出最新N條容器日誌

跟蹤查看容器elastic_pasteur的日誌輸出
docker logs -f elastic_pasteur

查看容器nexus從2019年10月16往後的最新10條日誌
1.jpg

docker安裝Tomcat

1)查找Docker Hub上的tomcat鏡像

docker search tomcat

2)拉取官方的鏡像

docker pull tomcat

3)使用tomcat鏡像運行容器

docker run -d --name tomcat -p 8080:8080 -v $PWD/test:/usr/local/tomcat/webapps/test tomcat

命令說明:

  • -p 8080:8080:將容器的8080端口映射到主機的8080端口
  • -v $PWD/test:/usr/local/tomcat/webapps/test:將主機中當前目錄下的test掛載到容器的/test

1.jpg

查看tomcat日誌輸出
1.jpg

經過瀏覽器訪問
1.jpg

Dockerfile簡介

1.什麼是Dockerfile
Dockerfile是由一系列命令和參數構成的腳本,這些命令應用於基礎鏡像並最終建立一個新的鏡像。

  • 對於開發人員:能夠爲開發團隊提供一個徹底一致的開發環境;
  • 對於測試人員:能夠直接拿開發時所構建的鏡像或者經過Dockerfile文件構建一個新的鏡像開始工做了;
  • 對於運維人員:在部署時,能夠實現應用的無縫移植。

2.經常使用命今
1.png

3.使用腳本建立鏡像
1)建立目錄
mkdir -p /usr/1ocal/dockerjdk8
2)將IDEA搭建的springboot工程打包docker-0.0.1-SNAPSHOT.jar並上傳到服務器(虛擬機)中的/usr/local/dockerjdk8目錄
3)建立文件Dockerfile
vi Dockerfile

#依賴鏡像名稱和ID 
FROM java:8
#ADD是相對路徑jar,把java添加到容器中
ADD docker-0.0.1-SNAPSHOT.jar /docker-test.jar 
EXPOSE 9000
ENTRYPOINT ["java","-jar","/docker-test.jar"]

4)執行命令構建鏡像
docker build -t docker-test:v1 .
1.jpg
注意後邊的空格和點,不要省略

到此,docker的簡單介紹和使用結束
參考文獻:https://www.w3cschool.cn/dock...

相關文章
相關標籤/搜索