docker-從入門到實踐

https://yeasy.gitbooks.io/docker_practice/repository/registry.html

 

docker基礎所有包下載

鏈接:https://pan.baidu.com/s/1TYH3RUFR3OiN6fX67sa5rg 
提取碼:yy44

 

什麼叫虛擬化

正常服務器丨真實硬件層丨操作系統kernel丨shell層丨應用程序層

kvm丨真實硬件層丨虛擬化層丨Virual硬件層丨操作系統kernel丨shell層丨應用程序層

docker丨真實硬件層丨操作系統kernel丨分成一份一份的shell層丨分成一份一份的程序

LVM硬盤虛擬化

KVM硬件虛擬化(需要單獨裝操作系統,半虛擬化通過接口vitio)

Docker容器虛擬化(虛擬化後不需要裝操作系統,比KVM小的多)

 

一,Docker簡介,功能特性與應用場景

 

1.1 Docker簡介

Docker是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的Linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何接口。

 

一個完整的Docker有以下幾個部分組成

Docker Client 客户端

Docker Daemon 守護進程

Docker Image 鏡像

Docker Container 容器

 

1.2 Docker功能特性

隔離環境(系統,網絡,文件系統)與應用

解決依賴與版本問題

易於分發,開箱即用

節點與容器快速擴容

鏡像製作簡單便捷,管理方便

 

(1)隔離

通過cgroup(隔離和跟蹤資源的使用)& namespace(組與組之間隔離)來實現輕量級的進程隔離

對於容器中運行的進程來説,自己獨佔了一個系統

容器間網絡,文件及其他資源都互相隔離

 

(2)版本與依賴

傳統模式下,多個不同環境或版本的項目需要部署在不同機器上,部署與後期維護管理複雜繁瑣。

使用Docker,通過多個不同版本或者環境的鏡像,可以同時運行在一台機器上互不干擾,部署與後期維護簡單方便。

 

(3)分發與使用

鏡像可以通過導入,導出,上傳到鏡像倉庫等多種方式進行分發

在啓動了Docker的系統上直接使用docker run即可啓動鏡像,無需特別配置。

 

(4)擴容

容器擴容簡單方便

擴容節點只需安裝並啓動Docker即可

 

(5)鏡像製作

鏡像的靈魂Dockerfile

使用Dockerfile進行指令控制

基於Linux命令,易於理解,快速上手

易於定製與修改

 

1.3 Docker應用場景

Docker通常應用於如下場景

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

自動化測試和持續集成,發佈

應用服務,如MySQL,Redis等,通過Docker實現快速部署

k8s私有云

 

1.3.1 場景1:多版本多種類系統與軟件

圖書 深入淺出docker pdf_docker

 

1.3.2 場景2: 環境

圖書 深入淺出docker pdf_Docker_02

 

1.3.3 場景3: 分發

圖書 深入淺出docker pdf_centos_03

 

二,Docker的安裝(安裝社區版進行測試)

 

2.1 安裝環境

 

最小化安裝Centos7.5

cat /etc/redhat-release

uname -r

圖書 深入淺出docker pdf_centos_04

 

關閉防火牆和selinux

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

圖書 深入淺出docker pdf_Docker_05

 

2.2 版本選擇

Docker 
17.03之後版本變為Docker CE

Docker CE(測試選擇社區版) 
社區版,Community Edition

Docker EE 
企業版,Enterprise Edition 
收費版本,強調安全性,提供一些高級特性及商業支持

 

2.3 Docker安裝:標準版本(版本太低不用)

特別提示:
centos7.5在搭建本地yum倉庫的時候只需要修改
CentOS-Media.repo 文件即可(不需要將其他文件仍子目錄裏)
確保虛擬機能正常上網

[root@Docker ~]# yum -y install docker
[root@Docker ~]# systemctl start docker #啓動docker進程
[root@Docker ~]# systemctl enable docker    #加入docker開機啓動
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@Docker ~]# docker ps  #查看封裝在docker鏡像中的正在運行的鏡像進程
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@Docker ~]# docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-63.git94f4240.el7.centos.x86_64
 Go version:      go1.9.4
 Git commit:      94f4240/1.13.1
 Built:           Fri May 18 15:44:33 2018
 OS/Arch:         linux/amd64
Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-63.git94f4240.el7.centos.x86_64
 Go version:      go1.9.4
 Git commit:      94f4240/1.13.1
 Built:           Fri May 18 15:44:33 2018
 OS/Arch:         linux/amd64
 Experimental:    false

 

