Docker安裝與使用教程
CentOS安裝配置卸載Docker
前提
1.只能是64位CPU
2.內(nèi)核3.8以上(RHEL/CentOS 6.5,F(xiàn)edora Core 19以上),沒辦法,2014年才出現(xiàn),2017年才開始有熱度,注意:6.8的版本與7安裝方式不太一樣。


3.內(nèi)核必須支持一種適合的存儲驅(qū)動(Device Manager;AUFS;vfs;btrfs;)

如果沒有的話,需要安裝

4.內(nèi)核必須支持并開啟cgroup和nameSpace功能
YUM安裝
一、安裝依賴包

三、更新yum緩存
四、安裝CE版

五、啟動

六、檢查

七、執(zhí)行一個實例——hello world

鏡像加速
登入自己阿里云賬號https://dev.aliyun.com/search.html(作為計算機從業(yè)者是應該有的)


一、CentOS7
1.新建deamon.json

2.加載配置文件
3.重啟服務
架構(gòu)

常用命令
一、幫助命令
1.docker help

2.官方文檔https://docs.docker.com/

二、鏡像命令
1.列出本地鏡像

2.查詢鏡像(查詢是在https://hub.docker.com/,但是下載是在阿里云下載)


3.下載鏡像


4.刪除鏡像

三、容器命令
前提:有鏡像才能有容器
1.新建并啟動容器

1)以CentOS為模板生成一個容器,其中的110850f96301是新生成容器的地址


2)使用鏡像在后臺模式啟動一個容器
$> docker run -d centos
容器運行的命令如果不是那些一直掛起的命令(比如運行top,tail),就是會自動退出的。所以下面的方法就沒問題。
$>?docker?run?-d?centos:7.6.1810?/bin/sh?-c?"while?true;do?echo?'YangBingxue?is?the?most?handsome?man?in?NCEPU';sleep?2;done"

3)-P隨機端口


4)-p指定端口

2.列出當前所有正在運行的容器


3.退出容器


回來



4.啟動容器

但是有時會出錯,啟動mysql出問題,根據(jù)提示信息作出方案,kill端口。


5.重啟容器

四、容器管理
1.查看容器日志信息



2.查看容器內(nèi)運行的進程

3.查看容器內(nèi)部細節(jié)

4.從容器拷貝文件到主機上


5.提交容器成為鏡像

比如:我們打算把基于Nginx的誠實網(wǎng)站提交




6.提交到阿里云

鏡像原理
1.什么是鏡像
鏡像是一種輕量級、可執(zhí)行的獨立軟件包,用來打包軟件運行環(huán)境和基于運行環(huán)境開發(fā)的軟件,它包含運行某個軟件所需的所有內(nèi)容,包括代碼、運行時、庫、環(huán)境變量和配置文件。
2.UnionFS(聯(lián)合文件系統(tǒng)):
Union文件系統(tǒng)(UnionFS)是一種分層、輕量級并且高性能的文件系統(tǒng),它支持對文件系統(tǒng)的修改作為一次提交來一層層的疊加,同時可以將不同目錄掛載到同一個虛擬文件系統(tǒng)下(unite several directories into a single virtual filesystem)。
Union文件系統(tǒng)是Docker鏡像的基礎。鏡像可以通過分層來進行繼承,基于基礎鏡像(沒有父鏡像),可以制作各種具體的應用鏡像。
特性:一次同時加載多個文件系統(tǒng),但從外面看起來,只能看到一個文件系統(tǒng),聯(lián)合加載會把各層文件系統(tǒng)疊加起來,這樣最終的文件系統(tǒng)會包含所有底層的文件和目錄。
3.Docker鏡像加載原理
Docker的鏡像實際上由一層一層的文件系統(tǒng)組成,這種層級的文件系統(tǒng)UnionFS。
bootfs(boot file system)主要包含bootloader和kernel,bootloader主要是引導加載kernel,Linux剛啟動時會加載bootfs文件系統(tǒng),在Docker鏡像的最底層是bootfs。這一層與我們典型的Linux/Unix系統(tǒng)是一樣的,包含boot加載器和內(nèi)核。當boot加載完成之后整個內(nèi)核就都在內(nèi)存中了,此時內(nèi)存的使用權(quán)已由bootfs轉(zhuǎn)交給內(nèi)核,此時系統(tǒng)也會卸載bootfs。
rootfs(root file system),在bootfs之上。包含的就是典型Linux系統(tǒng)中的/dev,/proc,/bin,/etc等標準目錄和文件。rootfs就是各種不同的操作系統(tǒng)發(fā)行版,比如Ubuntu,Centos等等。
對于一個精簡的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序庫就可以了,因為底層直接用Host的kernel,自己只需要提供rootfs 就行了。由此可見對于不同的linux發(fā)行版,bootfs基本是一致的,rootfs會有差別,因此不同的發(fā)行版可以公用bootfs。
4.鏡像分層
以pull為例,pull一個nginx需要同時下載多層。


