1. 程式人生 > >docker容器實戰-----初級<2>

docker容器實戰-----初級<2>

第二章  docker容器   

    1. Docker是通過核心虛擬化技術(namespaces及cgroups cpu、記憶體、磁碟io等)來提供容器的資源隔離與安全保障等。由於Docker通過作業系統層的虛擬化實現隔離,所以Docker容器在執行時,不需要類         似虛擬機器(VM)額外的作業系統開銷,提高資源利用率。

   2. docker的主要目標是"Build,Ship and Run any App,Angwhere",構建,運輸,處處執行。(構建:做一個docker映象 執行:啟動一個容器 每一個容器,他都有自己的檔案系統rootfs.)

   3. docker是一種軟體的打包技術。

   4. docker的主要組成部分,docker是傳統的CS架構分為docker client和docker server,像mysql一樣

2.1 docker與kvm

1. kvm解決了硬體和作業系統之間的依賴

2. kvm獨立的虛擬磁碟,xml檔案

 

1. docker解決了軟體和操作環境之間的依賴,能夠讓獨立服務或應用程式在不同的環境中,得到相同的執行結果。

2. docker映象有自己的檔案系統。

3. docker容器是一種輕量級、可移植、自包含的軟體打包技術,使應用程式可以在幾乎任何地方以相同的方式執行。開發人員在自己筆記本上建立並測試好的容器,無需任何修改就能夠在生產系統的虛擬機器、物理伺服器或公有云主機上執行。(一次構建,到處執行)

 

2.2 docker重要的基礎命令

2.2.1 容器生命週期管理

一. run命令

 1. docker run:建立一個新的容器並執行一個命令

  語法:docker run [options] IMAGE [command] [APG…]

 options說明:

   -d:後臺執行容器,並返回容器ID;

   -i:以互動模式執行容器,通常與-t同時使用;

   -p:埠對映,格式為:主機(宿主)埠:容器埠

   -t:為容器重新分配一個偽輸入終端,通常與-i一起使用;

   --name="nginx-lb": 為容器指定一個名稱;

   --dns 8.8.8.8: 指定容器使用的DNS伺服器,預設和宿主一致;

   -h "mars": 指定容器的hostname;

   -e username="ritchie": 設定環境變數;

   -m :設定容器使用記憶體最大值;

2.例項:

   1)使用docker映象nginx:latest以後臺模式啟動一個容器,並將容器命名為mynginx。

      docker run –-name mynginx -d nginx:latest

   2)使用映象nginx:latest以後臺模式啟動一個容器,並將容器的80埠對映到主機隨機埠。

      docker run -P -d nginx:latest

   3)使用映象 nginx:latest,以後臺模式啟動一個容器,將容器的 80 埠對映到主機的 80 埠,主機的目錄 /data 對映到容器的 /data。

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

   4)繫結容器的 8080 埠,並將其對映到本地主機 127.0.0.1 的 80 埠上。

      docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

   5)使用映象nginx:latest以互動模式啟動一個容器,在容器內執行/bin/bash命令。

      docker run -it nginx:latest /bin/bash

      [email protected]:/#

二.  start/stop/restart命令

1. docker start:啟動一個或多個已經被停止的容器

   docker stop:停止一個執行中容器

   docker restart:重啟容器

  語法:docker start/stop/restart [options] container [container...]

2.例項

  1)啟動已被停止的容器myrunoob

docker start myrunoob

  2)停止執行中的容器myrunoob

docker stop myrunoob

  3)重啟容器myrunoob

    docker restart myrunoob

三.  kill命令

 1. docker kill:殺掉一個執行中的容器

語法:docker kill [options] container [container...]

 2.option說明

  -s:向容器傳送一個訊號

 3.例項

   殺掉執行中的容器mynginx

   docker kill -s kill mynginx

四.  rm 命令

1. docker rm:刪除一個或多個容器

   語法:docker rm [options] container [container...]

