Docker學(xué)習(xí)筆記(一)
Docker概述
Docker為什么出現(xiàn)?
傳統(tǒng)模式中一款產(chǎn)品從開發(fā)到上線需要兩套環(huán)境!部署環(huán)境時(shí)涉及到應(yīng)用環(huán)境,應(yīng)用配置!等諸多事情。這就導(dǎo)致開發(fā)及運(yùn)維之間存在很多問題:
1、在自己的電腦上可以運(yùn)行!在別人電腦上無法運(yùn)行!
2、版本更新,導(dǎo)致服務(wù)不可用!
這種模式對(duì)于運(yùn)維來說,考驗(yàn)就十分大!環(huán)境配置是十分麻煩,每一個(gè)機(jī)器都要部署環(huán)境(集群Redis、Es、Hadoop)!費(fèi)時(shí)費(fèi)力。
因此某些大佬就想:發(fā)布一個(gè)項(xiàng)目(jar+(Redis MySql jdk ES)),項(xiàng)目能不能都帶上環(huán)境安裝打包?
同時(shí)傳統(tǒng)開發(fā)部署還遇到一個(gè)問題:服務(wù)器配置一個(gè)應(yīng)用的環(huán)境 Redis MySQL jdk ES Hadoop,配置超麻煩,不能跨平臺(tái)。一般都是Windows上開發(fā),最后發(fā)布到Linux!
傳統(tǒng)模式:開發(fā)完成打成jar包,由運(yùn)維來做部署!
我們期望現(xiàn)在:開發(fā)打包部署上線,一套流程做完!
容器技術(shù)類比于手機(jī)應(yīng)用商店一樣:
java --- apk --- 發(fā)布(應(yīng)用商店) --- 張三使用apk --- 安裝即可用!
java --- jar(環(huán)境) --- 打包項(xiàng)目帶上環(huán)境(鏡像) --- (Docker倉庫:商店) --- 下載我們發(fā)布的鏡像 --- 直接運(yùn)行即可!
Docker給以上的問題,提出了解決方案!