鏡像分層最大的一個好處就是:共享資源
eg:有多個鏡像都從相同的base鏡像構(gòu)建而來,那么宿主機只需在磁盤上保存一份base鏡像,同時內(nèi)存中也只需加載一份base鏡像,就可以為所有容器服務了。而且鏡像的每一層都可以被共享。
容器數(shù)據(jù)卷
一、容器數(shù)據(jù)卷特點:
數(shù)據(jù)卷可在容器之間共享或重用數(shù)據(jù)
卷中的更改可以直接生效
數(shù)據(jù)卷中的更改不會包含在鏡像的更新中
數(shù)據(jù)卷的生命周期一直持續(xù)到?jīng)]有容器使用它為止
主機與容器間的數(shù)據(jù)共享
二、添加容器數(shù)據(jù)卷
1.命令添加
1)?run -v

這時在host上在檢查的時候,新生成一個新文件夾my_data_volume,contain上面也新生成一個新文件夾 data——volume_container。
2)檢查是否掛載成功

3)讀寫操作
主機touch test,container立即出現(xiàn)test;
container vi test,Host cat立即出現(xiàn)結(jié)果
即使容器退出,主機依舊保存數(shù)據(jù)不變;
Host在container退出的時候touch test3,container在登入也會出現(xiàn)

我上面的出錯了,應該是docker start ?bc654a0dcc2c,但是盡管docker ps是兩個不同的進程,但是共享文件夾里面的是一樣的內(nèi)容。

可以掛載可讀模式(僅對于container)

查看細節(jié)

2.DockerFile添加
1)建立文件夾,在DockerFIle使用volume給鏡像添加一個或多個數(shù)據(jù)卷
FROM centos
VOLUME ["/data_volume1","/data_volume2"]?
CMD echo "FInish,YangBingxue_is_the_most_handsome_man_in_NCEPU"
CMD?/bin/bash
2)build

3)檢查是否掛載成功

主機文件位置一般在/var/lib/docker/volumes/下面

4)讀寫操作

三、數(shù)據(jù)卷容器 --volumes-from
A容器掛載數(shù)據(jù)卷,其它容器(B,C)通過掛載這個A(父容器)實現(xiàn)數(shù)據(jù)共享,掛載數(shù)據(jù)卷的容器,稱之為數(shù)據(jù)卷容器。
下面的docker1就是父容器,docker2與docker3都掛載到docker1上面,是docker1的子容器。

由此可見,父容器的文件,在子容器當中會出現(xiàn),子容器出現(xiàn)的文件在父容器也會出現(xiàn),即使刪除父容器,子容器的文件依然在

所以,容器之間配置信息的傳遞,數(shù)據(jù)卷的生命周期一直持續(xù)到?jīng)]有容器使用它為止
DockerFile
一、什么是DockerFile
1.DockerFile是用來構(gòu)建Docker鏡像的構(gòu)建文件,是由一系列命令和參數(shù)構(gòu)成的腳本。
2.構(gòu)建過程:
1)編寫DockerFIle文件

2)docker build
3)docker run
3從應用軟件的角度來看,Dockerfile、Docker鏡像與Docker容器分別代表軟件的三個不同階段,
Dockerfile是軟件的原材料
Docker鏡像是軟件的交付品
Docker容器則可以認為是軟件的運行態(tài)。

二、DockerFIle內(nèi)容
1.基礎常識
每條保留字指令都必須為大寫字母且后面要跟隨至少一個參數(shù)
指令按照從上到下,順序執(zhí)行
#表示注釋
每條指令都會創(chuàng)建一個新的鏡像層,并對鏡像進行提交
2.保留字

1)FROM基礎鏡像,當前鏡像是基于那個鏡像的
2)MAINTAINER:鏡像維護者的姓名和郵箱
3)RUN:容器構(gòu)建時需要運行的命令
4)EXPOSE:當前容器對外暴露的接口
5)WORKDIR:指定在創(chuàng)建容器后,終端默認登入進來的工作目錄
6)ENV:用來在構(gòu)建鏡像過程中設置環(huán)境變量



7)COPY:拷貝文件和目錄到鏡像中
8)ADD:COPY的壓縮文件+解壓
9)VOLUME:容器數(shù)據(jù)卷,用于數(shù)據(jù)保存和持久化
10)CMD:指定一個容器啟動時運行的命令
如果有多個CMD的話,只執(zhí)行最后一個CMD,CMD也可以被docker run 之后的命令替換。
11)ENTRYPOINT:指定一個容器啟東時運行的命令
全部ENTRYPOINT全部執(zhí)行
12)ONBUILD:當構(gòu)件一個被集成的DockerFile是運行命令,父鏡像在被子鏡像繼承后父鏡像的Onbulid被觸發(fā)。
總結(jié)

如果有建議和看法,可以在文末留言,謝謝。