2. options說明

   -f:通過sigkill訊號強制刪除一個執行中的容器(謹慎使用)

   -l:移除容器間的網路連線,而非容器本身

   -v:刪除與容器相關聯的卷

3.例項

 1)強制刪除容器db01 db02

  docker rm -f db01 db02

 2)移除容器nginx01對容器db01的連線,連線名db

   docker rm -l db

 3)刪除容器nginx01,並刪除容器掛載的資料卷

   docker rm -v nginx01

五. pause/unpause命令

1. docker pause:暫停容器中所有的程序

   docker unpause:恢復容器中所有的程序

2. 語法:

   docker pause [options] container [container...]

   docker pause [options] container [container...]

3.例項

   1)暫停資料庫容器db01提供服務。

docker pause db01

2)恢復資料庫容器db01提供服務

docker unpause db01

六. create命令

1. docker create 但是不啟動他(用法和docker run相同)

2. 例項:

使用docker映象nginx:latest建立一個容器,並將容器命名為myrunoob

docker create –name myrunoob nginx:latest

七 . exec命令

1. docker exec:在執行的容器中執行命令

  語法:docker exec [options] container command [ARG...]

2. options說明

   -d:分離模式,在後臺執行

   -i:即使沒有附加也保持STDIN開啟

   -t:分配一個偽終端

3.例項

 1)在容器mynginx中以互動模式執行容器內/root/runoob.sh指令碼

   docker exec -I -t mynginx /bin/bash

2.2.2 容器操作

一. ps命令

1.docker ps:列出容器

 語法:docker ps [options]

2.options說明:

  -a:顯示所有的容器,包括未執行的

  -f:根據天健過濾顯示的內容

  --format:指定返回值的模板檔案

  -l:顯示最近建立的容器

  -n:列出最近建立的容器

  -s:顯示總的檔案大小

3.例項

1)列出所有在執行的容器資訊

docker ps

2)列出最近建立的5個容器

docker ps -n 5

3)列出所有建立的容器ID

docker ps -a -q

二 . inspect命令

1.docker inspect:獲取容器/映象的元資料

  語法:docker inspect [options] name|id [name|id...]

2.options說明:

  -f:指定返回值的模板檔案

  -s:顯示總的檔案大小

  --type:為指定型別返回JSON

3.例項

  1)獲取映象mysql:5.6的元資訊。

     docker inspect mysql:5.6

  2) 獲取正在執行的容器mymysql的 IP。

    docker inspect –format= '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mymysql

三.top命令

1.docker top:檢視容器中執行的程序資訊,支援 ps 命令引數。

  語法:docker top [options] container [ps options]

    容器執行時不一定有/bin/bash終端來互動執行top命令,而且容器還不一定有top命令,可以使用docker top來實現檢視container中正在執行的程序。

2.例項

  1)檢視容器mymysql的程序資訊。

     docker top mysql

  2)檢視所有執行容器的程序資訊

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

四. port命令

1. docker port: 列出指定的容器的埠對映,或者查詢將PRIVATE_PORT NAT到面向公眾的埠。

  語法:docker port [options] container [private_port[/proto]]

2.例項

  檢視容器mynginx的埠對映情況。

  docker port mymysql

5. logs命令

1.docker logs:獲取容器的日誌

 語法:docker logs [options] container

2.options說明:

  -f:跟蹤日誌輸出

  --since:顯示某個開始時間的所有日誌

  -t:顯示時間戳

  --tail:僅列出最新N條容器日誌

3.例項

  1)跟蹤檢視容器mynginx的日誌輸出。

docker logs -f mynginx

  2)檢視容器mynginx從2016年7月1日的最新日誌10條

    docker logs –since=”2016-07-01” –tail=10 mynginx

2.2.3  容器rootfs命令

 

1. commit命令

1.docker commit:從容器建立一個新的映象

  語法:docker commit [options] container [pepository[:tag]]

2.options說明

  -a:提交的映象作者

  -c:使用dockerfile指令來建立映象

  -m:提交時的說明文字

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

3. 例項