2.4 Docker安裝:CE社區版(清理docker方法)

首先清理掉yum安裝的docker標準版
這裏有兩種方式

#第一種清理docker方法
[root@Docker ~]# yum -y remove docker
#第二種清理docker方法
[root@Docker ~]# yum history list   #查看yum安裝的歷史列表
已加載插件:fastestmirror
ID     | 登錄用户                 | 日期和時間       | 操作           | 變更數 
-------------------------------------------------------------------------------
     6 | root <root>              | 2018-07-02 22:30 | Install        |   17 EE         #這次就是安裝的docker
     5 | root <root>              | 2018-07-02 20:08 | I, U           |   60   
     4 | root <root>              | 2018-07-03 03:54 | Install        |   93   
     3 | root <root>              | 2018-07-03 03:53 | Install        |    1   
     2 | root <root>              | 2018-07-03 03:53 | Install        |    1   
     1 | 系統 <空>                | 2018-07-03 03:46 | Install        |  313   
history list
[root@Docker ~]# yum history info 6     #查看yum歷史安裝ID為6的安裝信息
已加載插件:fastestmirror
事務 ID: 6
起始時間    : Mon Jul  2 22:30:11 2018
啓動 RPM 數據庫     : 409:3aba29f1d5b7e2d7ff3ed9f169ec4a2225595390
結束時間       :            22:30:27 2018 (16 秒)
結束 RPM 數據庫      : 426:28338758ec6a2332cabb3a1439336bd451c52366
用户           : root <root>
返回碼    : 成功
命令行   : -y install docker
事務完成屬主:
    已安裝 rpm-4.11.3-32.el7.x86_64                      @anaconda
    已安裝 yum-3.4.3-158.el7.centos.noarch               @anaconda
    已安裝 yum-plugin-fastestmirror-1.1.31-45.el7.noarch @anaconda
已變更的包:
    依賴安裝 audit-libs-python-2.8.1-3.el7.x86_64                         @base
    依賴安裝 checkpolicy-2.5-6.el7.x86_64                                 @base
    依賴安裝 container-selinux-2:2.55-1.el7.noarch                        @extras
    依賴安裝 container-storage-setup-0.9.0-1.rhel75.gite0997c3.el7.noarch @extras
    安裝 docker-2:1.13.1-63.git94f4240.el7.centos.x86_64              @extras
    依賴安裝 docker-client-2:1.13.1-63.git94f4240.el7.centos.x86_64       @extras
    依賴安裝 docker-common-2:1.13.1-63.git94f4240.el7.centos.x86_64       @extras
    依賴安裝 libcgroup-0.41-15.el7.x86_64                                 @base
    依賴安裝 libsemanage-python-2.5-11.el7.x86_64                         @base
    依賴安裝 oci-register-machine-1:0-6.git2b44233.el7.x86_64             @extras
    依賴安裝 oci-systemd-hook-1:0.1.15-2.gitc04483d.el7.x86_64            @extras
    依賴安裝 oci-umount-2:2.3.3-3.gite3c9055.el7.x86_64                   @extras
    依賴安裝 policycoreutils-python-2.5-22.el7.x86_64                     @base
    依賴安裝 python-IPy-0.75-6.el7.noarch                                 @base
    依賴安裝 setools-libs-3.3.8-2.el7.x86_64                              @base
    依賴安裝 skopeo-containers-1:0.1.29-3.dev.git7add6fc.el7.0.x86_64     @extras
    依賴安裝 yajl-2.0.4-4.el7.x86_64                                      @base
Scriptlet 輸出:
   1 setsebool:  SELinux is disabled.
history info
[root@Docker ~]# yum -y history undo 6  #進行yum安裝操作回退

 

特別提示:

yum的回退安裝在工作中很有用

 

安裝Docker的CE社區版

 

安裝依賴包

yum -y install yum-utils device-mapper-persistent-data lvm2

圖書 深入淺出docker pdf_docker_06

 

