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

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

什麼是Docker

Docker 是一個開源的應用容器引擎,基於Go語言,誕生於2013年初,最初發起者是dotCloud公司,開發者能夠打包應用到一個輕量級、可移植的容器中,而後發佈到主流Linux系統上運行。linux

爲何用Docker

  • 持續交付和部署:使用Docker能夠經過定製應用鏡像來實現持續集成,持續交付,部署。開發人員構建後的鏡像,結合持續集成系統進行集成測試,而運維人員則能夠在生產環境中快速部署該鏡像,也能夠結合持續部署系統進行自動部署。git

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

  • 更輕鬆的遷移和擴展:Docker容器幾乎能夠在任何平臺上運行,同時支持主流的操做系統發行版本。docker

  • 更快速的啓動時間:傳統的虛擬機技術啓動應用服務每每須要數分鐘,而Docker容器應用,因爲直接運行於宿主內核,無需啓動完整的操做系統,所以能夠作到妙級,甚至毫秒級的啓動時間,大大的節約了開發,測試,部署的時間。centos

Docker與傳統虛擬機差別

                                                                   傳統虛擬化方式bash

 

                                                                  Docker虛擬化方式cookie

 

傳統虛擬化是在硬件層面實現虛擬化,須要有額外的虛擬機管理應用和虛擬機操做系統層,而Docker容器是在操做系統層面實現虛擬化,直接複用本地主機操做系統,更加輕量級。架構

核心概念

  • Docker鏡像:相似於虛擬機裏的鏡像,是一個只讀的模板,一個獨立的文件系統,使用鏡像能夠建立容器,能夠理解爲鏡像是容器的基石。oracle

  • 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 "Java-Road@qq.com"

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 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架構師之路,一個匯聚十萬技術人的圈子,讓學習之路更有趣!

相關文章
相關標籤/搜索