將容器a404c6c174a2 儲存為新的映象,並新增提交人資訊和說明資訊。

 docker commit -a “runoob.com” -m “my apache” a404c6c174a2  mymysql:v1

2. cp命令

1.docker cp :用於容器與主機之間的資料拷貝

  語法:docker cp [options] container:src_path dest_path|-

        docker cp [options] container:src_path dest_path|-

2.options說明;

        -L:保持源目標中的連結

3.例項

  1)將主機/www/runoob目錄拷貝到容器96f7f14e99ab的/www目錄下。

     docker cp /www/runoob 96f7f14e99ab:/www

  2)將主機/www/runoob目錄拷貝到容器96f7f14e99ab中,目錄重新命名為www。

     docker cp /www/runoob 96f7f14e99ab:/www/

  3) 將容器96f7f14e99ab的/www目錄拷貝到主機的/tmp目錄中。

     docker cp 96f7f14e99ab:/www /tmp

3. diff命令

1.docker diff:檢查容器裡檔案結構的更改

  語法:docker diff [options] container

2.例項

  檢視容器mymysql的檔案結構更改。

  docker diff mymysql

2.2.4  映象倉庫

一.login命令

1. docker login : 登陸到一個Docker映象倉庫,如果未指定映象倉庫地址,預設為官方倉庫 Docker Hub

 docker logout : 登出一個Docker映象倉庫,如果未指定映象倉庫地址,預設為官方倉庫 Docker Hub

 語法:docker login [options] [server]

       docker logout [options] [server]

2. option說明:

  -u:登入的使用者名稱

  -p:登入的密碼

3.例項

  1)登入到docker hub

     docker login -u 使用者名稱 -p 密碼

  2)登出docker hub

     docker logout

二. pull命令

1. docker pull : 從映象倉庫中拉取或者更新指定映象

  語法:docker pull [options] name [:tag|@digest]

2.options說明

  -a:拉取所有tagged映象

  --disable-content-trust :忽略映象的校驗,預設開啟

3.例項

  1)從Docker Hub下載java最新版映象。

docker pull java

  2) 從Docker Hub下載REPOSITORY為java的所有映象。

    docker pull -a java

三  .  push命令

1.docker push :將本地的映象上傳到映象倉庫,要先登陸到映象倉庫

 語法:docker push [options] name [:tag]

2.option說明:

  --disable-content-trust :忽略映象的校驗,預設開啟

3.例項:

   上傳本地映象myapache:v1到映象倉庫中。

    docker push myapache:v1

四  .  search命令

1. docker search : 從Docker Hub查詢映象

  語法:docker search [options] term

2.options說明

  --automated :只列出 automated build型別的映象;

  --no-trunc :顯示完整的映象描述;

  -s :列出收藏數不小於指定值的映象。

3. 例項

  從Docker Hub查詢所有映象名包含java,並且收藏數大於10的映象

   docker search -s 10 java

 

2.2.5 本地映象管理

一  . images命令

1. docker images:列出本地映象

語法:docker images [options] [repository[:tag]]

2.options說明:

-a:列出本地所有映象(含中間映像層,預設情況下,過濾掉中間映像層)

--digests:顯示映象的摘要資訊;

-f:顯示滿足條件的映象

-q:只顯示映象ID

--no-trunc:顯示完整的映象資訊

--format:指定返回值的模板檔案

3.例項

 1)檢視本地映象列表

docker images

 2) 列出本地映象中REPOSITORY為ubuntu的映象列表。

    docker images ubuntu

二. rmi命令

1.docker rmi : 刪除本地一個或多少映象。

  語法:docker rmi [options] image [image...]

2.options說明:

 -f:強制刪除

 --no-prune:不移除該映象的過程映象,預設移除;

3.例項

  強制刪除本地映象runoob/ubuntu:v4

   docker rmi -f runoob/ubuntu:v4

三 . tag命令

1. docker tag:標記本地映象,將其歸入某一倉庫

  語法:docker tag [options] image[:tag] [registryhost/][username/]name[:tag]