添加docker的CE版本的yum源配置文件

curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo

ll /etc/yum.repos.d/docker-ce.repo

圖書 深入淺出docker pdf_圖書 深入淺出docker pdf_07

 

安裝CE版本的docker

yum -y install docker-ce

systemctl start docker #啓動docker

systemctl enable docker #添加開機啓動

docker version #查看docker版本

圖書 深入淺出docker pdf_Docker_08

 

三,Docker的操作命令

 

3.0 添加docker國內鏡像源

在開始學習docker之前,我們首先要更改一下docker的默認源鏡像下載地址(默認是從國外下載,很慢),我們需要添加國內的源地址

vim /etc/docker/daemon.json

cat /etc/docker/daemon.json

 

  1. {
  2. "registry-mirrors":["https://registry.docker-cn.com"]
  3. }

systemctl daemon-reload

systemctl restart docker

圖書 深入淺出docker pdf_Docker_09

 

3.1 Docker命令:search(查看鏡像)

用於從docker的官方公有鏡像倉庫查找鏡像

 

(1)查看Docker Hub上公開的centos鏡像

docker search centos

 

  1. 特別説明:
  2. Name:鏡像的名字
  3. :描述
  4. :星級(越高越好)
  5. :是否是官方發佈的(OK代表官方發佈的)
  6. :是否自動化的

圖書 深入淺出docker pdf_圖書 深入淺出docker pdf_10

 

(2)查找星級多於100的centos鏡像

 

查找,星級大於100的centos鏡像

docker search centos -f stars=100

 

  1. 特別提示:
  2. /:符號用於分割作者名稱和鏡像名稱
  3. /centos7-ansible:ansible是作者名稱,centos7-ansible是鏡像名稱

圖書 深入淺出docker pdf_centos_11

 

(3)多條件查找--filter

 

查找官方發佈的,星級大於100的centos鏡像

docker search centos --filter is-official=true --filter stars=100

圖書 深入淺出docker pdf_centos_12

 

3.2 Docker命令:pull(下載鏡像)

 

用於從Docker Hub上下載公有鏡像

docker pull nginx

docker pull richarvey/nginx-php-fpm

docker pull mysql:5.6

docker pull centos

圖書 深入淺出docker pdf_docker_13

 

3.3 Docker命令:images(查看本地鏡像)

 

用於本地鏡像的查看

docker images

 

  1. 特別説明:
  2. :鏡像倉庫(下邊羅列的都是本地已有鏡像名稱)
  3. :鏡像的標記(為了區分同名鏡像)
  4. :鏡像的ID號
  5. :此鏡像的創建時間
  6. :此鏡像的大小

圖書 深入淺出docker pdf_圖書 深入淺出docker pdf_14

 

3.4 Docker命令:build(自定義)

 

用於本地自定義鏡像的構建,需要創建Dockerfile文件(只是創建,寫法在後面)

 

創建Dockerfile文件的存儲目錄

mkdir -p /root/dockerfile/lib/centos/7

cd /root/dockerfile/lib/centos/7

圖書 深入淺出docker pdf_圖書 深入淺出docker pdf_15

 

創建docker.sh腳本

vim docker.sh

cat docker.sh

 

  1. #!/bin/bash

  2. whiletrue
  3. do
  4. "welcome"
  5. 5
  6. done

圖書 深入淺出docker pdf_docker_16

 

創建Dockerfile配置文件,文件名稱必須為Dockerfile,第一個字母必須大寫

vim Dockerfile

cat Dockerfile

 

  1. FROM centos

  2. LABEL MAINTATNER="Mr.sl.com"

  3. RUN ln -sfv /usr/share/zoneinfo/Asia/Shanghai/etc/localtime

  4. ADD docker.sh /home/test/

  5. RUN chmod +x /home/test/docker.sh

  6. CMD ["/home/test/docker.sh"]

 

  1. 配置詳解

  2. FROM centos
  3. #從centos源鏡像的基礎上進行構建

  4. LABEL MAINTATNER="Mr.sl.com"
  5. #作者的名稱

  6. RUN ln -sfv /usr/share/zoneinfo/Asia/Shanghai/etc/localtime #RUN:f是強制覆蓋,v是有信息輸出,在鏡像構建過程中運行命令

  7. ADD docker.sh /home/test/
  8. #從本地系統中把docker.sh文件添加到構建中的鏡像的/home/test/目錄下

  9. RUN chmod +x /home/test/docker.sh
  10. #在鏡像構建過程中運行命令

  11. CMD ["/home/test/docker.sh"]
  12. #構建鏡像完成時,最後執行的命令

