dokcer入門

背景:

因爲最近在作基於Headless chrome + Robotframework + Docker +Jenkins架構的web自動化測試的預研工做,其中涉及到web自動化持續集成,須要搭建自動化測試環境;在經歷了不少痛苦的嘗試後,發現之前服務器上的Docker鏡像再也不適用,沒法知足目前的web自動化測試環境,因此着手學習下Docker並部署適用於項目的web自動化測試的鏡像。python

Docker簡介

1、什麼是Docker

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

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

機制:容器徹底是沙箱機制,相互之間不會有任何接口(相似於iPhoneapp),更重要的是容器開銷極低。chrome

2、Docker的應用場景

一、web應用的自動化打包和發佈docker

二、自動化測試和持續集成、發佈shell

三、在服務型環境中部署和調整數據庫或其餘的後臺應用數據庫

四、從頭編譯或者擴展示有的OpenShiftCloud Foundry平臺來搭建本身的PAAS環境編程

Docker架構

·Docker使用客戶端-服務器(C/S)架構模式,使用遠程API來管理和建立Docker容器api

·Docker容器經過Docker鏡像來建立bash

·Docker中的鏡像和容器相似於面向對象編程中的類和對象

 

 

 

 

 

 

Docker 鏡像(Images):Docker 鏡像是用於建立 Docker 容器的模板。

Docker 容器(Container):容器是獨立運行的一個或一組應用。

Docker 客戶端(Client):Docker客戶端經過命令行或者其餘工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) Docker 的守護進程通訊。

Docker 主機(Host)一個物理或者虛擬的機器用於執行 Docker 守護進程和容器。

Docker 倉庫(Registry):Docker倉庫用來保存鏡像,能夠理解爲代碼控制中的代碼倉庫。

