天天看點

【Docker系列】全面認識Docker和基本指令

Docker逐漸成為虛拟化技術的佼佼者,Java架構師之路接下來會推出一系列的Docker相關技術文章,Docker技術也是架構師的必備技能。

什麼是Docker

Docker 是一個開源的應用容器引擎,基于Go語言,誕生于2013年初,最初發起者是dotCloud公司,開發者可以打包應用到一個輕量級、可移植的容器中,然後釋出到主流Linux系統上運作。

為什麼用Docker

持續傳遞和部署:使用Docker可以通過定制應用鏡像來實作持續內建,持續傳遞,部署。開發人員建構後的鏡像,結合持續內建系統進行內建測試,而運維人員則可以在生産環境中快速部署該鏡像,也可以結合持續部署系統進行自動部署。

更高效的資源利用:Docker是基于核心級的虛拟化,可以實作更高效的性能,同時對資源的額外需求很低,相比傳統虛拟機方式,相同配置的主機能夠運作更多的應用。

更輕松的遷移和擴充:Docker容器幾乎可以在任何平台上運作,同時支援主流的作業系統發行版本。

更快速的啟動時間:傳統的虛拟機技術啟動應用服務往往需要數分鐘,而Docker容器應用,由于直接運作于宿主核心,無需啟動完整的作業系統,是以可以做到妙級,甚至毫秒級的啟動時間,大大的節約了開發,測試,部署的時間。

Docker與傳統虛拟機差異

【Docker系列】全面認識Docker和基本指令
【Docker系列】全面認識Docker和基本指令

傳統虛拟化是在硬體層面實作虛拟化,需要有額外的虛拟機管理應用和虛拟機作業系統層,而Docker容器是在作業系統層面實作虛拟化,直接複用本地主機作業系統,更加輕量級。

核心概念

Docker鏡像:類似于虛拟機裡的鏡像,是一個隻讀的模闆,一個獨立的檔案系統,使用鏡像可以建立容器,可以了解為鏡像是容器的基石。

Docker容器:是由Docker鏡像建立的運作執行個體,類似于輕量級的沙箱,每個容器之間都是互相隔離的。支援的操作有啟動,停止,删除等。

Docker倉庫:類似于經常使用的代碼倉庫,如github,它是Docker集中存放鏡像檔案的倉所,國内也有網易,阿裡等鏡像倉庫。

鏡像操作指令

擷取鏡像:

docker pull centos (預設擷取centos最新的鏡像)

docker pull centos:7 (擷取指定标簽鏡像)

檢視本地鏡像:

docker images

檢視鏡像詳細資訊:

docker inspect centos:7

檢視鏡像曆史:

docker history centos:7

删除鏡像:

A:使用标簽删除:docker rmi centos

B:使用ID删除:docker rimi

建構鏡像:

A:使用docker commit指令

B:使用Dockerfile建構

使用docker commit

例:建構一個帶有jdk的鏡像

按照如下步驟操作

[root@localhost ~]# docker run -it centos:7 /bin/bash
[root@060793baf536 /]# yum install wget
[root@060793baf536 /]# wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm

[root@060793baf536 /]# rpm -ivh jdk-8u131-linux-x64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:jdk1.8.0_131-2000:1.8.0_131-fcs  ################################# [100%]
Unpacking JAR files...
        tools.jar...
        plugin.jar...
        javaws.jar...
        deploy.jar...
        rt.jar...
        jsse.jar...
        charsets.jar...
        localedata.jar...
[root@060793baf536 /]# exit
[root@localhost ~]# docker commit 060793baf536 centos/jdk:2.0
           

通過docker images指令可以看到新增了centos/jdk 标簽為2.0的鏡像

使用Dockerfile建構

實際使用中不推薦使用docker commit建構,應使用更靈活和強大的Dockerfile建構docker鏡像,直接舉例來認識Dockerfile。

例:建構一個帶有jdk的centos7鏡像

[root@localhost Dockerfile]# mkdir Dockerfile

[root@localhost Dockerfile]# cd Dockerfile

編寫Dockerfile:

FROM centos:7
MAINTAINER  Java-Road "[email protected]"

RUN mkdir /usr/local/jdk
COPY jdk-8u171-linux-x64.rpm /usr/local/jdk/
RUN rpm -ivh /usr/local/jdk/jdk-8u171-linux-x64.rpm
           

執行如下指令:

[root@localhost Dockerfile]# docker build -t centos/jdk .
           

運作結果如下:

【Docker系列】全面認識Docker和基本指令

docker images可以看到新生成的centos/jdk鏡像。

容器操作指令

建立啟動容器:

[root@localhost ~]# docker run centos:7 /bin/echo'hello world'           
容器運作完後直接退出           

互動形式建立啟動容器

[root@localhost ~]# docker run -it centos:7 /bin/bash
[root@802e3623e566 /]# ps
   PID TTY          TIME CMD
     1 ?        00:00:00 bash
    13 ?        00:00:00 ps
[root@802e3623e566 /]# exit           

執行exit才能退出容器

守護狀态運作容器

[root@localhost ~]# docker run -d centos:7 /bin/sh -c "while true; do echo hello world; sleep 1; done"           

啟動已有的容器:

docker start 容器ID

例:

[root@localhost ~]# docker start 802e3623e566           

停止運作的容器:

docker stop 容器ID

[root@localhost ~]# docker stop 802e3623e566           

删除容器:

[root@localhost ~]# docker stop 89566e38c7fb
[root@localhost ~]# docker rm 89566e38c7fb           

進入運作的容器:

[root@localhost ~]# docker exec -it cbd8b1f35dcc /bin/bash           

導出容器:

導出容器cbd8b1f35dcc到centos_test.tar檔案

[root@localhost ~]# docker export -o centos_test.tar cbd8b1f35dcc           

導出的tar檔案可以在其他機器上,通過導入來重新運作

導入容器:

把導出的檔案centos_test.tar通過docker import導入變成鏡像

[root@localhost ~]# docker import centos_test.tar test/centos           

通過docker images指令可以看到增加了個test/centos鏡像

原文釋出時間為:2018-06-28

本文作者:蝸牛

本文來自雲栖社群合作夥伴“

Java架構師之路

”,了解相關資訊可以關注“

”。

社群技術交流:歡迎關注【

阿裡Java技術進階

】每周在群内進行【免費技術直播】和【線上回答技術問題】歡迎點選link入群:

http://tb.cn/gXRstIw

或者 釘釘掃碼入群:

【Docker系列】全面認識Docker和基本指令