圖書 深入淺出docker pdf_圖書 深入淺出docker pdf_17

 

根據Dockfile配置文件構建一個自定義鏡像

docker build -t Mr.sl/centos7:1 . #-t 指定鏡像名稱 :1 設定鏡像的tag標記

docker images

圖書 深入淺出docker pdf_圖書 深入淺出docker pdf_18

 

3.5 Docker命令:run(運行鏡像)

 

運行一個本地鏡像

docker images

docker run -dit Mr.sl/centos7:1 /bin/bash --->/bin/bash代替配置文件裏面的CMD,可以不用寫

 

  1. 特別提示:
  2. :運行一個指定的images id或鏡像名字
  3. -d:放在後台運行
  4. -i:可以進行命令交互
  5. -t:製作一個偽終端用於登陸
  6. 0523fda5f122:鏡像的ID,可以簡寫成052

圖書 深入淺出docker pdf_圖書 深入淺出docker pdf_19


docker run -dit --name centos_test Mr.sl/centos7:1 --->不指定名字系統默認自己起名字

圖書 深入淺出docker pdf_Docker_20

 

3.6 Docker命令:ps(看容器)

 

查看已經運行的鏡像的進程

docker ps -a #查看所有運行的鏡像進程(包含退出的exit)

 

  1. 特別提示:
  2. :進程的狀態,UP表示正在運行中,EXIT表示已經退出了。

圖書 深入淺出docker pdf_docker_21

 

3.7 Docker命令:attach(切入)

 

從本地系統中切入到某個STATUS狀態是UP的鏡像進程裏

docker ps -a

docker attach 25c #切入到容器號為25c5cae76baf的鏡像進程裏

ls #已經進入容器裏了

exit #退出容器

docker ps -a 
容器的進程的STATUS已經處於EXIT狀態(之前是後台運行的,切入進去後執行exit就等於手動退出了)

圖書 深入淺出docker pdf_docker_22

 

3.8 Docker命令:stop(停止)

 

用於停止一個正在運行着的容器進程

docker ps -a

docker stop 7d2

圖書 深入淺出docker pdf_centos_23

 

3.9 Docker命令:start(啓動)

 

用於啓動一個已經停止了的容器進程

docker ps -a

docker start 7d2 25c

圖書 深入淺出docker pdf_centos_24

 

3.10 Docker命令:rm(刪容器,需要先停止)

 

用於刪除一個已經停止了的容器進程

docker ps -a

docker rm 093e4fb8b09c

圖書 深入淺出docker pdf_centos_25

 

3.11 Docker命令:rmi(刪鏡像,給在沒有容器啓動的情況下)

 

用於刪除一個未用作容器啓動的本地鏡像

docker images

docker rmi -f 052 #-f 強制刪除(即便被佔用)

docker rmi 052 #但要注意,被用作容器啓動的鏡像是不能刪除的(需先rm刪除容器進程)

圖書 深入淺出docker pdf_centos_26

 

3.12 Docker命令:commit(更改並保存)

 

將一個更改過的容器進程的容器狀態保存為一個新的鏡像

docker ps -a #查看啓動的容器進程

docker attach 686 #切入容器進程

mkdir yunjisuan #在容器進程裏創建yunjisuan目錄

ls

exit #退出容器進程

docker commit 686 mr.sl/centos7:2 #將更改後的容器進程保存為一個新的鏡像

docker images

圖書 深入淺出docker pdf_docker_27

 

生產一個新的容器並切入查看結果

docker images

docker run -d -it 06e /bin/bash

docker ps -a #查看新鏡像的容器進程

docker attach 426 #切入新鏡像的容器進程

ls #我們發現之前創建的目錄仍舊存在

圖書 深入淺出docker pdf_圖書 深入淺出docker pdf_28

 

3.13 Docker命令:exec(不切入情況下執行命令或切入容器)

 

