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