001/Docker入门(Mooc)
docker官網:https://www.docker.com/
1。什么是docker
2。Docker思想
? ? ==》
【1】。集裝箱:保證程序完整(不缺東西,如配置文件等)。
【2】。標準化:開發測試都是使用一套環境
? ? ? ?(1)。運輸方式:選擇傳輸應用的方式,如QQ,ftp等。(docker不用)
? ? ? ?(2)。應用存儲位置。(docker不需要你記住存儲位置)
(3)。API接口:接品標化化用同樣的命令控制所有應用
【3】。隔離:每個服務獨自運行,互不影響
LXC為Linux Container的簡寫。可以提供輕量級的虛擬化,以便隔離進程和資源,而且不需要提供指令解釋機制以及全虛擬化的其他復雜性。3。Docker解決什么問題
【1】。我本地環境沒問題啊?(docker集裝箱解決該問題)
【2】。系統好卡,哪個同學又寫死循環了?(docker隔離性解決該問題,如:linux本來是多租戶,允許多個用戶使用。)
【3】。雙11來了,服務器撐不住了。(節日前擴展機器,節后再下線節點。浪費。有了docker,即可隨時擴充服務器。)
docker讓快速擴展 & 彈性伸縮變得簡單。
4。Docker核心技術
鏡像:(集裝箱)
倉庫:(超級碼頭)
容器:(運行程序的地方)
用docker運行一個程序的過程:去倉庫把鏡像拉到本地,用一條命令,把鏡像運行起來變成容器。
Build:構建鏡像?[鏡像 類比 集裝箱]
Ship:運輸鏡像(從倉庫 & 主機上運輸)[倉庫 類比 超級碼頭]
Run:運行鏡像(運行的鏡像就是一個容器)- [容器 就是 運行程序的地方]
5。Docker鏡像
鯨魚馱著的就是一堆鏡像
Docker鏡像:鏡像就是一系列的文件,它可以包括應用程序,應用環境的文件,docker將它保存到本地,以什么格式保存(涉及技術linux的存儲技術:聯合文件系統)
聯合文件系統:docker Unie fileSystem (分層)(可將不同目錄掛在同一文件系統)
test1第一層,test2第二層。test聯合文件系統可以看到test1和test2所有內容。
鏡像存儲格式:
?
最底層-》最頂層:
【1】操作系統引導 【2】具體linux操作系統 【3】相關軟件,如tomcat/jdk【4】存儲應用代碼【5】容器(可修改)
以上這些均為一個文件系統,為一個docker鏡像。
6。Docker容器
容器的本質就是一個進程。(容器在鏡像的最上層為可讀可寫,鏡像的其他層均為只讀)
(可將容器理解為一個虛擬機)
Docker鏡像的每一層都是只讀的,而容器作為最上層,是可讀可寫的。如果程序需要對鏡像進行修改,那么Docker會把要修改的鏡像文件拷貝到最上層的容器中,然后再進行修改。往后對該文件的訪問會優先從容器中讀取,尋找文件的順序是從下往下。
7。Docker倉庫
構建鏡像的目的是在其他環境或其他機器上運行我的程序。
需要將鏡像傳輸到其他環境--應用docker倉庫(構建鏡像-》運輸-》Docker倉庫《- 目地的從docker倉庫拉取鏡像)
docker提供中央倉庫:地址(hub.docker.com / c.163.com)?
8。Docker安裝
視頻地址;https://www.imooc.com/video/14616 (windows/ mac /linux)
推薦linux,docker本身在linux研發,更源生。
9。第一個docker鏡像
10。docker網絡
網絡類型:
1.Bridger:橋接模式(有獨立的network namespace,即有獨立IP和端口).與外界互通,需要端口映射。
2.Host:主機模式(與主機共用同一網卡)
3.NONE:無網絡。docker容器不能與外界互通
$docker run -d -p 8080:80 hub.c.163.com/library/nginx//-d:指定后臺進程 //-p:映射端口 (主機端口:容器端口) $netstat -na | grep 8080 //查看8080是否被占用 $docker run -d -P hub.c.163.com/library/nginx //隨機映射端口11。制作自己的鏡像
【1】。Dockerfile
【2】。docker build
【3】。Jpress
? ? ? ? http://jpress.io? //開源的java-web應用
準備工作:
1。javaWar包。
2。java web依賴tomcat服務器,docker pull tomcat鏡像
3。vi Dockerfile? ? ?
from tomcat鏡像名 //tomcat作為基礎鏡像(tomcat包含jdk) MAINTAINER 所有者名 所有者聯系方式 //所有者信息 COPY jpress.war tomcat鏡像webapp目錄 //web應用放入鏡像,運行自建javaweb程序4。docker build -t 鏡像名字 目錄(.表示當前目錄)
5。docker image ls //查看鏡像
6。運行自己的容器
地址欄訪問:http://localhost:8888/webappname 即可正常訪問。?
jpress項目需要mysql ,可在docker中安裝一個mysql鏡像即可.
……………………………………………………………………………………………………………………………………
Eg1:以本地java打war包為例,構建一個鏡像
Step1:以tomcat鏡像為基礎鏡像docker pull tomcat //拉取tomcat鏡像 Step2:定制鏡像touch Dockerfile #新建Dockerfile文件vi Dockerfile #編輯Dockerfile##add content startFROM tomcat:latestMAINTAINER shiyufeng kaixinyufeng@sina.comCOPY web-ssm-single.war /usr/local/tomcat/webapps##add content endStep3:構建鏡像docker build -t cfca-web:v1 . //在當前目錄,構建一個cfca-web的鏡像,tag為v1的鏡像 Step4:run鏡像為容器docker run -d -p 8089:8080 cfca-web:v1 //-d后臺守護進程 -p映射端口宿主機:容器 鏡像名 地址欄訪問:http://localhost:8089/web-ssm-single/即可。命令行訪問:
?
ZBMAC-C02VX5Y7H:myLearn shiyufeng$ curl http://localhost:8089/web-ssm-single
ZBMAC-C02VX5Y7H:myLearn shiyufeng$ curl http://localhost:8089/web-ssm-single/
<html>
<body>
<h2>Hello World!</h2>
<h3><a href="/user/query">send request</a></h3>
</body>
</html>
地址欄訪問:http://localhost:8089/web-ssm-single/
成功!!!
Eg2:以nginx為例:
//Step1:從遠程倉庫拉取鏡像 docker pull nginx #未指定版本默認拉取最新鏡像docker pull nginx:版本號 #指定版本號拉取//Step2:查看鏡像 docker image ls nginx//Step3:啟動鏡像-》容器 docker run -d -p 8088:80 nginx:latest #-d指定后臺守護進程 -p指定映射宿主機:容器端口號 nginx指定鏡像名稱//docker ps #查看當前運行的容器//以上相當于在本地8088端口開啟了一個nginx服務。//地址欄訪問:localhost:8088 即顯示welcome to nginx//停止容器 docker stop 容器id//重新啟動容器 docker ps -a #查詢所有容器 docker start 容器id//在某一目錄下新建index.html vi index.html<html><h1>yufeng learn docker!!!</h1></html>//拷備本地index.html文件到docker容器 docker cp index.html 容器id://index.html文件所在容器路徑 docker cp index.html 容器id://usr/share/nginx/html//打開瀏覽器再次訪問。頁面顯示新內容yufeng learn docker!!!//停止nginx容器 & 再重新運行nginx容器 docker stop 容器id docker run -d -p 8088:80 nginx:latest//瀏覽器再次訪問:localhost:8088,會出現welcome to nginx。而非新內容//說明:docker在容器內所做的改動都是暫時的,都是未被保存的。//保存自定義內容 docker cp index.html 容器id://usr/share/nginx/html docker commit -m '備注信息' 容器id 名字上述會重新定制一個imagedocker run -d -p 8088:80 Repository?注:上述用commit定制鏡像不建議應用(命令無法找回)
推建Dockerfile文件定制鏡像。
……………………………………………………………………………………………………………………………………
12。Volume:提供容器之外的持久化存儲
方法一:
//docker run運行一個容器,通過-v掛載一個卷 $docker run -d --name nginx -v /usr/share/nginx/html nginx//-d 守護進程 --name指定名稱 -v掛載一個卷 nginx容器名稱 $docker inspect nginx //檢查核心位置:
$ ls /var/lib/docker/volumes/c92d78d64d6be29847ec12583cced83015d5fd43b6e43b5379463d3cf3110165/_data//會報無該目錄。原因是mac上多了一層虛擬層alphascreen ~/library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty//應用上述命令即可進入//退出screen ctrl + a?,再按?d?鍵暫時退出終端
方法二:volume本地目錄掛載到容器目錄中:
$mkdir html $vi index.html ##content start <html> <h1>docker volume學習!</h1> </html> ##content end$docker run -d -p 80:80 -v $PWD/html:/usr/share/nginx/html nginx//-d:后臺守護進程 -p:端口映射(宿主機:容器) //-v:數據卷 (本機目錄:容器目錄) nginx:鏡像 //$PWD:當前目錄 //驗證 curl http://localhost//修改本機index.html內容。再將執行curl。則容器index.html隨主機變化而變化。好處:只需要在本地修改,即可在容器中體現。
方法三:volume掛載一個容器到另一容器
//step1:創建一個目錄叫data $mkdir data//step2:創建一個容器,該容器僅僅用于存儲數據 docker create -v $PWD/data:/var/mydata --name data_container ubuntu// -v:volume $PWD:當前路徑 // /var/mydata容器中路徑,自定義 // -name指定容器名字 // ubuntu指定基礎鏡像//Step3:運行并進入容器內部 $docker run -it --volumes-from data_container ubuntu /bin/bash//-it:交互式執行 /bin/bash //--volumes-from指定從另外一個容器掛載。 //ubuntu:基礎鏡像//Step4: $ mount//Step5:進入容器該目錄下 $ cd var/mydata//Step6:創建一個文件 $ vi volume.txt//Step7:退出 exit//Step8:查看本機data目錄下,已經有volume.txt文件
應用mount命令查看掛載目錄
進入容器目錄,添加一個文件,在本地文件目錄/data下即可看到剛在容器中創建的目錄。
好處:新創建的數據容器可以被多個其他容器掛載,達到數據共享.?
13。Registry:鏡像倉庫(SAAS服務)
術語:
國內一些倉庫:daocloud/時速云/aliyun
14。docker-compose:多容器app
【1】安裝docker-compose
【2】實戰
Mac安裝:
https://docs.docker.com/docker-for-mac/edge-release-notes/#docker-community-edition-18050-ce-mac66-2018-05-17
轉載于:https://www.cnblogs.com/kaixinyufeng/p/9247151.html
總結
以上是生活随笔為你收集整理的001/Docker入门(Mooc)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第四章 孤独
- 下一篇: MySQL-MMM架构部署(有图)