用於從本地操作系統上直接向容器進程發佈執行命令並返回結果

docker ps -a

docker exec 686 ls /tmp #查看容器進程裏的/tmp目錄下所有內容

圖書 深入淺出docker pdf_Docker_29

 

用於從本地操作系統上切入向容器並退出不關閉方法

docker pa -a

docker exec -it 686 /bin/bash

exit

圖書 深入淺出docker pdf_docker_30

 

3.14 Docker命令:cp(複製)

 

用於在容器進程和本地系統之間複製文件

ls

touch xin

docker ps -a

docker exec 686 ls /tmp #向容器進程發佈命令

docker cp xin 686:/tmp

圖書 深入淺出docker pdf_圖書 深入淺出docker pdf_31

 

將指定容器進程的/tmp/yum.log複製到當前目錄下

docker exec 686 ls /tmp

docker cp 686:/tmp/yum.log . #將本地文件複製到容器進程裏

ls

圖書 深入淺出docker pdf_centos_32

 

3.15 Docker命令:create(創建容器,並不啓動zd)

 

用於創建一個容器進程,但是並不啓動它

docker images

docker create -it 148 #創建一個鏡像的容器進程,但不直接啓動

docker ps -a

docker start 5ed #啓動容器進程

docker ps -a

圖書 深入淺出docker pdf_centos_33

 

3.16 Docker命令:diff(做對比)

 

查看容器進程與源鏡像做對比,發生了改變的文件或文件夾

docker ps -a

cd /yunjisuan/

touch {1..6} #在容器進程中創建文件

ls

exit #退出容器進程

docker diff 686 #查看容器進程的變化

圖書 深入淺出docker pdf_Docker_34

 

3.17 Docker命令:events(時時監測)

 

時時監測容器的變化情況

docker events

前台時時監控容器的變化若要檢測,需要另外再起一個窗口進行操作

圖書 深入淺出docker pdf_centos_35


圖書 深入淺出docker pdf_docker_36

 

3.18 Docker命令:export(導出容器)

 

將容器進程的文件系統導出到本地

docker ps -a

docker export ab06a9794e45 > centos.tar #將容器進程導出成一個tar包

ls

圖書 深入淺出docker pdf_圖書 深入淺出docker pdf_37

 

3.19 Docker命令:import(導入容器自動創建鏡像)

 

用於將export導出的文件系統創建為一個鏡像

ls

docker import centos.tar Mr.sl/centos:3

docker images

圖書 深入淺出docker pdf_docker_38

 

3.20 Docker命令:history(查看鏡像歷史記錄)

 

用於查看一個鏡像的歷史修改紀錄

docker images

docker history 148

圖書 深入淺出docker pdf_centos_39

 

3.21 Docker命令:info(查看docker運行信息)

 

用於查看當前操作系統的docker運行信息

docker info

 

  1. Containers:1#容器進程1個
  2. Running:1#正在運行狀態的容器1個
  3. Paused:0
  4. Stopped:0
  5. Images:8#一共有8個鏡像

圖書 深入淺出docker pdf_docker_40

 

3.22 Docker命令:inspect(查看某個鏡像的詳細信息)

 

查看某個鏡像的詳細信息(json格式)

docker images

docker inspect 148

圖書 深入淺出docker pdf_docker_41

 

3.23 Docker命令:kill(強行停止容器)

 

強行停止一個或多個正在運行狀態的容器進程

docker ps -a

docker kill ab06a9794e45

圖書 深入淺出docker pdf_centos_42

 

3.24 Docker命令:save(導出鏡像)

 

用於將一個鏡像的文件系統導出到本地(export導出的是容器)

docker images

docker save test:1 > nginx.tar --->用ID號和鏡像名都可以

ls

圖書 深入淺出docker pdf_centos_43

 

3.25 Docker命令:load(導入鏡像)

 

用於將save導出到本地的tar包,重新加載為鏡像(和源鏡像的名字標識完全一樣)

docker images

ls

docker load < test.tar #將之前nginx這個鏡像的save備份導入系統

圖書 深入淺出docker pdf_圖書 深入淺出docker pdf_44

 

3.26 Docker命令:logs(看容器日誌)

 

用於輸出一個容器進程內的操作日誌

docker ps -a