2.例項  將映象ubuntu:15.10標記為 runoob/ubuntu:v3 映象。

  docker tag ubuntu:15:10 runoob/ubuntu:v3

四  . build命令

1.docker build命令用於使用dockerfile建立映象

  語法:docker build [options] path | url | -

2. options說明:

  --tag, -t: 映象的名字及標籤,通常 name:tag 或者 name 格式;可以在一次構建中為一個映象設定多個標籤。

   --quiet, -q :安靜模式,成功後只輸出鏡像 ID;

   --pull :嘗試去更新映象的新版本;

   -m :設定記憶體最大值;

   -f :指定要使用的Dockerfile路徑;

   --network: 預設 default。在構建期間設定RUN指令的網路模式

3.例項

   1)使用當前目錄的 Dockerfile 建立映象,標籤為 runoob/ubuntu:v1。

docker build  -t runoob/ubuntu:v1

   2) 使用URL github.com/creack/docker-firefox 的 Dockerfile 建立映象。

     docker build github.com/create/docker-firefox

   3) 也可以通過 -f Dockerfile 檔案的位置:

     docker build -f /path/to/a/dockerfile

   4)在 Docker 守護程序執行 Dockerfile 中的指令前,首先會對 Dockerfile 進行語法檢查,有語法錯誤時會返回:

五. history命令

1.docker history:檢視指定映象的建立歷史

  語法:docker history [options] image

2.options說明:

  -H:以可讀的格式列印映象大小和日期,預設為true;

  --no-trunc:顯示完整的提交記錄

  -q:僅列出提交記錄ID

3.檢視本地映象runoob/ubuntu:v3的建立歷史

   docker history runoob/ubuntu:v3

六. save命令

1.docker save:將指定映象儲存成tar歸檔檔案

  語法:docker save [options] image [image....]

2.options說明

  -o:輸出到指定檔案

3.例項

 將映象runoob/ubuntu:v3 生成my_ubuntu_v3.tar文件

   docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3

七  . import命令

1. docker import:從歸檔檔案中建立映象

  語法:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

2.option說明:

  -c:應用docker指令建立映象;

  -m:提交時的說明文字

3.例項

  從映象歸檔檔案my_ubuntu_v3.tar建立映象,命名為runoob/ubuntu:v4

  docker import  my_ubuntu_v3.tar runoob/ubuntu:v4 

2.2.6 info|version

1. docker info : 顯示 Docker 系統資訊,包括映象和容器數。

 語法:docker info [options]

  檢視docker的系統資訊

  docker info

2.docker version:顯示docker的版本資訊

2.3 docker的安裝

2.3.1  yum安裝

(也可以安裝一些必要的系統工具yum install -y yum-utils device-mapper-persistent-data lvm2)

1. 安裝docker源(再裝之前,先移除舊版本yum remove docker)

wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

2.如果閒速度慢,可以修改成國內清華源(不修改也可以)

sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo

3.安裝docker

yum install docker-ce -y

2.3.2 指令碼安裝

1. 使用 sudo 或 root 許可權登入 Centos。

2. 確保yum包更新到最新

   sudo yum update

3.執行docker安裝指令碼(執行這個指令碼會新增 docker.repo 源並安裝 Docker。)

$ curl -fsSL https://get.docker.com -o get-docker.sh

$ sudo sh get-docker.sh

4. 啟動docker程序

  sudo systemctl start docker

5. 驗證 docker 是否安裝成功並在容器中執行一個測試的映象。

  $ sudo docker run hello-world

     docker ps

2.4 映象加速

鑑於國內網路問題,後續拉取 Docker 映象十分緩慢,我們可以需要配置加速器來解決,我使用的是網易的映象地址:http://hub-mirror.c.163.com。

新版的 Docker 使用 /etc/docker/daemon.json(Linux) 或者 %programdata%\docker\config\daemon.json(Windows) 來配置 Daemon。

請在該配置檔案中加入(沒有該檔案的話,請先建一個):

{

  "registry-mirrors": ["http://hub-mirror.c.163.com"]

}