時間:2023-07-15 23:42:02 | 來源:網(wǎng)站運營
時間:2023-07-15 23:42:02 來源:網(wǎng)站運營
如何理解Docker,半小時教你入門實戰(zhàn),看完這篇就夠了?。?h2 data-first-child>一、歷史演化一個物理機上安裝操作系統(tǒng),然后直接運行我們的軟件。也就是說你電腦上直接跑了一個軟件,并沒有開虛擬機什么的,資源極其浪費。
虛擬機都不開,直接上物理機部署應(yīng)用,那成本能不高嘛
硬件資源沒有合理利用
每次遷移都要重新安裝一模一樣的運行環(huán)境等
一個物理機上虛擬化出來多個虛擬機,每個虛擬機上進行安裝操作系統(tǒng),然后在虛擬機上直接運行我們的軟件。比如阿里云、騰訊云等云服務(wù)器都是虛擬機。
一個物理機上創(chuàng)建多個虛擬機,每個虛擬機的ip都不同,一個軟件可以在不同虛擬機上進行部署。
每個虛擬機都由獨立分配的內(nèi)存磁盤等硬件資源,通過Hypervisor分配。
隨時隨地都能在一個物理機上開出新的虛擬機。成本也低。
假設(shè)我們的應(yīng)用程序只有幾KB,或者幾十MB,但是卻要在虛擬機上安裝一個幾百兆的操作系統(tǒng)來跑。
如果沒看懂就粗淺的理解為:你用shell命令寫了個腳本,下載jdk,配置環(huán)境變量、下載tomcat、部署你的程序等等這一套流程,然后交給運維,運維直接sh xxx.sh就完事了,環(huán)境什么的都是你給的,不會出現(xiàn)環(huán)境不一致的情況。你肯定有疑問:我虛擬機上有jdk了,你給我的腳本里再安裝jdk肯定不行啊,容器化技術(shù)可以讓資源隔離,互不影響。
那肯定啊,開發(fā)者將環(huán)境和程序打包給運維,運維直接執(zhí)行就完事了。
廢話,包都是開發(fā)者給的,開發(fā)者難道把一個應(yīng)用程序打兩個不同的包給運維?
加粗了,自行體會。
加粗的一句話已經(jīng)解釋的明明白白了,不明白就等于沒看懂上面的。
基于Centos7的安裝。
官方由于是國外的,所以不推薦,推薦下面的安裝方式。
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
device-mapper-persistent-data lvm2是干嘛的?
docker要想數(shù)據(jù)存儲就必須要安裝這兩個,這兩個是為了docker做數(shù)據(jù)存儲用的。
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum makecache fastsudo yum -y install docker-ce
sudo service docker startdocker version
好不容易安裝完了,先爽一把helloworld。
docker pull hello-worlddocker run hello-world
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker
(6)大功告成docker pull xxx
來測試下了,速度賊拉快。docker pull
下來的鏡像。docker pull
命令就是先去本地倉庫檢查是否有這個鏡像,沒有的話就去遠(yuǎn)程倉庫拉取鏡像放到本地倉庫。鏡像都是別人打包好的應(yīng)用程序。直接搜索就行,不用注冊登錄。
docker run
的請求會交給docker daemon處理,docker daemon會給這個鏡像開辟一個新的容器。再比如客戶端發(fā)起docker pull
命令也是交給docker daemon,docker daemon去檢查本地倉庫有沒有,本地倉庫沒有的話docker daemon去遠(yuǎn)程倉庫拉取鏡像放到本地倉庫。docker build
給docker daemon,docker daemon收到請求后會構(gòu)建鏡像放到本地倉庫。docker pull
命令給docker daemon,docker daemon收到命令后會優(yōu)先檢查本地倉庫是否存在此鏡像,若不存在則去遠(yuǎn)程倉庫拉取鏡像并放到本地倉庫,若存在則不走遠(yuǎn)程倉庫。docker run
命令給docker daemon,docker daemon收到命令后會啟動一個新的容器,所以一個鏡像可以有多個容器,只要我run一次就會產(chǎn)生一個新的容器出來。docker pull tomcat
完整命令是:docker pull 鏡像名<:tags> 從遠(yuǎn)程倉庫拉取鏡像。如果沒寫:tags則代表是latest版本。如下圖
docker pull tomcat:8.5.55-jdk8-openjdk
這個tag是從如下地方獲取的docker images
鏡像有了該啟動容器玩玩了。
docker run tomcat
完整命令是:docker run 鏡像名<:tags> 這里沒指定tag就代表是latest, docker images
可以查看鏡像tags等信息。
docker pull
、docker images
、docker run
,將tomcat正常啟動了,默認(rèn)端口8080,問題來了,我怎么訪問呢?它是在docker里的,不是我宿主機的8080端口,這就需要做一個端口映射。宿主機和docker啟動的tomcat的端口映射。docker run -p 8000:8080 tomcat
也就是啟動參數(shù)里多加個-p參數(shù),-p參數(shù)用于端口映射,前面是宿主機端口,后面是容器端口。
# 先用docker ps命令查看啟動的容器docker ps
# 進入容器的tomcatdocker exec -it ac1c3d62b75d /bin/bash
格式:docker exec [-it] 容器id 命令執(zhí)行
exec:在對應(yīng)容器中執(zhí)行命令
-it:采用交互方式執(zhí)行命令
ls -l
查看目錄webapps.dist
文件夾,這個文件夾是原有tomcat的主頁面,我們可以刪除webapps,然后mv命令將webapps.dist
改為webapps,等自動部署完在訪問網(wǎng)頁就正常了。mv后tomcat部署稍微慢點,等1-2min,在訪問就行。
現(xiàn)在問題:ctrl+c就結(jié)束進程了。
# -d 參數(shù)即可docker run -p 8000:8080 -d tomcat
-p 端口映射
-d 后臺啟動
docker exec -it ac1c3d62b75d /bin/bash
執(zhí)行cat /proc/version
,可以發(fā)現(xiàn)帶了個紅帽系統(tǒng)
java -version
這個還用驗證?
docker create tomcat# 查看容器狀態(tài),會發(fā)現(xiàn)是createddocker ps -a
docker start 8c4a21f47b8f# 查看容器狀態(tài),會發(fā)現(xiàn)是up, up就對應(yīng)running,代表運行中docker ps
# docker stop命令會讓容器進入exit狀態(tài),這個不等于paused,paused沒有演示的必要。docker stop 8c4a21f47b8f# rm刪除容器。也就對應(yīng)deleted狀態(tài)docker rm 8c4a21f47bf
關(guān)鍵詞:實戰(zhàn),入門,理解,小時
微信公眾號
版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。