docker logs 686

docker logs --tail 3 686 #只顯示容器日誌的後3行

圖書 深入淺出docker pdf_centos_45

 

3.27 Docker命令:pause && unpause(暫停和恢復)

 

用於將一個或多個容器的進程暫停和恢復

docker ps -a

docker pause 686 #暫停容器進程

docker unpause 686 #恢復容器進程

圖書 深入淺出docker pdf_centos_46

 

3.28 Docker命令:port(端口及協議)

 

用於列出一個容器的端口映射及協議

docker images

docker run -dit -p 2222:22 test:1 #啓動一個鏡像的容器進程 -p

docker ps -a

docker port 3b5 #查看容器進程的端口映射及協議

圖書 深入淺出docker pdf_docker_47

 

3.29 Docker命令:rename(容器重命名)

 

給容器進程重命名

docker ps -a

docker rename nginx_test nginx

圖書 深入淺出docker pdf_docker_48

 

3.30 Docker命令:restart(重啓)

 

重啓一個容器進程

docker ps -a

docker restart 686

圖書 深入淺出docker pdf_圖書 深入淺出docker pdf_49

 

3.31 Docker命令:stats(容器資源使用情況)

 

用於時時輸出容器的資源使用情況

docker ps -a

docker stats 686 --no-stream

圖書 深入淺出docker pdf_docker_50

 

3.32 Docker命令:tag(克隆鏡像)

 

用於從一個指定的鏡像創建另外一個鏡像

docker images

docker tag 62f test:2 #也可以指定鏡像名字

圖書 深入淺出docker pdf_centos_51

 

3.33 Docker命令:top(查看容器進程信息)

 

用於顯示指定容器的進程信息

docker ps -a

docker top 686

圖書 深入淺出docker pdf_docker_52

 

3.34 Docker命令:update(調整配置)

 

用於調整一個或多個容器的啓動配置

docker update --help

圖書 深入淺出docker pdf_Docker_53

 

3.35 Docker命令:version and wait

 

version用於顯示docker的版本信息

docker version

圖書 深入淺出docker pdf_docker_54

 

wait用於捕捉一個或多個容器的退出狀態,並返回退出狀態碼

docker ps -a

docker wait 6321c3a3481f #需要在開一個窗口stop這個容器進程再查看

圖書 深入淺出docker pdf_docker_55


圖書 深入淺出docker pdf_圖書 深入淺出docker pdf_56

 

3.36 Docker命令:login && logout && push

 

login用於登陸docker hub官方公有倉庫

 

logout用於登出docker hub官方公有倉庫

 

push用於將本地鏡像提交到docker hub

由於docker hub國內已經無法註冊,因此無法演示上述內容

DockerHub官方公有鏡像倉庫:https://hub.docker.com/

 

四,管理應用程序數據

 

4.1 Volume和Bind Mount

 

將Docker主機數據掛載到容器

Docker提供三種不同方式將數據從宿主機掛載到容器中:volumes,bind mounts和tmpfs。

volumes:Docker管理宿主機文件系統的一部分(/var/lib/docker/volumes)

bind mounts:可以存儲在宿主機系統的任意位置

tmpfs:掛載存儲在宿主機系統的內存中,而不會寫入宿主機的文件系統

圖書 深入淺出docker pdf_docker_57

 

4.1.1 Volume(掛載卷)

docker volume ls

cd /var/lib/docker/volumes/

docker volume create nginx-vol

docker images

docker run -dit --name nginx-test -p 80:80 --mount src=nginx-vol,dst=/usr/share/nginx/html nginx

docker exec nginx-test ls /usr/share/nginx/html

docker exec nginx-test touch /usr/share/nginx/html/xin

cd nginx-vol/_data

ls

curl 127.0.0.1

 

  1. 特別説明

  2. --name #容器的名字

  3. --mount #掛載

  4. src #源卷的名字

  5. dst #掛載到容器中的路徑

圖書 深入淺出docker pdf_docker_58

 

4.1.2 Bind Mounts(綁定目錄)

mkdir -p /www/html

docker run -dit --name nginx-test1 -p 81:80 --mount type=bind,src=/www/html,dst=/usr/share/nginx/html nginx

docker ps -a