就像Docker圖標(biāo)一樣,Docker的思想就來自于集裝箱!
傳統(tǒng):JRE --- 部署多個(gè)應(yīng)用(端口沖突) --- 原來都是交叉的!
docker容器:
Docker核心思想采用隔離的方式,將每個(gè)應(yīng)用打包裝箱!每個(gè)箱子都是相互隔離的。這樣就好比將水果和生化武器放在一起都不會(huì)出現(xiàn)變異,同時(shí)Douker通過隔離機(jī)制,可以將服務(wù)器利用到極致!
本質(zhì):所有的技術(shù)都是因?yàn)槌霈F(xiàn)了一些問題,我們需要去解決,才去學(xué)習(xí)!
Docker的歷史
2010年,幾個(gè)搞IT的年輕人,就在美國成立了一家公司dotCloud,做一些pass的云計(jì)算服務(wù)!Linux有關(guān)的容器技術(shù)!
他們將自己的技術(shù)(容器化技術(shù))命名 就是Docker!
Docker剛剛誕生的時(shí)候,沒有引起行業(yè)的注意!dotCloud,就活不下去!
于是公司決定將docker技術(shù)開源!
2013年,Docker開源!
越來越多的人發(fā)現(xiàn)了docker的優(yōu)點(diǎn)!因此docker技術(shù)火了,docker官方趁熱打鐵每個(gè)月都會(huì)更新一個(gè)版本!
于2014年4月9日,Docker1.0發(fā)布!
那Docker為什么這么火?答案:十分的輕巧!
在容器技術(shù)出來之前,我們都是使用虛擬機(jī)技術(shù)!
虛擬機(jī):在window中裝一個(gè)VMware,通過這個(gè)軟件我們可以虛擬出來一臺(tái)或多臺(tái)電腦!笨重!
虛擬機(jī)也是屬于虛擬化技術(shù),Docker容器技術(shù),也是一種虛擬化技術(shù)!
vm:?Linux?centos原生鏡像(一個(gè)電腦?。└綦x,需要開啟多個(gè)虛擬機(jī)?幾個(gè)G?幾分鐘
Docker:?隔離,鏡像(最核心的環(huán)境4M?+?jdk?+?mysql)十分的小巧,運(yùn)行鏡像就可以了!小巧!幾個(gè)M?KB?秒級(jí)啟動(dòng)到現(xiàn)在,所有開發(fā)人員都必須要會(huì)Docker!
聊聊Docker
Docker是基于Go語言開發(fā)的!開源項(xiàng)目!
官網(wǎng):https://www.docker.com/

文檔:https://docs.docker.com/ Docker的文檔是超級(jí)詳細(xì)的!
倉庫:https://hub.docker.com/
Docker能干嘛?
之前的虛擬機(jī)技術(shù)

虛擬機(jī)技術(shù)缺點(diǎn):
1、資源占用十分多
2、冗余步驟多
3、啟動(dòng)很慢
容器化技術(shù)
容器化技術(shù)不是模擬的一個(gè)完整的操作系統(tǒng)

比較Docker和虛擬機(jī)技術(shù)的不同:
??傳統(tǒng)虛擬機(jī),虛擬出一條硬件,運(yùn)行一個(gè)完整的操作系統(tǒng),然后在這個(gè)系統(tǒng)上安裝和運(yùn)行軟件
??容器內(nèi)的應(yīng)用直接運(yùn)行在宿主機(jī)的內(nèi)容,容器是沒有自己的內(nèi)核的,也沒有虛擬我們的硬件,所以就輕便了
??每個(gè)容器間是相互隔離的,每個(gè)容器內(nèi)都有一個(gè)屬于自己的文件系統(tǒng),互不影響。
DevOps(開發(fā),運(yùn)維)
更快速的交付和部署
傳統(tǒng):一堆幫助文檔,安裝程序
Docker:打包鏡像發(fā)布測試,一鍵運(yùn)行
更便捷的升級(jí)和擴(kuò)縮容
使用了Docker之后,我們部署應(yīng)用就和搭積木一樣!
項(xiàng)目打包為一個(gè)鏡像,擴(kuò)展 服務(wù)器A!服務(wù)器B
更簡單的系統(tǒng)運(yùn)維
在容器化之后,我們的開發(fā),測試環(huán)境都是高度的一致的。
更高效的計(jì)算資源利用:
Docker是內(nèi)核級(jí)別的虛擬化,可以在一個(gè)物理機(jī)上可以運(yùn)行很多的容器實(shí)例!服務(wù)器的性能可以壓榨到極致。
Docker安裝
Docker的基本組成

鏡像(image):
docker鏡像就好比是一個(gè)模板,可以通過這個(gè)模板來創(chuàng)建容器服務(wù),tomcat鏡像 ===> run ===> tomcat01容器(提供服務(wù)器),通過這個(gè)鏡像可以創(chuàng)建多個(gè)容器(最終服務(wù)運(yùn)行或者項(xiàng)目運(yùn)行就是在容器中的)。
容器(container):
Docker利用容器技術(shù),獨(dú)立運(yùn)行一個(gè)或者一組應(yīng)用,通過鏡像來創(chuàng)建的。
啟動(dòng),停止,刪除,基本命令!
目前可以把這個(gè)容器理解為就是一個(gè)簡易的Linux系統(tǒng)
倉庫(repository):
倉庫就是存放鏡像的地方!
倉庫分為公有倉庫和私有倉庫!
Docker Hub(默認(rèn)國外的)
阿里云...都有容器服務(wù)器(配置鏡像加速?。?/p>
安裝Docker
環(huán)境準(zhǔn)備
1、需要會(huì)一點(diǎn)點(diǎn)的Linux的基礎(chǔ)
2、CentOS 7
3、使用Xshell連接遠(yuǎn)程服務(wù)器進(jìn)行操作!
環(huán)境查看
#?系統(tǒng)內(nèi)核是?4.18.0
[root@VM-4-4-centos?~]#?uname?-r
4.18.0-193.28.1.el8_2.x86_64#?系統(tǒng)版本
[root@VM-4-4-centos?~]#?cat?/etc/os-release?
NAME="CentOS?Linux"
VERSION="8?(Core)"
ID="centos"
ID_LIKE="rhel?fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS?Linux?8?(Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="8"安裝
幫助文檔:
#?1、卸載舊的版本
?sudo?yum?remove?docker?\
??????????????????docker-client?\
??????????????????docker-client-latest?\
??????????????????docker-common?\
??????????????????docker-latest?\
??????????????????docker-latest-logrotate?\
??????????????????docker-logrotate?\
??????????????????docker-engine
#?2、需要的安裝包
sudo?yum?install?-y?yum-utils
#3、設(shè)置鏡像的倉庫
sudo?yum-config-manager?\
????--add-repo?\
????https://download.docker.com/linux/centos/docker-ce.repo
#建議使用國內(nèi)源
sudo?yum-config-manager?\
????--add-repo?\
????http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新軟件包索引???
sudo?yum?makecache?fast
#4、安裝docker引擎(最新版)?docker-ce?社區(qū)?ee企業(yè)版
sudo?yum?install?docker-ce?docker-ce-cli?containerd.io
#?也可以安裝指定版本
sudo?yum?install?docker-ce-?docker-ce-cli-?containerd.io
#5、啟動(dòng)docker
sudo?systemctl?start?docker
#6、查看docker是否安裝成功
sudo?docker?version

#?7、helloworld
docker?run?hello-world
#8、查看一下下載的這個(gè)hello-world?鏡像
[root@VM-4-8-centos?~]#?docker?images
REPOSITORY????TAG???????IMAGE?ID???????CREATED????????SIZE
hello-world???latest????feb5d9fea6a5???6?months?ago???13.3kB了解:卸載docker
#1、卸載依賴
sudo?yum?remove?docker-ce?docker-ce-cli?containerd.io
#2、刪除資源
sudo?rm?-rf?/var/lib/docker
#?/var/lib/docker?docker默認(rèn)資源路徑
sudo?rm?-rf?/var/lib/containerd阿里云鏡像加速
1、登錄找到阿里云/騰訊云,找到容器服務(wù)
2、找到鏡像加速地址
3、配置使用
回顧HelloWorld流程


Docker底層
Docker是怎么工作的?
Docker是一個(gè)Client-Serve結(jié)構(gòu)的系統(tǒng),Docker的守護(hù)進(jìn)程運(yùn)行在主機(jī)上。通過Socket從客戶端訪問!
DockerServer接收到Docker-Client的指令,就會(huì)執(zhí)行這個(gè)命令!

Docker為什么比VM快?
1、Docker有著比虛擬機(jī)更少的抽象層
2、docker利用的是宿主機(jī)的內(nèi)核,vm需要是虛擬機(jī)操作系統(tǒng)

所以說,新建一個(gè)容器的時(shí)候,docker不需要虛擬機(jī)一樣重新加載一個(gè)操作系統(tǒng)內(nèi)核,避免引導(dǎo)。虛擬機(jī)是加載Guest OS,分鐘級(jí)別的,而docker是利用宿主機(jī)的操作系統(tǒng),省略了這個(gè)復(fù)雜的過程,秒級(jí)!
Docker的常用命令
幫助命令
docker?version????#?顯示docker的版本信息
docker?info???????#?顯示docker的系統(tǒng)信息,包括鏡像和容器的數(shù)量
docker?命令?--help?#萬能命令幫助文檔:https://docs.docker.com/reference/
鏡像命令
docker images?查看所有本地的主機(jī)上的鏡像
[root@VM-4-8-centos?~]#?docker?images
REPOSITORY????TAG???????IMAGE?ID???????CREATED????????SIZE
hello-world???latest????feb5d9fea6a5???6?months?ago???13.3kB
#?解釋
REPOSITORY???鏡像的倉庫源
TAG??????????鏡像的標(biāo)簽
IMAGE?ID?????鏡像的id
CREATED??????鏡像創(chuàng)建的時(shí)間
SIZE?????????鏡像的大小
#?可選項(xiàng)
??-a,?--all?????????????#?列出所有的鏡像
??-q,?--quiet???????????#?只顯示鏡像的id
docker search?搜索鏡像
[root@VM-4-8-centos?~]#?docker?search?mysql
NAME?????????????????????????????DESCRIPTION?????????????????????????????????????STARS?????OFFICIAL???AUTOMATED
mysql????????????????????????????MySQL?is?a?widely?used,?open-source?relation…???12301?????[OK]???????
mariadb??????????????????????????MariaDB?Server?is?a?high?performing?open?sou…???4733??????[OK]???????
mysql/mysql-server???????????????Optimized?MySQL?Server?Docker?images.?Create…???913??????????????????[OK]
percona??????????????????????????Percona?Server?is?a?fork?of?the?MySQL?relati…???572???????[OK]???????
#?可選項(xiàng),通過搜藏來過濾
--filter=STARS=3000??#搜索出來的鏡像就是STARS大于3000的
[root@VM-4-8-centos?~]#?docker?search?mysql?--filter=STARS=3000
NAME??????DESCRIPTION?????????????????????????????????????STARS?????OFFICIAL???AUTOMATED
mysql?????MySQL?is?a?widely?used,?open-source?relation…???12301?????[OK]???????
mariadb???MariaDB?Server?is?a?high?performing?open?sou…???4733??????[OK]
[root@VM-4-8-centos?~]#?docker?search?mysql?--filter=STARS=5000
NAME??????DESCRIPTION?????????????????????????????????????STARS?????OFFICIAL???AUTOMATED
mysql?????MySQL?is?a?widely?used,?open-source?relation…???12301?????[OK]docker pull?下載鏡像
#?下載鏡像?docker?pull?鏡像名[:tag]
[root@VM-4-8-centos?~]#?docker?pull?mysql
Using?default?tag:?latest?#?如果不寫tag,默認(rèn)就是latest
latest:?Pulling?from?library/mysql
a4b007099961:?Pull?complete?#?分層下載,docker?image的核心??聯(lián)合文件系統(tǒng)
e2b610d88fd9:?Pull?complete?
38567843b438:?Pull?complete?
5fc423bf9558:?Pull?complete?
aa8241dfe828:?Pull?complete?
cc662311610e:?Pull?complete?
9832d1192cf2:?Pull?complete?
f2aa1710465f:?Pull?complete?
4a2d5722b8f3:?Pull?complete?
3a246e8d7cac:?Pull?complete?
2f834692d7cc:?Pull?complete?
a37409568022:?Pull?complete?
Digest:?sha256:b2ae0f527005d99bacdf3a220958ed171e1eb0676377174f0323e0a10912408a?#?簽名
Status:?Downloaded?newer?image?for?mysql:latest
docker.io/library/mysql:latest?#?真實(shí)地址
#?等價(jià)于它
docker?pull?mysql
docker?pull?docker.io/library/mysql:latest
[root@VM-4-8-centos?~]#?docker?pull?mysql:5.7
5.7:?Pulling?from?library/mysql
a4b007099961:?Already?exists?
e2b610d88fd9:?Already?exists?
38567843b438:?Already?exists?
5fc423bf9558:?Already?exists?
aa8241dfe828:?Already?exists?
cc662311610e:?Already?exists?
9832d1192cf2:?Already?exists?
3f242378e320:?Pull?complete?
cc65503c0186:?Pull?complete?
ce8944d50437:?Pull?complete?
597d59a9a424:?Pull?complete?
Digest:?sha256:c8f68301981a7224cc9c063fc7a97b6ef13cfc4142b4871d1a35c95777ce96f4
Status:?Downloaded?newer?image?for?mysql:5.7
docker.io/library/mysql:5.7

docker rmi?刪除鏡像
[root@VM-4-8-centos?~]#?docker?rmi?鏡像id?#刪除指定的鏡像
[root@VM-4-8-centos?~]#?docker?rmi?鏡像id?鏡像id?鏡像id?#刪除多個(gè)鏡像
[root@VM-4-8-centos?~]#?docker?rmi?-f?$(docker?images?-aq)?#刪除全部的鏡像
[root@VM-4-8-centos?~]#?docker?rmi?05311a87aeb4
Untagged:?mysql:5.7
Untagged:?mysql@sha256:c8f68301981a7224cc9c063fc7a97b6ef13cfc4142b4871d1a35c95777ce96f4
Deleted:?sha256:05311a87aeb4d7f98b2726c39d4d29d6a174d20953a6d1ceaa236bfa177f5fb6
Deleted:?sha256:ce09b17e1372dcbe2ca378a7ab3bf3d2d1ac2cf92497c4e016c1ec122c0dc1e9
Deleted:?sha256:dcc1a49541911203634c3a4d238ec78d979b5b482deb83ea37e418080861c285
Deleted:?sha256:3d1d08f848c1b010e1f2323d9adb7d8589110dbe6fc1caf7a84eade16b31042d
Deleted:?sha256:9d6a457e1119cd4bf14a7c60c53848e86639672ee17eb129515477e5b9f616f9
[root@VM-4-8-centos?~]#?docker?rmi?-f?$(docker?images?-aq)
Untagged:?mysql:latest
Untagged:?mysql@sha256:b2ae0f527005d99bacdf3a220958ed171e1eb0676377174f0323e0a10912408a
Deleted:?sha256:562c9bc24a0883226e994aabbd09fcb5621a4eadb510df749bc6dac40fa991e3
Deleted:?sha256:922f7808fa33c2fbe942423d3feb9a6d7a5f94bec7b9ea0991ab6c2e2f847572
Deleted:?sha256:83fffdb572261c1f2e9f19471bd1b508943c501ed370984b5cfd358bc755d2e9
Deleted:?sha256:c79d74d1ae5d7c7238dc9e17c11c386fb3831bbeccda13d35692c487e830cb30
Deleted:?sha256:890829e2a3ea27a0c97567b48b3ee2d35ec518c831445b52b3a9b9350a407b19
Deleted:?sha256:dc2d56ca2bf65894556989944f5bb43be8c85b846a65f939f14db0a13faed901
Deleted:?sha256:2bfa38aa4a121c3003184e53f583ae27b3644308bf97ddbc307f06a0d6d29c9a
Deleted:?sha256:fa808b36c749c5f8b97a9fa391bba83e4d71a81089a671079f5e9964d41ef21c
Deleted:?sha256:25deea191944f6927352c94aac19b93fe4f06032f6287f7a8e671d182bb939ac
Deleted:?sha256:118be3e0025663818f84526b895923c708e254ea16704cfb6f72e3595769160f
Deleted:?sha256:093b2e6fd07228b0ce4dcffdcd1bd5cd5cff4758e7a92f9ef00002c38593a550
Deleted:?sha256:f43f525e5700c371aca941af470de540c77e9f668d5357a31b9d01e9d3d1e825
Deleted:?sha256:4e7bd47e4668c217f6eeba3b515d55d485e069ec297e0d1f5b0d643eb0478c72
Untagged:?hello-world:latest
Untagged:?hello-world@sha256:bfea6278a0a267fad2634554f4f0c6f31981eea41c553fdf5a83e95a41d40c38
Deleted:?sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412容器命令
說明:有了鏡像才可以創(chuàng)建容器,linux,下載一個(gè)centos鏡像來測試學(xué)習(xí)
docker?pull?centos新建容器并啟動(dòng)
docker?run?[可選參數(shù)]?image
#參數(shù)說明
--name="NAME"?容器名字?tomcat01?tomcat02?用來區(qū)分容器
-d????????????后臺(tái)方式運(yùn)行
-it???????????使用加護(hù)方式運(yùn)行,進(jìn)入容器查看內(nèi)容
-p????????????指定容器的端口,?-p?8080:8080
????-p?ip:主機(jī)端口:容器端口
????-p?主機(jī)端口:容器端口(常用)
????-p?容器端口
????容器端口
-P????????????隨機(jī)指定端口
#?測試,啟動(dòng)并進(jìn)入容器
[root@VM-4-8-centos?~]#?docker?run?-it?centos?/bin/bash
[root@b39226b092a3?/]#?ls?#查看容器內(nèi)的centos,基礎(chǔ)版本,很多命令不完善
bin??dev??etc??home??lib??lib64??lost+found??media??mnt??opt??proc??root??run??sbin??srv??sys??tmp??usr??var
#?從容器退回到主機(jī)
[root@b39226b092a3?/]#?exit
exit
列出所有的運(yùn)行的容器
#?docker?ps?命令
??????#?列出當(dāng)前正在運(yùn)行的容器
-a????#?列出當(dāng)前正在運(yùn)行的容器?+?帶出歷史運(yùn)行過的容器
-n=???#?顯示最近創(chuàng)建的容器
-q????#?只顯示容器的編號(hào)
[root@VM-4-8-centos?~]#?docker?ps
CONTAINER?ID???IMAGE?????COMMAND???CREATED???STATUS????PORTS?????NAMES
[root@VM-4-8-centos?~]#?docker?ps?-a
CONTAINER?ID???IMAGE??????????COMMAND???????CREATED????????STATUS????????????????????PORTS?????NAMES
b39226b092a3???centos?????????"/bin/bash"???24?hours?ago???Exited?(0)?24?hours?ago?????????????wonderful_wilbur
8c935f729a36???feb5d9fea6a5???"/hello"??????2?days?ago?????Exited?(0)?2?days?ago???????????????loving_knuth退出容器
exit?????#?直接容器停止并退出
Ctrl?+?P?+?Q??#?容器不停止退出刪除容器
docker?rm?容器id??????????????????#刪除指定的容器,不能刪除正在運(yùn)行的容器,如果要?jiǎng)h除rm?-f
docker?rm?-f?$(docker?ps?-aq)?????#刪除所有的容器
docker?ps?-a?-q?|?xargs?docker?rm?#刪除所有的容器啟動(dòng)和停止容器的操作
docker?start?容器id??????#?啟動(dòng)容器
docker?restart?容器id????#?重啟容器
docker?stop?容器id???????#?停止當(dāng)前正在運(yùn)行的容器
docker?kill?容器id???????#?強(qiáng)制停止當(dāng)前容器常用其它命令
后臺(tái)啟動(dòng)容器
#?命令?docker?run?-d?鏡像名
[root@VM-4-8-centos?~]#?docker?run?-d?centos
#?問題?docker?ps,?發(fā)現(xiàn)centos停止了
#?常見的坑:docker容器使用后臺(tái)運(yùn)行,就必須要有一個(gè)前臺(tái)進(jìn)程,docker發(fā)現(xiàn)沒有應(yīng)用,就會(huì)自動(dòng)停止
#?nginx,容器啟動(dòng)后,發(fā)現(xiàn)自己沒有提供服務(wù),就會(huì)立刻停止,就是沒有程序了查看日志
docker?logs?-f?-t?--tail?容器,沒有日志
#?自己編寫一段shell腳本
[root@VM-4-8-centos?~]#?docker?run?-d?centos?/bin/sh?-c?"while?true;do?echo?lsustc;sleep?1;done"
[root@VM-4-8-centos?~]#?docker?ps
CONTAINER?ID???IMAGE??
07ec06da09d3???centos??
#?顯示日志
-tf?????????????#?顯示日志
--tail?number???#?要顯示的日志條數(shù)
[root@VM-4-8-centos?~]#?docker?logs?-f?-t?--tail?10?07ec06da09d3查看容器中的進(jìn)程信息
#?命令?docker?top?容器id
[root@VM-4-8-centos?~]#?docker?top?07ec06da09d3
UID?????????????????PID?????????????????PPID????????????????C???????????????????STIME???????????????TTY????
root????????????????26758???????????????26738???????????????0???????????????????09:30??????????????????????
root????????????????28124???????????????26758???????????????0???????????????????09:37??????????????????????查看鏡像源數(shù)據(jù)
#?命令
docker?inspect?容器id
#?測試
[root@VM-4-8-centos?~]#?docker?inspect?07ec06da09d3
[
????{
????????"Id":?"07ec06da09d3f81a56a17c94f80d254eb12cdff2f387581486d9406c53847548",
????????"Created":?"2022-03-26T01:30:44.994481793Z",
????????"Path":?"/bin/sh",
????????"Args":?[
????????????"-c",
????????????"while?true;do?echo?lsustc;sleep?1;done"
????????],
????????"State":?{
????????????"Status":?"running",
????????????"Running":?true,
????????????"Paused":?false,
????????????"Restarting":?false,
????????????"OOMKilled":?false,
????????????"Dead":?false,
????????????"Pid":?26758,
????????????"ExitCode":?0,
????????????"Error":?"",
????????????"StartedAt":?"2022-03-26T01:30:45.315873953Z",
????????????"FinishedAt":?"0001-01-01T00:00:00Z"
????????},
????????"Image":?"sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
????????"ResolvConfPath":?"/var/lib/docker/containers/07ec06da09d3f81a56a17c94f80d254eb12cdff2f387581486d9406c53847548/resolv.conf",
????????"HostnamePath":?"/var/lib/docker/containers/07ec06da09d3f81a56a17c94f80d254eb12cdff2f387581486d9406c53847548/hostname",
????????"HostsPath":?"/var/lib/docker/containers/07ec06da09d3f81a56a17c94f80d254eb12cdff2f387581486d9406c53847548/hosts",
????????"LogPath":?"/var/lib/docker/containers/07ec06da09d3f81a56a17c94f80d254eb12cdff2f387581486d9406c53847548/07ec06da09d3f81a56a17c94f80d254eb12cdff2f387581486d9406c53847548-json.log",
????????"Name":?"/focused_jemison",
????????"RestartCount":?0,
????????"Driver":?"overlay2",
????????"Platform":?"linux",
????????"MountLabel":?"",
????????"ProcessLabel":?"",
????????"AppArmorProfile":?"",
????????"ExecIDs":?null,
????????"HostConfig":?{
????????????"Binds":?null,
????????????"ContainerIDFile":?"",
????????????"LogConfig":?{
????????????????"Type":?"json-file",
????????????????"Config":?{}
????????????},
????????????"NetworkMode":?"default",
????????????"PortBindings":?{},
????????????"RestartPolicy":?{
????????????????"Name":?"no",
????????????????"MaximumRetryCount":?0
????????????},
????????????"AutoRemove":?false,
????????????"VolumeDriver":?"",
????????????"VolumesFrom":?null,
????????????"CapAdd":?null,
????????????"CapDrop":?null,
????????????"CgroupnsMode":?"host",
????????????"Dns":?[],
????????????"DnsOptions":?[],
????????????"DnsSearch":?[],
????????????"ExtraHosts":?null,
????????????"GroupAdd":?null,
????????????"IpcMode":?"private",
????????????"Cgroup":?"",
????????????"Links":?null,
????????????"OomScoreAdj":?0,
????????????"PidMode":?"",
????????????"Privileged":?false,
????????????"PublishAllPorts":?false,
????????????"ReadonlyRootfs":?false,
????????????"SecurityOpt":?null,
????????????"UTSMode":?"",
????????????"UsernsMode":?"",
????????????"ShmSize":?67108864,
????????????"Runtime":?"runc",
????????????"ConsoleSize":?[
????????????????0,
????????????????0
????????????],
????????????"Isolation":?"",
????????????"CpuShares":?0,
????????????"Memory":?0,
????????????"NanoCpus":?0,
????????????"CgroupParent":?"",
????????????"BlkioWeight":?0,
????????????"BlkioWeightDevice":?[],
????????????"BlkioDeviceReadBps":?null,
????????????"BlkioDeviceWriteBps":?null,
????????????"BlkioDeviceReadIOps":?null,
????????????"BlkioDeviceWriteIOps":?null,
????????????"CpuPeriod":?0,
????????????"CpuQuota":?0,
????????????"CpuRealtimePeriod":?0,
????????????"CpuRealtimeRuntime":?0,
????????????"CpusetCpus":?"",
????????????"CpusetMems":?"",
????????????"Devices":?[],
????????????"DeviceCgroupRules":?null,
????????????"DeviceRequests":?null,
????????????"KernelMemory":?0,
????????????"KernelMemoryTCP":?0,
????????????"MemoryReservation":?0,
????????????"MemorySwap":?0,
????????????"MemorySwappiness":?null,
????????????"OomKillDisable":?false,
????????????"PidsLimit":?null,
????????????"Ulimits":?null,
????????????"CpuCount":?0,
????????????"CpuPercent":?0,
????????????"IOMaximumIOps":?0,
????????????"IOMaximumBandwidth":?0,
????????????"MaskedPaths":?[
????????????????"/proc/asound",
????????????????"/proc/acpi",
????????????????"/proc/kcore",
????????????????"/proc/keys",
????????????????"/proc/latency_stats",
????????????????"/proc/timer_list",
????????????????"/proc/timer_stats",
????????????????"/proc/sched_debug",
????????????????"/proc/scsi",
????????????????"/sys/firmware"
????????????],
????????????"ReadonlyPaths":?[
????????????????"/proc/bus",
????????????????"/proc/fs",
????????????????"/proc/irq",
????????????????"/proc/sys",
????????????????"/proc/sysrq-trigger"
????????????]
????????},
????????"GraphDriver":?{
????????????"Data":?{
????????????????"LowerDir":?"/var/lib/docker/overlay2/12dc0a9a1edfa81d751b0fb1e46c7b8a57496ce28c567a9be0c4cee0826e3aeb-init/diff:/var/lib/docker/overlay2/26bb2777dc2cacdd0a7615b08305b202213c79e19d42abe2da96931159d87fe4/diff",
????????????????"MergedDir":?"/var/lib/docker/overlay2/12dc0a9a1edfa81d751b0fb1e46c7b8a57496ce28c567a9be0c4cee0826e3aeb/merged",
????????????????"UpperDir":?"/var/lib/docker/overlay2/12dc0a9a1edfa81d751b0fb1e46c7b8a57496ce28c567a9be0c4cee0826e3aeb/diff",
????????????????"WorkDir":?"/var/lib/docker/overlay2/12dc0a9a1edfa81d751b0fb1e46c7b8a57496ce28c567a9be0c4cee0826e3aeb/work"
????????????},
????????????"Name":?"overlay2"
????????},
????????"Mounts":?[],
????????"Config":?{
????????????"Hostname":?"07ec06da09d3",
????????????"Domainname":?"",
????????????"User":?"",
????????????"AttachStdin":?false,
????????????"AttachStdout":?false,
????????????"AttachStderr":?false,
????????????"Tty":?false,
????????????"OpenStdin":?false,
????????????"StdinOnce":?false,
????????????"Env":?[
????????????????"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
????????????],
????????????"Cmd":?[
????????????????"/bin/sh",
????????????????"-c",
????????????????"while?true;do?echo?lsustc;sleep?1;done"
????????????],
????????????"Image":?"centos",
????????????"Volumes":?null,
????????????"WorkingDir":?"",
????????????"Entrypoint":?null,
????????????"OnBuild":?null,
????????????"Labels":?{
????????????????"org.label-schema.build-date":?"20210915",
????????????????"org.label-schema.license":?"GPLv2",
????????????????"org.label-schema.name":?"CentOS?Base?Image",
????????????????"org.label-schema.schema-version":?"1.0",
????????????????"org.label-schema.vendor":?"CentOS"
????????????}
????????},
????????"NetworkSettings":?{
????????????"Bridge":?"",
????????????"SandboxID":?"a1f18e6232584a32ac8d2cb6db5d8a1f18ad821fce71b2cd34fa0a020a09a557",
????????????"HairpinMode":?false,
????????????"LinkLocalIPv6Address":?"",
????????????"LinkLocalIPv6PrefixLen":?0,
????????????"Ports":?{},
????????????"SandboxKey":?"/var/run/docker/netns/a1f18e623258",
????????????"SecondaryIPAddresses":?null,
????????????"SecondaryIPv6Addresses":?null,
????????????"EndpointID":?"d1e2479a32bd539de95b8df790472101d8b845c18a369d04d02464945d53d7be",
????????????"Gateway":?"172.17.0.1",
????????????"GlobalIPv6Address":?"",
????????????"GlobalIPv6PrefixLen":?0,
????????????"IPAddress":?"172.17.0.2",
????????????"IPPrefixLen":?16,
????????????"IPv6Gateway":?"",
????????????"MacAddress":?"02:42:ac:11:00:02",
????????????"Networks":?{
????????????????"bridge":?{
????????????????????"IPAMConfig":?null,
????????????????????"Links":?null,
????????????????????"Aliases":?null,
????????????????????"NetworkID":?"5243f4bc7a0fb78b2e34152bac5fed360d3899b9bcbd7949c62824046097e1fb",
????????????????????"EndpointID":?"d1e2479a32bd539de95b8df790472101d8b845c18a369d04d02464945d53d7be",
????????????????????"Gateway":?"172.17.0.1",
????????????????????"IPAddress":?"172.17.0.2",
????????????????????"IPPrefixLen":?16,
????????????????????"IPv6Gateway":?"",
????????????????????"GlobalIPv6Address":?"",
????????????????????"GlobalIPv6PrefixLen":?0,
????????????????????"MacAddress":?"02:42:ac:11:00:02",
????????????????????"DriverOpts":?null
????????????????}
????????????}
????????}
????}
]進(jìn)入當(dāng)前正在運(yùn)行的容器
#?我們通常容器都是使用后臺(tái)方式運(yùn)行的,需要進(jìn)入容器,修改一些配置
#?命令
docker?exec?-it?容器id?bashShell
#測試
[root@VM-4-8-centos?~]#?docker?ps
CONTAINER?ID???IMAGE?????COMMAND??????????????????CREATED????????STATUS????????PORTS?????NAMES
07ec06da09d3???centos????"/bin/sh?-c?'while?t…"???33?hours?ago???Up?33?hours?????????????focused_jemison
[root@VM-4-8-centos?~]#?docker?exec?-it?07ec06da09d3?/bin/bash
[root@07ec06da09d3?/]#?ls
bin??dev??etc??home??lib??lib64??lost+found??media??mnt??opt??proc??root??run??sbin??srv??sys??tmp??usr??var
[root@07ec06da09d3?/]#?ps?-ef
UID????????PID??PPID??C?STIME?TTY??????????TIME?CMD
root?????????1?????0??0?Mar26??????????00:00:35?/bin/sh?-c?while?true;do?echo?lsustc;sleep?1;done
root?????20554?????0??0?10:20?pts/0????00:00:00?/bin/bash
root?????20577?????1??0?10:20??????????00:00:00?/usr/bin/coreutils?--coreutils-prog-shebang=sleep?/usr/bin/sleep?1
root?????20578?20554??0?10:20?pts/0????00:00:00?ps?-ef
#?方式二
docker?attach?容器id
#?測試
[root@VM-4-8-centos?~]#?docker?attach?07ec06da09d3
正在執(zhí)行當(dāng)前的代碼
#?docker?exec??????#?進(jìn)入容器后開啟一個(gè)新的中斷,可以在里面操作(常用)
#?docker?attach????#?進(jìn)入容器正在執(zhí)行的終端,不會(huì)啟動(dòng)新的進(jìn)程從容器內(nèi)拷貝文件到主機(jī)上
docker?cp?容器id:容器內(nèi)路徑??目的的主機(jī)路徑
#查看當(dāng)前主機(jī)目錄
[root@VM-4-8-centos?~]#?cd?/home
[root@VM-4-8-centos?home]#?ls
lighthouse
#?進(jìn)入docker容器內(nèi)部
[root@VM-4-8-centos?home]#?docker?attach?a7db90e07628
[root@a7db90e07628?/]#?cd?/home/
[root@a7db90e07628?home]#?ls
#在容器內(nèi)新建一個(gè)文件
[root@a7db90e07628?home]#?touch?test.txt
[root@a7db90e07628?home]#?ls
test.txt
[root@a7db90e07628?home]#?exit
exit
[root@VM-4-8-centos?home]#?docker?ps?-a
CONTAINER?ID???IMAGE?????COMMAND???????CREATED?????????
a7db90e07628???centos????"/bin/bash"???2?minutes?ago???
#?將這文件拷貝出來到主機(jī)上
[root@VM-4-8-centos?home]#?docker?cp?a7db90e07628:/home/test.txt?/home
[root@VM-4-8-centos?home]#?ls
lighthouse?test.txt
#?拷貝是一個(gè)手動(dòng)過程,未來我們使用?-v?卷的技術(shù),可以實(shí)現(xiàn)學(xué)習(xí)方式:將所有命令全部敲一遍,自己記錄筆記!
小結(jié)

??attach??????Attach?local?standard?input,?output,?and?error?streams?to?a?running?container?#?當(dāng)前shell下???attach連接指定運(yùn)行鏡像
??build???????Build?an?image?from?a?Dockerfile??????????????????#?通過dockfile定制鏡像
??commit??????Create?a?new?image?from?a?container's?changes?????#?提交當(dāng)前容器為新的鏡像
??cp??????????Copy?files/folders?between?a?container?and?the?local?filesystem??#?從容器中拷貝指定文件或者目???錄到宿主機(jī)中
??create??????Create?a?new?container????????????????????????????#創(chuàng)建一個(gè)新的容器,同run,但不啟動(dòng)容器
??diff????????Inspect?changes?to?files?or?directories?on?a?container's?filesystem?#?查看docker容器變化
??events??????Get?real?time?events?from?the?server??????????????#?從docker服務(wù)獲取容器實(shí)時(shí)事件
??exec????????Run?a?command?in?a?running?container??????????????#?在已存在的容器上運(yùn)行命令
??export??????Export?a?container's?filesystem?as?a?tar?archive??#?導(dǎo)出容器的內(nèi)容流作為一個(gè)tar?歸檔文件[對(duì)應(yīng)???import]
??history?????Show?the?history?of?an?image??????????????????????#?展示一個(gè)鏡像形成歷史????
??images??????List?images???????????????????????????????????????#?列出系統(tǒng)當(dāng)前鏡像
??import??????Import?the?contents?from?a?tarball?to?create?a?filesystem?image??#?從tar包中的內(nèi)容創(chuàng)建一個(gè)新???的文件系統(tǒng)映像[對(duì)應(yīng)export]
??info????????Display?system-wide?information???????????????????#?顯示系統(tǒng)相關(guān)信息
??inspect?????Return?low-level?information?on?Docker?objects????#?查看容器詳細(xì)信息
??kill????????Kill?one?or?more?running?containers???????????????#?kill?指定docker?容器
??load????????Load?an?image?from?a?tar?archive?or?STDIN?????????#?從一個(gè)tar包中加載一個(gè)鏡像[對(duì)應(yīng)save]
??login???????Log?in?to?a?Docker?registry???????????????????????#?注冊(cè)或者登錄一個(gè)docker源服務(wù)器
??logout??????Log?out?from?a?Docker?registry????????????????????#?從當(dāng)前docker?registry退出
??logs????????Fetch?the?logs?of?a?container?????????????????????#?輸出當(dāng)前容器日志信息
??pause???????Pause?all?processes?within?one?or?more?containers?#?暫停容器
??port????????List?port?mappings?or?a?specific?mapping?for?the?container?#?查看映射端口對(duì)應(yīng)的容器內(nèi)部源端口
??ps??????????List?containers???????????????????????????????????#?列出容器列表
??pull????????Pull?an?image?or?a?repository?from?a?registry?????#?從docker鏡像源服務(wù)器拉取指定鏡像或者庫鏡像
??push????????Push?an?image?or?a?repository?to?a?registry???????#?推送指定鏡像或者庫鏡像至docker源服務(wù)器
??rename??????Rename?a?container????????????????????????????????#?重命名容器
??restart?????Restart?one?or?more?containers????????????????????#?重啟容器
??rm??????????Remove?one?or?more?containers?????????????????????#?移除一個(gè)或多個(gè)容器
??rmi?????????Remove?one?or?more?images?????????????????????????#?移除一個(gè)或多個(gè)鏡像[無容器使用該鏡像才可刪???除,否則刪除相關(guān)容器才可繼續(xù)或?-f?強(qiáng)制刪除]
??run?????????Run?a?command?in?a?new?container??????????????????#?創(chuàng)建一個(gè)新的容器并運(yùn)行一個(gè)命令
??save????????Save?one?or?more?images?to?a?tar?archive?(streamed?to?STDOUT?by?default)?#?保存一個(gè)鏡像為一???個(gè)tar包[對(duì)應(yīng)load]
??search??????Search?the?Docker?Hub?for?images??????????????????#?在docker?hub中搜索鏡像
??start???????Start?one?or?more?stopped?containers??????????????#?啟動(dòng)容器
??stats???????Display?a?live?stream?of?container(s)?resource?usage?statistics?#?
??stop????????Stop?one?or?more?running?containers???????????????#?停止容器
??tag?????????Create?a?tag?TARGET_IMAGE?that?refers?to?SOURCE_IMAGE?#?給源中的鏡像打標(biāo)簽
??top?????????Display?the?running?processes?of?a?container??????#?查看容器中運(yùn)行的進(jìn)程信息
??unpause?????Unpause?all?processes?within?one?or?more?containers?#?取消暫停容器
??update??????Update?configuration?of?one?or?more?containers????#?更新一個(gè)或多個(gè)容器配置
??version?????Show?the?Docker?version?information???????????????#?查看docker版本號(hào)
??wait????????Block?until?one?or?more?containers?stop,?then?print?their?exit?codes?#?截取容器停止時(shí)的退出狀???態(tài)值docker的命令時(shí)十分多的,上面我們學(xué)習(xí)的那些都是常有的容器和鏡像的命令,之后我們還會(huì)學(xué)習(xí)很多命令!
接下來就是一堆的練習(xí)
作業(yè)練習(xí)
Docker安裝Nginx
#?1、搜索鏡像?search?建議去docker官網(wǎng)搜索,可以查看幫助文檔
#?2、下載鏡像?pull
#?3、運(yùn)行測試
[root@VM-4-8-centos?home]#?docker?images
REPOSITORY???TAG???????IMAGE?ID???????CREATED????????SIZE
nginx????????latest????f2f70adc5d89???9?days?ago?????142MB
centos???????latest????5d0da3dc9764???6?months?ago???231MB
#?-d?后臺(tái)運(yùn)行
#?--name?給容器命名
#?-p?宿主機(jī)端口,容器內(nèi)部端口
[root@VM-4-8-centos?home]#?docker?run?-d?--name?nginx01?-p?3344:80?nginx
1e18828819ab57709368f91e7825ba8ba26ebf3af45c2ef65dc958308a1f52e9
[root@VM-4-8-centos?home]#?docker?ps
CONTAINER?ID???IMAGE?????COMMAND??????????????????CREATED?????????STATUS?????????PORTS???????????????????????????????????NAMES
1e18828819ab???nginx?????"/docker-entrypoint.…"???7?seconds?ago???Up?5?seconds???0.0.0.0:3344->80/tcp,?:::3344->80/tcp???nginx01
[root@VM-4-8-centos?home]#?curl?localhost:3344
#?進(jìn)入容器
[root@VM-4-8-centos?home]#?docker?exec?-it?nginx01?/bin/bash
root@1e18828819ab:/#?whereis?nginx
nginx:?/usr/sbin/nginx?/usr/lib/nginx?/etc/nginx?/usr/share/nginx
root@1e18828819ab:/#?cd?/etc/nginx/
root@1e18828819ab:/etc/nginx#?ls
conf.d????fastcgi_params????mime.types??modules??nginx.conf??scgi_params??uwsgi_params
root@1e18828819ab:/etc/nginx#?
端口暴露的概念

