云原生之docker命令詳解
1.云原生概念
1.1 云原生定義
云原生”顧名思義,就是“生在云上、長(zhǎng)在云上”。
云原生是一種以云計(jì)算技術(shù)為基礎(chǔ),利用容器、微服務(wù)、DevOps 和自動(dòng)化等技術(shù)實(shí)現(xiàn)敏捷開(kāi)發(fā)、快速部署的應(yīng)用程序架構(gòu),這就是云原生。
云原生是面向“云”而設(shè)計(jì)的應(yīng)用,因此技術(shù)部分依賴于傳統(tǒng)云計(jì)算的 3 層概念,基礎(chǔ)設(shè)施即服務(wù)(IaaS)、平臺(tái)即服務(wù)(PaaS)和軟件即服務(wù)(SaaS)。
1.2 云原生元素
云原生元素如下圖:
1.2.1 微服務(wù)
微服務(wù)解決的是我們軟件開(kāi)發(fā)中一直追求的低耦合+高內(nèi)聚,記得有一次我們系統(tǒng)的接口出了問(wèn)題,結(jié)果影響了用戶的前臺(tái)操作,于是黎叔拍案而起,靈魂發(fā)問(wèn):“為啥這兩個(gè)會(huì)互相影響?!”
微服務(wù)可以解決這個(gè)問(wèn)題,微服務(wù)的本質(zhì)是把一塊大餅分成若干塊低耦合的小餅,比如一塊小餅專門負(fù)責(zé)接收外部的數(shù)據(jù),一塊小餅專門負(fù)責(zé)響應(yīng)前臺(tái)的操作,小餅可以進(jìn)一步拆分,比如負(fù)責(zé)接收外部數(shù)據(jù)的小餅可以繼續(xù)分成多塊負(fù)責(zé)接收不同類型數(shù)據(jù)的小餅,這樣每個(gè)小餅出問(wèn)題了,其它小餅還能正常對(duì)外提供服務(wù)。
1.2.2 DevOps
DevOps 的意思就是開(kāi)發(fā)和運(yùn)維不再是分開(kāi)的兩個(gè)團(tuán)隊(duì),而是你中有我,我中有你的一個(gè)團(tuán)隊(duì)。我們現(xiàn)在開(kāi)發(fā)和運(yùn)維已經(jīng)是一個(gè)團(tuán)隊(duì)了,但是運(yùn)維方面的知識(shí)和經(jīng)驗(yàn)還需要持續(xù)提高。
1.2.3 持續(xù)交付
持續(xù)交付的意思就是在不影響用戶使用服務(wù)的前提下頻繁把新功能發(fā)布給用戶使用,要做到這點(diǎn)非常非常難。我們現(xiàn)在兩周一個(gè)版本,每次上線之后都會(huì)給不同的用戶造成不同程度的影響。
1.2.4 容器化
容器化的好處在于運(yùn)維的時(shí)候不需要再關(guān)心每個(gè)服務(wù)所使用的技術(shù)棧了,每個(gè)服務(wù)都被無(wú)差別地封裝在容器里,可以被無(wú)差別地管理和維護(hù),現(xiàn)在比較流行的工具是 docker 和 k8s
所以你也可以簡(jiǎn)單地把云原生理解為:云原生 = 微服務(wù) + DevOps + 持續(xù)交付 + 容器化
2. Docker
2.1 Docker概述
2.1.1 Docker 定義
Docker 是一個(gè)開(kāi)源的應(yīng)用容器引擎,基于Go 語(yǔ)言并遵從 Apache2.0 協(xié)議開(kāi)源。 Docker 可以讓開(kāi)發(fā)者打包他們的應(yīng)用以及依賴包到一個(gè)輕量級(jí)、可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口,更重要的是容器性能開(kāi)銷極低。
2.1.2 Docker應(yīng)用場(chǎng)景
Web 應(yīng)用的自動(dòng)化打包和發(fā)布。
自動(dòng)化測(cè)試和持續(xù)集成、發(fā)布。
在服務(wù)型環(huán)境中部署和調(diào)整數(shù)據(jù)庫(kù)或其他的后臺(tái)應(yīng)用。
- 解決軟件跨境遷移的問(wèn)題
2.1.3 Docker的架構(gòu)
鏡像(image)
Docker鏡像(Image)就是一個(gè)只讀的模板。鏡像可以用來(lái)創(chuàng)建Docker容器,一個(gè)鏡像可以創(chuàng)建很多容器。
容器(container)
Docker利用容器(Container)獨(dú)立運(yùn)行一個(gè)或一組應(yīng)用。容器是使用鏡像創(chuàng)建的運(yùn)行實(shí)例。它可以被啟動(dòng)、開(kāi)始、停止、刪除。每個(gè)容器都是相互隔離的、保證安全的平臺(tái),容器是一個(gè)簡(jiǎn)易版的Linux環(huán)境和運(yùn)行在其中的應(yīng)用程序。
倉(cāng)庫(kù)(Repository)
倉(cāng)庫(kù)(Repository)是集中存放鏡像文件的場(chǎng)所。倉(cāng)庫(kù)(Repository)和倉(cāng)庫(kù)注冊(cè)服務(wù)器(Registry)是有區(qū)別的。倉(cāng)庫(kù)注冊(cè)服務(wù)器上往往存放著多個(gè)倉(cāng)庫(kù),每個(gè)倉(cāng)庫(kù)中又包含了多個(gè)鏡像,每個(gè)鏡像有不同的標(biāo)簽(tag)。倉(cāng)庫(kù)分為公開(kāi)倉(cāng)庫(kù)(Public)和私有倉(cāng)庫(kù)(Private)兩種形式。最大的公開(kāi)倉(cāng)庫(kù)是Docker Hub(https://hub.docker.com/),存放了數(shù)量龐大的鏡像供用戶下載。國(guó)內(nèi)的公開(kāi)倉(cāng)庫(kù)包括阿里云、網(wǎng)易云等。
2.2 Docker命令
2.2.1 docker進(jìn)程相關(guān)命令
#啟動(dòng)docker systemctl start docker #停止docker systemctl stop docker #查看docker狀態(tài) systemctl status docker #重啟docker systemctl restart docker #設(shè)置開(kāi)機(jī)啟動(dòng) systemctl enable docker
2.2.2 docker鏡像相關(guān)命令
#查看鏡像,查看本地所有的鏡像 docker images docker images -q #查詢所有鏡像的ID -a #列出所有的鏡像 --help #命令幫助 #查詢?nèi)缦? #鏡像的倉(cāng)庫(kù)源, 鏡像的標(biāo)簽,鏡像的id, 鏡像的創(chuàng)建時(shí)間, 鏡像的大小 REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest feb5d9fea6a5 14 months ago 13.3kB #搜索鏡像:從網(wǎng)絡(luò)中查詢需要的鏡像 docker search 鏡像的名稱 #拉取鏡像:從Docker倉(cāng)庫(kù)下載鏡像到本地,鏡像名稱格式為 名稱:版本號(hào), 如果不指定,則是最新版,如果不知道鏡像的版本號(hào),可以去hub.docker.com去查詢 docker pull 鏡像名稱 #刪除指定鏡像 docker rmi 鏡像id
2.2.3 docker容器相關(guān)命令
docker run 參數(shù) 鏡像名稱:版本號(hào)
參數(shù)說(shuō)明:
* -i:保持容器運(yùn)行,通常與-t同時(shí)使用,加上 it 這兩個(gè)參數(shù)后,容器創(chuàng)建后自動(dòng)進(jìn)入容器中,退出容器后,容器自動(dòng)關(guān)閉,
* -d:以守護(hù)(后臺(tái))模式運(yùn)行容器,創(chuàng)建一個(gè)容器在后臺(tái)運(yùn)行,需要使用docker exec 進(jìn)入容器,退出后,容器不會(huì)關(guān)閉。
* --name: 為創(chuàng)建的容器命名
* -p 宿主機(jī)端口:容器端口
#查看正在運(yùn)行容器 docker ps #查看所有容器 docker ps -a #創(chuàng)建并啟動(dòng)容器 docker run -d --name nginx1 -p 4200:80 nginx #進(jìn)入容器 docker exec -it ngnix1 /bin/bash #停止容器 docker stop 容器名稱或者容器id #啟動(dòng)容器 docker start 容器名稱或者容器id #刪除容器:如果是運(yùn)行狀態(tài)則刪除失敗,需要停止容器才能刪除 docker rm 容器名稱或者容器id #查看容器信息 docker inspect 同期名稱或者容器id
2.2.4 日志進(jìn)程
#查看最近日志 docker logs -f 容器名/容器ID #最近30分鐘的日志 docker logs #查看某時(shí)間之后的日志 docker logs -t --since="2022-08-08T18:08:08" 容器ID #查看某時(shí)間段日志 docker logs -t --since="2022-08-08T18:08:08" --until "2022-08-08T20:08:08" 容器ID
2.2.5 數(shù)據(jù)卷容器
卷就是目錄或文件,存在于一個(gè)或多個(gè)容器中,由docker掛載到容器,但不屬于聯(lián)合文件系統(tǒng),因此能夠繞過(guò)Union File System提供一些用于持續(xù)存儲(chǔ)或共享數(shù)據(jù)的特性,卷的設(shè)計(jì)目的就是數(shù)據(jù)的持久化,完全獨(dú)立于容器的生存周期,因此Docker不會(huì)在容器刪除時(shí)刪除其掛載的數(shù)據(jù)卷。數(shù)據(jù)卷可在容器之間共享或重用數(shù)據(jù)并且卷中的更改可以直接實(shí)時(shí)生效,數(shù)據(jù)卷的生命周期一直持續(xù)到?jīng)]有容器使用它為止。
配置數(shù)據(jù)卷
docker run ... -v 宿主機(jī)目錄(文件):容器內(nèi)目錄(文件)...
注意事項(xiàng)
- 目錄必須是絕對(duì)路徑
- 如果目錄不存在,會(huì)自動(dòng)創(chuàng)建
- 可以掛在多個(gè)數(shù)據(jù)卷
#mysql 同步數(shù)據(jù) docker run -d -p 3310:3306 -v /www/server/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql1 mysql:5.5
2.2.6 dockerfile構(gòu)建docker鏡像文件
- Dockerfile 是一個(gè)文本文件
- 包含了一條條的指令
- 每一條指令構(gòu)建一層,基于基礎(chǔ)鏡像,最終構(gòu)建出一個(gè)新的鏡像
- 對(duì)于開(kāi)發(fā)人員:可以為開(kāi)發(fā)團(tuán)隊(duì)提供一個(gè)完全一直的開(kāi)發(fā)環(huán)境
- 對(duì)于測(cè)試人員:可以直接那開(kāi)發(fā)時(shí)所構(gòu)建的鏡像或者通過(guò)Dockerfile文件構(gòu)建一個(gè)新的鏡像開(kāi)始工作
- 對(duì)于運(yùn)維人員:在部署時(shí),可以實(shí)現(xiàn)應(yīng)用的無(wú)縫移植
構(gòu)建自己的centos鏡像如下圖
執(zhí)行dockerfile生成鏡像
docker build -f dockerfile文件的路徑 -t 設(shè)置新的鏡像的名稱和版本號(hào) . # 注意最后的點(diǎn),代表生成的鏡像路徑
-f 表示dockerfile路徑
-t 設(shè)備新鏡像的名稱和版本號(hào)
最后的. 表示生成鏡像的路徑,為當(dāng)前路徑
2.2.7 Docker Compose
我們使用 Docker 的時(shí)候,定義 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服務(wù)架構(gòu)的應(yīng)用系統(tǒng)一般包含若干個(gè)微服務(wù),每個(gè)微服務(wù)一般都會(huì)部署多個(gè)實(shí)例,如果每個(gè)微服務(wù)都要手動(dòng)啟停,那么效率之低,維護(hù)量之大可想而知。
Compose 是用于定義和運(yùn)行多容器 Docker 應(yīng)用程序的工具。通過(guò) Compose,您可以使用 YML 文件來(lái)配置應(yīng)用程序需要的所有服務(wù)。然后,使用一個(gè)命令,就可以從 YML 文件配置中創(chuàng)建并啟動(dòng)所有服務(wù)。
Compose 使用的三個(gè)步驟:
- 使用 Dockerfile 定義應(yīng)用程序的環(huán)境。
- 使用 docker-compose.yml 定義構(gòu)成應(yīng)用程序的服務(wù),這樣它們可以在隔離環(huán)境中一起運(yùn)行。
- 最后,執(zhí)行 docker-compose up 命令來(lái)啟動(dòng)并運(yùn)行整個(gè)應(yīng)用程序。
以上就是云原生之docker命令詳解的詳細(xì)內(nèi)容,更多關(guān)于云原生 docker命令的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Docker之開(kāi)啟遠(yuǎn)程訪問(wèn)的實(shí)現(xiàn)
這篇文章主要介紹了Docker之開(kāi)啟遠(yuǎn)程訪問(wèn)的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Docker啟動(dòng)容器報(bào)錯(cuò):Ports are not available的解決方案
這篇文章主要介紹了Docker啟動(dòng)容器報(bào)錯(cuò):Ports are not available的解決方案,Docker 將容器程序的端口號(hào)映射到宿主機(jī)的端口號(hào),是一個(gè) NAT 過(guò)程,這個(gè)過(guò)程可能會(huì)因?yàn)榕c Windows NAT 服務(wù)沖突而失效,文中有詳細(xì)的解決方案,需要的朋友可以參考下2024-03-03docker中mysql開(kāi)啟日志的實(shí)現(xiàn)步驟
本文主要介紹了docker中mysql開(kāi)啟日志的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07詳解如何將java項(xiàng)目打包成docker鏡像并且可運(yùn)行
java?項(xiàng)目打包成?Docker?可運(yùn)行的鏡像,其目的是便于運(yùn)用docker容器來(lái)管理項(xiàng)目,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2024-11-11docker部署Prometheus+Cadvisor+Grafana實(shí)現(xiàn)服務(wù)器監(jiān)控
這篇文章主要為大家介紹了docker部署Prometheus+Cadvisor+Grafana實(shí)現(xiàn)服務(wù)器監(jiān)控,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11