docker exec nginx-test1 ls /usr/share/nginx/html

echo "yunjisuan" > /www/html/index.html

curl 127.0.0.1:81

圖書 深入淺出docker pdf_centos_59

 

特別提示

bind mounts可以掛載宿主機上的任意目錄(創建的目錄要是沒有文件綁定以後對方也會沒有文件),而volume先得創建後才能掛載

 

4.1.3 批量刪除volume

使用 docker run -v 啓動的容器被刪除以後,在主機上會遺留下來孤單的卷。可以使用下面的簡單方法來做清理

docker volume ls -qf dangling=true

docker volume rm $(docker volume ls -qf dangling=true)

 

4.2 實戰容器部署LNMP網站平台

首先我們下載一個wordpress博客(上文有所有包)

wget https://cn.wordpress.org/wordpress-4.7.4-zh_CN.tar.gz

 

4.2.1 創建MySQL數據庫容器

 

下載MySQL5.6版本鏡像

docker pull mysql:5.6

docker images --->之前下載過了這裏就不重新下載了

圖書 深入淺出docker pdf_圖書 深入淺出docker pdf_60

 

創建一個自定義網絡

docker network create lnmp

docker network ls

 

  1. b02d86520223 lnmp bridge local#默認驅動為網橋

圖書 深入淺出docker pdf_docker_61

 

啓動MySQL數據庫容器

docker run -dit --name lnmp_mysql --network lnmp -p 3306:3306 --mount src=mysql-vol,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=linyaonie mysql:5.6 --character-set-server=utf8

docker ps -a

圖書 深入淺出docker pdf_圖書 深入淺出docker pdf_62

 

特別提示

 

  1. 自定義網絡lnmp如果不提前創建的話,在啓動容器進程時會報錯
  2. 如果沒有提前pull好mysql:5.6那麼容器在啓動時會自動下載對應鏡像
  3. 如果沒有提前docker volume create mysql-vol,那麼容器啓動時會自動創建

 

查看容器lnmp_mysql的日誌輸出

docker logs lnmp_mysql

圖書 深入淺出docker pdf_docker_63

 

查看容器裏啓動的進程

docker top lnmp_mysql

圖書 深入淺出docker pdf_docker_64

 

4.2.2 向容器裏的Mysql創建一個庫並查看

docker exec lnmp_mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e"create database wp"'

docker exec -it lnmp_mysql /bin/bash

mysql -uroot -plinyaonie -e 'show databases;'

圖書 深入淺出docker pdf_Docker_65

 

4.2.4 創建nginx+PHP環境容器

 

創建一個網頁目錄

mkdir -p /app/wwwroot

ll -d /app/wwwroot

圖書 深入淺出docker pdf_圖書 深入淺出docker pdf_66

 

下載richarvey/nginx-php-fpm鏡像

docker pull richarvey/nginx-php-fpm --->之前已經下好了

docker images

圖書 深入淺出docker pdf_Docker_67

 

啓動richarvey/nginx-php-fpm鏡像的容器

docker run -dit --name lnmp_web --network lnmp -p 88:80 --mount type=bind,src=/app/wwwroot,dst=/var/www/html richarvey/nginx-php-fpm

docker ps -a

圖書 深入淺出docker pdf_Docker_68

 

4.2.5 解壓wordpress到網頁目錄/app/wwwroot下

ls

tar xf wordpress-4.7.4-zh_CN.tar.gz -C /app/wwwroot/

ls /app/wwwroot/

echo "yunjisuan" > /app/wwwroot/index.html

cat /app/wwwroot/index.html

圖書 深入淺出docker pdf_docker_69

 

4.2.6 博客wordpress訪問測試

通過瀏覽器進行docker宿主機的88端口的訪問測試

http://192.168.200.70:88

http://192.168.200.70:88/wordpress

圖書 深入淺出docker pdf_Docker_70


圖書 深入淺出docker pdf_centos_71

 

特別提示

如果出現連接不上的情況,那麼請按順序執行以下命令一遍

systemctl stop firewalld

systemctl stop iptables.service

iptables -F

iptables -P FORWARD ACCEPT

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

如果多次連續訪問同一網頁,那麼瀏覽器有可能默認去掉指定的端口 
若訪問不到,請查看是否指定了88端口