Docker Hub(https://hub.docker.com) 提供了龐大的鏡像集合供使用

Docker Machine:Docker Machine是一個簡化Docker安裝的命令行工具,經過一個簡單的命令行便可在相應的平臺上安裝Docker,好比VirtualBoxDigital OceanMicrosoft Azure

Docker安裝

1、Docker支持如下的Ubuntu版本:

·Ubuntu Precise 12.04 (LTS)

·Ubuntu Trusty 14.04 (LTS)

·Ubuntu Wily 15.10

·Xenial 16.04 (LTS)

·其餘更新的版本

注:如需安裝Docker CE須要16.04以上(不包含16.14)的版本

使用如下命令能夠查看你的Ubuntu系統的版本:

命令:cat etc/issue

 

Docker1.13之後有兩個版本,分別是CEEECE是開源的社區版本、EE是收費企業版本

查看Docker版本:

命令:docker --version

 

2、前置條件

Docker要求Ubuntu系統的內核版本高於3.10,首先得驗證你的Ubuntu系統內核版本是否支持Docker

命令:uname -r

 

如上在終端上敲入相應命令查詢到個人Ubuntu系統的內核版本是4.13版本

 

3、使用腳本安裝Docker

一、獲取最新版本的Docker安裝包

命令:wget -qO- https://get.docker.com/ | sh

Sh命令的做用是執行.sh腳本或是切換到sh這個bash裏,Linux默認的shellbash

這裏的sh就是後面這個用處

 

輸入當前用戶密碼後,系統會自動下載腳本並安裝Docker及依賴包

安裝完成後有個提示:

 If you would like to use Docker as a non-root user, you should now consider

    adding your user to the "docker" group with something like:

 

    sudo usermod -aG docker runoob

   Remember that you will have to log out and back in for this to take effect!  

當要以非root用戶能夠直接運行docker時,須要執行 sudo usermod -aG docker name 命令,而後從新登錄,不然會報錯

二、啓動Docker後臺服務

命令:sudo service docker start

部署屬於本身的鏡像

1、操做步驟

前言:鏡像的製做主要分爲三個部分

一、獲取基礎鏡像(docker pull

二、基於基礎鏡像製做所需的鏡像

三、將鏡像推送到製品庫進行保存(docker push

2、製做鏡像的方法

製做鏡像主要有兩種方法,第一種使用commit命令製做,第二種使用dockerfile製做,下面來簡單的談一談這兩種方法的優缺點。

Commit:使用此方法方便開發者調試,但不方便過程的記錄,可複製性遠差於dockerfile

DockerfileDockerfile是描述鏡像製做過程當中的文件,記錄了製做鏡像的過程,方便之後更改或者鏡像丟失後從新構建

1、Docker commit製做鏡像
一、基於基礎鏡像建立容器

·獲取基礎鏡像:能夠從docker hub或第三方網站拉取鏡像到本地

命令:docker pull [options] <dir_name>.<realm_name>:<tag>

Options說明:

-a:拉取全部tagged鏡像

--disable-content-trust:忽略鏡像的校驗,默認開啓

實例:docker pull docker hub xxxx:v1

 

 

 

從網上拉取基礎鏡像後使用docker images命令,查看本地服務器是否有已拉取的

基礎鏡像:

 

·基於基礎鏡像建立容器

基於上面已經pull下來的鏡像製做一個容器

命令:docker run [options] image [command]

實例:docker run --privileged --name=qinjiaxi_web_test --net=host -it -v ~:/share docker hub xxxx:v1

 

二、在容器中安裝須要的應用

關於這一塊每一個項目或者說每一個人的需求都不同,所以安裝的應用程序和環境必然不會想相同,這裏沒法統一的進行硬性規定,只進行簡單的說明。

這裏主要用到apt這個命令

如:安裝python軟件:

命令:apt install python

固然須要安裝的東西比較多,並且有些軟件還有本身的依賴包,在安裝主軟件的同時優先進行依賴包的安裝不然沒法安裝主軟件,這裏有個強制安裝依賴包的命令供你們參考:apt -f install。

 

三、commit容器建立鏡像到本地

命令:docker commit [opions] containerid <repository>:<tag>

Options說明:

-a:提交的鏡像做者

-m:提交時的說明文字

-p:在commit時,將容器暫停

實例:docker commit -a 「qinjiaxi」 -m 「web_ci_test」 qinjiaxi_web_ci:web_ci_20190822

經過以上命令建立完成後,使用docker images命令查看本地鏡像,就能夠看到上面的鏡像被commit到本地了。

注:保存在本地的鏡像repository能夠隨便寫,可是若是想推到網絡上去就須要按照規定的格式來編輯,這裏提供兩種方法:

一、修改已有本地鏡像的repository和tag名稱(鏡像重命名):

命令:docker tag <image id> <new repository>:<new tag>

實例:docker tag 2d440113d507 zxxxxxx-xxxx-docker.xxxx.com.cn/webci/qinjiaxi_web_ci:web_ci_20190822

 

二、commit的時候就按照規定格式來建立鏡像

在上面第三部中就按照如下格式來commit:

實例:docker commit -a 「qinjiaxi」 -m 「web_ci_test」  zxxxxxx-xxxx-docker.xxxx.com.cn/webci/qinjiaxi_web_ci:web_ci_20190822

 

 

 

 

四、將本地鏡像push到製品庫

命令:docker pull [options] <dir_name>.<realm_name>:<tag>

Options說明:

--disable-content-trust:忽略鏡像的校驗,默認開啓

實例:docker push zxxxxxx-xxxx-docker.xxxx.com.cn/webci/qinjiaxi_web_ci:web_ci_20190822

 

至此:commit方式製做鏡像已經完成。

下面附上docker commit中經常使用的dokcer命令:

 

command

describe

docker images

查看本地全部鏡像(可加上grep分支來篩選,如:docker images|grep qinjiaxi)

docker ps

查看正在運行的容器(加上-a查看所有的容器,也可加上grep分支來篩選)

docker start

啓動一個容器(後面必選項爲container_name or container_id)

docker attach

運行一個容器(後面必選項爲container_name or container_id)

docker pull

從製品庫中下載基礎鏡像

docker push

將本地鏡像推送到製品庫中

docker rm

移除本地已有容器(後面的必選項爲container_name or container_id)

docker rmi

移除本地已有鏡像(後面的必選項爲image_name or image_id)

docker tag

對鏡像進行重命名

 

 

2、dockerfile方式製做鏡像(強烈推薦)
dockerfile經常使用命令:

COMMAND

FROMAT

DESCRIPTION

FROM

FROM <REPOSITORY>:<TAG>

指定基礎鏡像,必須爲第一個命令

MAINTAINER

MAINTAINER <NAME>

維護者信息

RUN

RUN <COMMAND>

鏡像容器中運行命令

ADD

ADD <SCR> <DEST>

將本地文件添加到容器中,tar格式自動解壓(網絡壓縮資源不會被解壓),能夠訪問網絡資源,相似wget

COPY

COPY <SCR> <DEST>

複製本地文到容器中,壓縮格式文件不會進行解壓

CMD

RUN <COMMAND>

指定在容器啓動時全部執行的命令

ENV

ENV <KEY> <VALUE>

設置環境變量

WORKDIR

WORKDIR <WORK_DIR>

工做目錄,相似於cd命令

Dockerfile實例:

1本機建立一個新目錄,取名dokcer_build

命令:mkdir docker_build

2、將dockerfile文件複製到dokcer_build目錄

命令:cp  dockerfile.txt /docker_build

三、進入docker_build目錄執行建立命令

命令:cd docker_build

  docker build -f dockerfile.txt -t web_ci_test:v1 -q .

para

description

f

指向任何路徑下的dockerfile文件

t

指定生成鏡像的名稱,包含倉庫名稱和標籤名稱

q

quiet模式減小無用的打印

.

製做鏡像時資源文件的路徑,即當前目錄,須要將製做鏡像中用到的資源放入當前目錄下

執行docker build命令後,若是未報錯,即鏡像製做成功。
過程詳解:
執行docker build命令後,首先上傳dockerfile文件到docker進程,由於全部的操做都要依據dockerfile來進行。而後dockerfile中指令被一條條的執行,每一步都建立了一個新的容器,在容器中執行命令並提交修改(跟以前的commit製做鏡像是同樣的過程)。當dockerfile文件中的全部指令執行完畢後,返回最終的鏡像ID,全部中間步驟產生的容器都被刪除和清理。
附上dockerfile中的相關指令的圖表解釋:

 

 

總結

學到這裏你們應該也忘記的差很少了,是時候該放棄docker學習(開個玩笑),最後對以上的知識進行一個總結:本文從docker的基本概念、架構、安裝調試、以及鏡像製做四個維度進行了講解和說明,期間有涉及到部分實例,實踐和理論的相結合更容易讓你們接受和運用,相信對後期開發中應用到docker場景的同窗有所幫助。

相關文章
相關標籤/搜索