阿里架構師帶你全面認識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鏡像創建的運行實例,類似於輕量級的沙箱,每個容器之間都是相互隔離的。支持的操作有啟動,停止,刪除等。
  • 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鏡像

加Java架構師進階交流群獲取Java工程化、高性能及分佈式、高性能、深入淺出。高架構。性能調優、Spring,MyBatis,Netty源碼分析和大數據等多個知識點高級進階乾貨的直播免費學習權限 都是大牛帶飛 讓你少走很多的彎路的 群。號是:338549832 對了 小白勿進 最好是有開發經驗

注:加群要求

1、具有工作經驗的,面對目前流行的技術不知從何下手,需要突破技術瓶頸的可以加。

2、在公司待久了,過得很安逸,但跳槽時面試碰壁。需要在短時間內進修、跳槽拿高薪的可以加。

3、如果沒有工作經驗,但基礎非常紮實,對java工作機制,常用設計思想,常用java開發框架掌握熟練的,可以加。

4、覺得自己很牛B,一般需求都能搞定。但是所學的知識點沒有系統化,很難在技術領域繼續突破的可以加。

5.阿里Java高級大牛直播講解知識點,分享知識,多年工作經驗的梳理和總結,帶著大家全面、科學地建立自己的技術體系和技術認知!


分享到:


相關文章: