誰可以教我做網(wǎng)站南京廣告宣傳公司seo
一、什么是docker?
????????Docker是一個用于開發(fā),交付和運行應(yīng)用程序的開放平臺。Docker使您能夠?qū)?yīng)用程序與基礎(chǔ)架構(gòu)分開,從而可以快速交付軟件。借助Docker,您可以以與管理應(yīng)用程序相同的方式來管理基礎(chǔ)架構(gòu)。通過利用Docker的快速交付,測試和部署代碼的方法,您可以顯著減少編寫代碼和在生產(chǎn)環(huán)境中運行代碼之間的延遲。
????????通俗一點講:?Docker其實就是可以打包程序和運行環(huán)境(虛擬機,只能在linux下運行),
把環(huán)境和程序一起發(fā)布的容器。當你需要發(fā)布程序時你可以使用Docker將運行環(huán)境一起發(fā)布。
?二、docker優(yōu)勢劣勢
虛擬機和DocKer對比:
1.DocKer 啟動速度是虛機萬萬不敢調(diào)戲的了,(這里聲明一下,在同一臺電腦)。
2.在資源的利用上也比虛機高多了,同一臺機器上我相信能跑100臺DocKer,咱們肯定不趕跑這么多臺虛擬機,有效的節(jié)約資源。
3.傳統(tǒng)虛擬機, 虛擬出一條硬件,運行一個完整的操作系統(tǒng),然后在這個系統(tǒng)上安裝和運行軟件
4.容器內(nèi)的應(yīng)用直接運行在宿主機的內(nèi)部,容器是沒有自己的內(nèi)核的,也沒有虛擬硬件,所以輕便
5.每個容器間是相互隔離的,每個容器內(nèi)都有一個屬于自己的文件系統(tǒng),互不影響。
應(yīng)用更快速的交互和部署
傳統(tǒng):一堆幫助文檔,安裝程序
Docker: 打包鏡像發(fā)布測試,一鍵運行
????????更便捷的升級和擴縮容
????????更簡的系統(tǒng)運維
????????更高效的計算資源利用
三、docker的歷史
????????2008年,Solomon Hykes與朋友共同創(chuàng)建了名為DotCloud的公司,是一個PaaS(平臺即服務(wù) Platform-as-a-Service)提供商,2013年,Docker問世,面向開源,開源之后,Docker迅速火爆,后面公司改名為Docker。
????????Docker的第一個執(zhí)行環(huán)境是LXC,但從0.9版本開始被Libcontainer取代;LXC叫做LinuX Container,簡稱Linux的容器,是世界上第一個容器應(yīng)用,Linux Container提供了在單一可控主機節(jié)點上支持多個相互隔離的Server Container同時執(zhí)行的機制,?Libcontainer為Docker封裝了Linux提供的基礎(chǔ)功能,后面又被RunC代替(runc 是一個 Linux 命令行工具,用于根據(jù) OCI[開放容器聯(lián)盟]容器運行時規(guī)范創(chuàng)建和運行容器)。
四、docker架構(gòu)
????????Docker使用客戶端-服務(wù)器架構(gòu)。Docker客戶端與Docker守護進程進行對話,該守護進程完成了構(gòu)建,運行和分發(fā)Docker容器的繁重工作。Docker客戶端和守護程序可以?在同一系統(tǒng)上運行,或者您可以將Docker客戶端連接到遠程Docker守護程序。Docker客戶端和守護程序在UNIX套接字或網(wǎng)絡(luò)接口上使用REST API進行通信。另一個Docker客戶端是Docker Compose,它使您可以處理由一組容器組成的應(yīng)用程序。
五、Docker守護程序
????????Docker守護程序(dockerd
)偵聽Docker API請求并管理Docker對象,例如圖像,容器,網(wǎng)絡(luò)和卷。守護程序還可以與其他守護程序通信以管理Docker服務(wù)。
六、Docker客戶端
????????Docker客戶端(docker
)是許多Docker用戶與Docker交互的主要方式。當您使用諸如之類的命令時docker run
,客戶端會將這些命令發(fā)送到dockerd
,以執(zhí)行這些命令。該docker
命令使用Docker API。Docker客戶端可以與多個守護程序通信。
七、docker執(zhí)行過程
名詞解釋:
????????①鏡像:鏡像是只讀的文件,提供了運行程序完整的軟硬件資源,是應(yīng)用程序的"集裝箱";
?????????Docker鏡像就好比是一個模板,可以通過這個模板來創(chuàng)建容器服務(wù),tomcat鏡像 ===> run ===> tomcat01容器, 通過這個鏡像可以創(chuàng)建多個容器(最終服務(wù)運行或者項目運行就是在容器中的)
????????②容器:是鏡像的實例,由 Docker 負責(zé)創(chuàng)建,容器之間彼此隔離;
????????Docker利用容器技術(shù),獨立運行一個或者一組應(yīng)用, 通過鏡像來創(chuàng)建的
?????????啟動,停止,刪除,基本命令!
????????就目前可以把這個容器理解為一個簡易的linux系統(tǒng)
????????③倉庫:存放鏡像的地方
????????Docker Hub(默認是國外的)遠程倉庫地址: https://hub.docker.com/
????????阿里云,,,都有容器服務(wù)(配置鏡像加速!)
? ? ? ? ?④Docker file: 是一個配置文件 如何構(gòu)建的步驟 來指定一個鏡像是如何構(gòu)建的,通過Docker build指令可以將Dockerfile構(gòu)建成一個鏡像。
八、centos安裝docker
1、首先需要大家虛擬機聯(lián)網(wǎng),安裝yum工具
yum install -y yum-utils \device-mapper-persistent-data \lvm2 --skip-broken
2、然后更新本地鏡像源
# 設(shè)置docker鏡像源
yum-config-manager \--add-repo \https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repoyum makecache fast
3、安裝docker社區(qū)免費版
yum install -y docker-ce
4、啟動docker
Docker應(yīng)用需要用到各種端口,逐一去修改防火墻設(shè)置。非常麻煩,因此建議大家直接關(guān)閉防火墻!
啟動docker前,一定要關(guān)閉防火墻后!!
啟動docker前,一定要關(guān)閉防火墻后!!
啟動docker前,一定要關(guān)閉防火墻后!!
# 關(guān)閉
systemctl stop firewalld
# 禁止開機啟動防火墻
systemctl disable firewalld
5、通過命令啟動docker
systemctl start docker # 啟動docker服務(wù)systemctl stop docker # 停止docker服務(wù)systemctl restart docker # 重啟docker服務(wù)
配置使用騰訊云 Docker 鏡像源加速鏡像下載(可跳過)
執(zhí)行以下命令,打開 /etc/docker/daemon.json 配置文件
vim /etc/docker/daemon.json? 按 i 切換至編輯模式,添加以下內(nèi)容,并保存。
{ "registry-mirrors": [ ? "https://mirror.ccs.tencentyun.com" ] }
重啟Docker? ? systemctl restart docker
八、ubuntu安裝docker
# step 1: 安裝必要的一些系統(tǒng)工具
sudo apt-get updatesudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安裝GPG證書
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -# Step 3: 寫入軟件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"# Step 4: 更新并安裝 Docker-CE
sudo apt-get -y updatesudo apt-get -y install docker-ce
?#查看是否安裝成功 查看容器的運行情況
docker ps
九、CentOS安裝DockerCompose
1.Linux下需要通過命令下載:安裝緩慢需要多等一會
# 安裝
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
十、docker映射文件路徑
? ? 在創(chuàng)建docker容器時,想要與本地 路徑進行映射共享文件,使用docker run -v 指令,例如我需要將本地的路徑/root/code映射到容器內(nèi)的/data/code路徑(數(shù)據(jù)卷),使用如下命令,冒號前為宿主機的路徑,冒號后為容器路徑,其中xxx為鏡像完整的路徑
docker run -it -v /root/code:/data/code xxx/bin/bash
十一、使用docker拉取鏡像 nginx
1、如果不指定版本則默認拉取最新的鏡像版本
docker pull nginx?
十二、查看本地docker鏡像
docker images
就能看到上面拉取的nginx的鏡像了。
十三、運行容器
docker run --name nginx-test -p 8080:80 -d nginx
參數(shù)說明:
--name nginx-test:容器名稱。
-p 8080:80: 端口進行映射,將本地 8080 端口映射到容器內(nèi)部的 80 端口
?-d nginx: 設(shè)置容器在在后臺一直運行。
列表參數(shù)說明:
?Repository ?鏡像名稱
?Tag ?鏡像標簽
?Image Id ?鏡像 的ID
?Created ?鏡像的創(chuàng)建日期
?Size ? 鏡像的大小
注意:鏡像默認存放位置:/var/lib/docker目錄下
1、在宿主機訪問虛擬機地址將8080端口即可訪問nginx
?十四、查看鏡像信息
docker inspect 鏡像id
十五、鏡像命令
1.docker pull nginx:latest 拉取鏡像
2.docker images ?查看鏡像
3.docker run -d -p 81:80 nginx ?創(chuàng)建容器
4.docker ps ?查看正在運行的容器
5.docker ps -a ? 查看所有的容器(包括沒運行的容器)
6.docker ? exec ? -it ? 2d ? bash ? 登錄容器
? -i ? 讓容器的標準輸入保持打開
? -t ?讓docker分配一個偽終端并保存到容器的標準輸入
7.exit或者Ctrl+D ?退出容器8.docker ? rm ?-f ? 容器id ? 刪除容器
9.docker commit ?2d ?m1 將2d容器保存為m1鏡像
10.docker rmi -f ? 鏡像id ? ?刪除鏡像
11.docker ?save m2>1.tar ? 將m1鏡像保存到1.tar文件中(備份鏡像)
12.docker load < 1.tar ? ?將1.tar文件中加載為鏡像(加載鏡像)
13.docker tag ? ?添加鏡像標簽
eg: docker tag nginx:latest nginx:lnmp ? ? ? #給nginx打上標簽lnmp,原來的標簽是latest
14.docker images -q ? 查詢鏡像的id
15.docker rmi `docker images -q` ? ? ? 批量刪除所有鏡像
16. docker ?build ? -t ? 鏡像名稱 ? . ? ? ? dockerfile構(gòu)建鏡像
17.docker ? container ? run ? ? ? ? 啟動新容器
18.docker ?diff ? ? ?查看容器文件系統(tǒng)改動詳情。
19.docker ps -aq |wc -l ? ? 查找容器數(shù)量
20. docker ? ?info ? ? ?Docker實例的狀態(tài)和配置
十六、容器命令
1.docker container run
啟動新容器的命令。該命令的最簡形式接收鏡像和命令作為參數(shù)。鏡像用于創(chuàng)建容器,而命令則是希望容器運行的應(yīng)用。
docker run ?-it -d -p 81:80 nginx ? ? #命令會在前臺啟動一個 Ubuntu 容器,并運行 Bash Shell。
2.docker container ls
列出所有在運行(UP)狀態(tài)的容器。如果使用 -a 標記,還可以看到處于停止(Exited)狀態(tài)的容器
3.docker container? exec
用于在運行狀態(tài)的容器中,啟動一個新進程。該命令在將 Docker 主機 Shell 連接到一個運行中容器終端時非常有用。
eg:?docker exec -it 97 bash? ? ? ?#登錄容器
4.docker container stop
grammer:docker stop container_ID
此命令會停止運行中的容器,并將狀態(tài)置為 Exited(0)。
提示:該命令通過發(fā)送 SIGTERM 信號給容器內(nèi) PID 為 1 的進程達到目的。
如果進程沒有在 10s 之內(nèi)得到清理并停止運行,那么會接著發(fā)送 SIGKILL 信號來強制停止該容器。
5.?docker container start
grammer:?docker start container_ID
重啟處于停止(Exited)狀態(tài)的容器??梢栽?docker container start 命令中指定容器的名稱或者 ID。
6.docker? container? rm
刪除停止運行的容器??梢酝ㄟ^容器名稱或者 ID 來指定要刪除的容器。推薦首先使用docker container stop 命令停止容器.然后使用 docker container rm 來完成刪除(先停止再刪除)
7.?docker container inspect
顯示容器的配置細節(jié)和運行時信息。
十七、DockerFile構(gòu)建鏡像
1.Docker的引擎
Docker Engine(Docker引擎--發(fā)動機程序支持的核心組件)是Docker的核心部分,使用的是客戶端---服務(wù)器(C/S)架構(gòu)模式。其主要組成部分:
①、docker daemon:Docker的服務(wù)端組件,他是Docker架構(gòu)中運行在后臺的一個守護進程,可以接收并處理來自命令行接口及API接口的指令,然后進行相應(yīng)的后臺操作。
②、REST API:表示應(yīng)用程序API接口,開發(fā)者通過該API接口可以與Docker的守護進程進行交互,從而指示后臺進行相關(guān)操作。
③、docker CLI:表示Docker命令行接口,開發(fā)者可以在命令行中使用Docker相關(guān)指令與Docker守護進程進行交互,從而管理諸如image(鏡像)、container(容器)、network(網(wǎng)絡(luò))和data volumes(數(shù)據(jù)卷)等實體。
2.Docker的底層容器運行原理:
①、客戶端發(fā)送 docker pull tomcat 命令;
②、命令到達 Docker daemon(守護程序),守護進程首先檢查本地是否有該 Tomcat 的鏡像,如果沒有,則從注冊中心(倉庫)拉取該鏡像;
③、鏡像拉取到本地后,客戶端執(zhí)行 docker run 命令,守護程序就會創(chuàng)建容器,啟動應(yīng)用。
?Docker架構(gòu)主要包括Client、Docker_HOST和Register三部分:
1. Client(客戶端) ?docker CLIClient即Docker客戶端,也就是上一小節(jié)Docker Engine中介紹的docker CLI。開發(fā)者通過這個客戶端使用Docker的相關(guān)指令與Docker守護進程進行交互,從而進行Docker鏡像的創(chuàng)建、拉取和運行等操作。
2. DOCKER_HOST(Docker主機)
DOCKER_HOST即Docker內(nèi)部引擎運行的主機,主要指Docker daemon(Docker守護進程)??梢酝ㄟ^Docker守護進程與客戶端還有Docker的鏡像倉庫Registry進行交互,從而管理Images(鏡像)和Containers(容器)等。
3.Registry(注冊中心)
Registry即Docker注冊中心,實質(zhì)就是Docker鏡像倉庫,默認使用的是Docker官方遠程注冊中心Docker Hub,也可以使用開發(fā)者搭建的本地倉庫。Registry中包含了大量的鏡像,這些鏡像可以是官網(wǎng)基礎(chǔ)鏡像,也可以是其他開發(fā)者上傳的鏡像。
我們在實際使用 Docker 時,除了會涉及圖中的 3 個主要部分外,還會涉及很多Docker Objects(Docker對象),例如Images(鏡像)、Containers(容器)、Networks(網(wǎng)絡(luò))、Volumes (數(shù)據(jù)卷)、Plugins(插件)等。其中常用的兩個對象Image和Containers的說明如下。
?·Images(鏡像)
?Docker鏡像就是一個只讀的模板,包含了一些創(chuàng)建Docker容器的操作指令。通常情況下,一 個Docker鏡像是基于另一個基礎(chǔ)鏡像創(chuàng)建的,并且新創(chuàng)建的鏡像會額外包含一些功能配置。 ?例如:開發(fā)者可以依賴于一個 Ubuntu 的基礎(chǔ)鏡像創(chuàng)建一個新鏡像,并可以在新鏡像中安裝 Apache等軟件或其他應(yīng)用程序。
? ?
?·Containers(容器)
Docker 容器屬于鏡像的一個可運行實例(鏡像與容器的關(guān)系其實與 Java中的類與對象相似),開發(fā)者可以通過API接口或者CLI命令行接口來創(chuàng)建、運行、停止、移動、刪除一個容器,也可以將一個容器連接到一個或多個網(wǎng)絡(luò)中,將數(shù)據(jù)存儲與容器進行關(guān)聯(lián)。
3、認識dockerfile
鏡像概念?
鏡像是將應(yīng)用程序及其需要的系統(tǒng)函數(shù)庫、環(huán)境、配置、依賴打包組成。
鏡像是分層結(jié)構(gòu),每一層稱為一個Layer:
????????BaseImage: 包含基本的系統(tǒng)函數(shù)庫、環(huán)境變量、文件系統(tǒng)等
????????Entrypoint: 入口,是鏡像中應(yīng)用啟動的命令
????????其他:在BaseImage 基礎(chǔ)上添加依賴、安裝程序、完成整個應(yīng)用的安裝和配置
鏡像就是在系統(tǒng)函數(shù)庫、運行環(huán)境基礎(chǔ)上,添加應(yīng)用程序文件、配置文件、依賴文件等組合,然后編寫好啟動腳本打包在一起形成的文件。?
Dockerfile概念
Dockerfile使用來構(gòu)建Docker鏡像的文本文件,是由一條條構(gòu)建鏡像所需的指令和參數(shù)構(gòu)成的腳本。
Dockerfile是自定義鏡像的一套規(guī)則
Dockerfile由多條指令構(gòu)成,Dockerfile中的每一條指令都會對應(yīng)于Docker鏡像中的每一層
Dockerfile每行支持一條指令,每條指令可攜帶多個參數(shù),一條指令可以用&&方式,去寫多條指令。
Dockerfile支持以“#”為開頭的注釋
FROM XXX/jdk:8MAINTAINER docker_userENV JAVA_HOME /usr/local/javaADD apache-tomcat-8.0.32.tar.gz /usr/local/RUN mv apache-tomcat-8.0.32 tomcat8EXPOSE 8080RUN chmod u+x /usr/local/tomcat8/bin/*.shCMD /usr/local/tomcat8/bin/catalina.sh start
4.Dockerfile 的基本結(jié)構(gòu)分為4部分
- 基礎(chǔ)鏡像信息;
- 維護者信息;
- 鏡像操作指令;
- 容器啟動時執(zhí)行指令
5.Dockerfile 指令
FROM
格式為 FROM <image> 或 FROM <image>:<tag>
Dockerfile 文件的第一條指令必須為 FROM 指令。
并且,如果在同一個 Dockerfile 中創(chuàng)建多個鏡像時,
可以使用多個 FROM 指令(每個鏡像一次);
如果from沒有該鏡像,則從鏡像倉庫中找
MAINTAINER
格式為 MAINTAINER <name>,指定維護者信息;
ENV
格式為 ENV <key> <value>,指定一個環(huán)境變量,會被后續(xù) RUN 指令使用,并在容器運行時保持;
ADD
格式為 ADD <src> <dest>;
復(fù)制指定的<src>到容器中的<dest>;
EXPOSE
格式為 EXPOSE <port> [<port>...]
告訴 Docker 服務(wù)端容器暴露的端口號,供互聯(lián)系統(tǒng)使用,在啟動容
器時需要通過 -p 映射端口,Docker 主機會自動分配一個端口轉(zhuǎn)發(fā)到
指定的端口;
RUN
格式為 RUN <command>
RUN 指令將在當前鏡像基礎(chǔ)上執(zhí)行指定命令,并提交為新的鏡像,當命令較長時可以使用 \ 來換行;
CMD
指定啟動容器時執(zhí)行的命令,每個 Dockerfile 只能有一條 CMD 命令。
如果指定了多條命令,只有最后一條會被執(zhí)行。
如果用戶啟動容器時候指定了運行的命令,則會覆蓋掉 CMD 指定的命令。
WORKDIR
作用:切換到鏡像中的指定路徑,設(shè)置工作目錄
在 WORKDIR 中需要使用絕對路徑,如果鏡像中對應(yīng)的路徑不存在,會自動創(chuàng)建此目錄
一般用 WORKDIR 來替代 切換目錄進行操作的指令
RUN cd <path> && <do something>
WORKDIR 指令為 Dockerfile 中跟隨它的任何 RUN、CMD、ENTRYPOINT、COPY、ADD 指令設(shè)置工作目錄
如果 WORKDIR 不存在,即使它沒有在任何后續(xù) Dockerfile 指令中使用,它也會被創(chuàng)建。
ENTRYPOINT
Entrypoint的作用是,把整個container變成了一個可執(zhí)行的文件,這樣不能夠通過替換CMD的方法來改變創(chuàng)建container的方式。但是可以通過參數(shù)傳遞的方法影響到container內(nèi)部。
ENTRYPOINT 有兩種格式:
ENTRYPOINT [“executable”, “param1”, “param2”] (exec 格式,首選)
ENTRYPOINT command param1 param2 (shell 格式)
exec 格式
??docker run image 后面跟的命令行參數(shù)將會添加到 ENTRYPOINT 所有參數(shù)的最后,且會覆蓋掉所有 CMD 命令中的參數(shù)。這將允許運行時傳遞參數(shù)給 ENTRYPOINT 命令,例如 docker run image -d 會將 -d 參數(shù)傳給 ENTRYPOINT 命令 。ENTRYPOINT 命令可以通過 docker run --entrypoint 參數(shù)來覆蓋 。
shell 格式
??會忽略所有 CMD 命令的參數(shù)和 docker run 的命令行參數(shù),ENTRYPOINT 要運行的命令會作為 /bin/sh -c 的子命令運行,而且 /bin/sh 不會傳遞信號,也就是說 ENTRYPOINT 要運行的命令不是 PID 為 1 的進程,且不會收到 Unix 信號,所以你要執(zhí)行的命令不會收到 docker stop 發(fā)出的 SIGTERM 信號。
CMD 和 ENTRYPOINT 命令都定義了容器運行時運行命令。下面有幾條規(guī)則:
Dockerfile 必須有一條 CMD 或 ENTRYPOINT 命令
如果容器作為可執(zhí)行程序運行,需要指定 ENTRYPOINT 命令,
CMD 命令應(yīng)該用來定義 ENTRYPOINT 命令的默認參數(shù)
十八、通過dockerfile文件自定義java鏡像
構(gòu)建三步驟
1、編寫Dockerfile文件
2、docker build命令構(gòu)建鏡像
3、docker run 依鏡像運行容器實例
Dockerfile執(zhí)行流程
- docker 從基礎(chǔ)鏡像運行一個容器
- 執(zhí)行一條 指令并對容器做出修改
- 執(zhí)行類似docker commit的操作提交一個新的鏡像層
- docker 再基于剛提交的鏡像運行一個新容器
- 執(zhí)行dockerfile中的下一條指令,直到所有的指令都執(zhí)行完成
先下載對應(yīng)的資料:?
鏈接: https://pan.baidu.com/s/12XXUSOamR1uphXa-pOZl_Q 提取碼: h744
鏡像制作成功,啟動鏡像
docker run -d --name dd1 -p 8080:8080 docker-demo? ?啟動成功
docker logs -f dd1 查查容器dd1的啟動日志
http://192.168.32.16:8081/hello/count
十九、鏡像刪除
docker rmi image_id 這里的image_id可以根據(jù)docker images 查看
docker rm?image_id 刪除單個
docekr rmi?image_id1/容器名1? image_id2/容器名2
docker rmi -f? image_id 強制刪除鏡像
參考:docker入門---最全筆記_docker學(xué)習(xí)筆記-CSDN博客