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

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

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

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

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

鏡像(image):
docker鏡像就好比是一個模板,可以通過這個模板來創(chuàng)建容器服務(wù),tomcat鏡像 ===> run ===> tomcat01容器(提供服務(wù)器),通過這個鏡像可以創(chuàng)建多個容器(最終服務(wù)運行或者項目運行就是在容器中的)。
容器(container):
Docker利用容器技術(shù),獨立運行一個或者一組應(yīng)用,通過鏡像來創(chuàng)建的。
啟動,停止,刪除,基本命令!
目前可以把這個容器理解為就是一個簡易的Linux系統(tǒng)
倉庫(repository):
倉庫就是存放鏡像的地方!
倉庫分為公有倉庫和私有倉庫!
Docker Hub(默認國外的)
阿里云...都有容器服務(wù)器(配置鏡像加速!)
安裝Docker
環(huán)境準備
1、需要會一點點的Linux的基礎(chǔ)
2、CentOS 7
3、使用Xshell連接遠程服務(wù)器進行操作!
環(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、啟動docker
sudo?systemctl?start?docker
#6、查看docker是否安裝成功
sudo?docker?version

#?7、helloworld
docker?run?hello-world
#8、查看一下下載的這個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默認資源路徑
sudo?rm?-rf?/var/lib/containerd阿里云鏡像加速
1、登錄找到阿里云/騰訊云,找到容器服務(wù)
2、找到鏡像加速地址
3、配置使用
回顧HelloWorld流程


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

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

所以說,新建一個容器的時候,docker不需要虛擬機一樣重新加載一個操作系統(tǒng)內(nèi)核,避免引導。虛擬機是加載Guest OS,分鐘級別的,而docker是利用宿主機的操作系統(tǒng),省略了這個復雜的過程,秒級!
Docker的常用命令
幫助命令
docker?version????#?顯示docker的版本信息
docker?info???????#?顯示docker的系統(tǒng)信息,包括鏡像和容器的數(shù)量
docker?命令?--help?#萬能命令幫助文檔:https://docs.docker.com/reference/
鏡像命令
docker images?查看所有本地的主機上的鏡像
[root@VM-4-8-centos?~]#?docker?images
REPOSITORY????TAG???????IMAGE?ID???????CREATED????????SIZE
hello-world???latest????feb5d9fea6a5???6?months?ago???13.3kB
#?解釋
REPOSITORY???鏡像的倉庫源
TAG??????????鏡像的標簽
IMAGE?ID?????鏡像的id
CREATED??????鏡像創(chuàng)建的時間
SIZE?????????鏡像的大小
#?可選項
??-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]???????
#?可選項,通過搜藏來過濾
--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,默認就是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?#?真實地址
#?等價于它
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?#刪除多個鏡像
[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,下載一個centos鏡像來測試學習
docker?pull?centos新建容器并啟動
docker?run?[可選參數(shù)]?image
#參數(shù)說明
--name="NAME"?容器名字?tomcat01?tomcat02?用來區(qū)分容器
-d????????????后臺方式運行
-it???????????使用加護方式運行,進入容器查看內(nèi)容
-p????????????指定容器的端口,?-p?8080:8080
????-p?ip:主機端口:容器端口
????-p?主機端口:容器端口(常用)
????-p?容器端口
????容器端口
-P????????????隨機指定端口
#?測試,啟動并進入容器
[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
#?從容器退回到主機
[root@b39226b092a3?/]#?exit
exit
列出所有的運行的容器
#?docker?ps?命令
??????#?列出當前正在運行的容器
-a????#?列出當前正在運行的容器?+?帶出歷史運行過的容器
-n=???#?顯示最近創(chuàng)建的容器
-q????#?只顯示容器的編號
[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??????????????????#刪除指定的容器,不能刪除正在運行的容器,如果要刪除rm?-f
docker?rm?-f?$(docker?ps?-aq)?????#刪除所有的容器
docker?ps?-a?-q?|?xargs?docker?rm?#刪除所有的容器啟動和停止容器的操作
docker?start?容器id??????#?啟動容器
docker?restart?容器id????#?重啟容器
docker?stop?容器id???????#?停止當前正在運行的容器
docker?kill?容器id???????#?強制停止當前容器常用其它命令
后臺啟動容器
#?命令?docker?run?-d?鏡像名
[root@VM-4-8-centos?~]#?docker?run?-d?centos
#?問題?docker?ps,?發(fā)現(xiàn)centos停止了
#?常見的坑:docker容器使用后臺運行,就必須要有一個前臺進程,docker發(fā)現(xiàn)沒有應(yīng)用,就會自動停止
#?nginx,容器啟動后,發(fā)現(xiàn)自己沒有提供服務(wù),就會立刻停止,就是沒有程序了查看日志
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查看容器中的進程信息
#?命令?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
????????????????}
????????????}
????????}
????}
]進入當前正在運行的容器
#?我們通常容器都是使用后臺方式運行的,需要進入容器,修改一些配置
#?命令
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í)行當前的代碼
#?docker?exec??????#?進入容器后開啟一個新的中斷,可以在里面操作(常用)
#?docker?attach????#?進入容器正在執(zhí)行的終端,不會啟動新的進程從容器內(nèi)拷貝文件到主機上
docker?cp?容器id:容器內(nèi)路徑??目的的主機路徑
#查看當前主機目錄
[root@VM-4-8-centos?~]#?cd?/home
[root@VM-4-8-centos?home]#?ls
lighthouse
#?進入docker容器內(nèi)部
[root@VM-4-8-centos?home]#?docker?attach?a7db90e07628
[root@a7db90e07628?/]#?cd?/home/
[root@a7db90e07628?home]#?ls
#在容器內(nèi)新建一個文件
[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???
#?將這文件拷貝出來到主機上
[root@VM-4-8-centos?home]#?docker?cp?a7db90e07628:/home/test.txt?/home
[root@VM-4-8-centos?home]#?ls
lighthouse?test.txt
#?拷貝是一個手動過程,未來我們使用?-v?卷的技術(shù),可以實現(xiàn)學習方式:將所有命令全部敲一遍,自己記錄筆記!
小結(jié)

??attach??????Attach?local?standard?input,?output,?and?error?streams?to?a?running?container?#?當前shell下???attach連接指定運行鏡像
??build???????Build?an?image?from?a?Dockerfile??????????????????#?通過dockfile定制鏡像
??commit??????Create?a?new?image?from?a?container's?changes?????#?提交當前容器為新的鏡像
??cp??????????Copy?files/folders?between?a?container?and?the?local?filesystem??#?從容器中拷貝指定文件或者目???錄到宿主機中
??create??????Create?a?new?container????????????????????????????#創(chuàng)建一個新的容器,同run,但不啟動容器
??diff????????Inspect?changes?to?files?or?directories?on?a?container's?filesystem?#?查看docker容器變化
??events??????Get?real?time?events?from?the?server??????????????#?從docker服務(wù)獲取容器實時事件
??exec????????Run?a?command?in?a?running?container??????????????#?在已存在的容器上運行命令
??export??????Export?a?container's?filesystem?as?a?tar?archive??#?導出容器的內(nèi)容流作為一個tar?歸檔文件[對應(yīng)???import]
??history?????Show?the?history?of?an?image??????????????????????#?展示一個鏡像形成歷史????
??images??????List?images???????????????????????????????????????#?列出系統(tǒng)當前鏡像
??import??????Import?the?contents?from?a?tarball?to?create?a?filesystem?image??#?從tar包中的內(nèi)容創(chuàng)建一個新???的文件系統(tǒng)映像[對應(yīng)export]
??info????????Display?system-wide?information???????????????????#?顯示系統(tǒng)相關(guān)信息
??inspect?????Return?low-level?information?on?Docker?objects????#?查看容器詳細信息
??kill????????Kill?one?or?more?running?containers???????????????#?kill?指定docker?容器
??load????????Load?an?image?from?a?tar?archive?or?STDIN?????????#?從一個tar包中加載一個鏡像[對應(yīng)save]
??login???????Log?in?to?a?Docker?registry???????????????????????#?注冊或者登錄一個docker源服務(wù)器
??logout??????Log?out?from?a?Docker?registry????????????????????#?從當前docker?registry退出
??logs????????Fetch?the?logs?of?a?container?????????????????????#?輸出當前容器日志信息
??pause???????Pause?all?processes?within?one?or?more?containers?#?暫停容器
??port????????List?port?mappings?or?a?specific?mapping?for?the?container?#?查看映射端口對應(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?????????????????????#?移除一個或多個容器
??rmi?????????Remove?one?or?more?images?????????????????????????#?移除一個或多個鏡像[無容器使用該鏡像才可刪???除,否則刪除相關(guān)容器才可繼續(xù)或?-f?強制刪除]
??run?????????Run?a?command?in?a?new?container??????????????????#?創(chuàng)建一個新的容器并運行一個命令
??save????????Save?one?or?more?images?to?a?tar?archive?(streamed?to?STDOUT?by?default)?#?保存一個鏡像為一???個tar包[對應(yīng)load]
??search??????Search?the?Docker?Hub?for?images??????????????????#?在docker?hub中搜索鏡像
??start???????Start?one?or?more?stopped?containers??????????????#?啟動容器
??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?#?給源中的鏡像打標簽
??top?????????Display?the?running?processes?of?a?container??????#?查看容器中運行的進程信息
??unpause?????Unpause?all?processes?within?one?or?more?containers?#?取消暫停容器
??update??????Update?configuration?of?one?or?more?containers????#?更新一個或多個容器配置
??version?????Show?the?Docker?version?information???????????????#?查看docker版本號
??wait????????Block?until?one?or?more?containers?stop,?then?print?their?exit?codes?#?截取容器停止時的退出狀???態(tài)值docker的命令時十分多的,上面我們學習的那些都是常有的容器和鏡像的命令,之后我們還會學習很多命令!
接下來就是一堆的練習
作業(yè)練習
Docker安裝Nginx
#?1、搜索鏡像?search?建議去docker官網(wǎng)搜索,可以查看幫助文檔
#?2、下載鏡像?pull
#?3、運行測試
[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?后臺運行
#?--name?給容器命名
#?-p?宿主機端口,容器內(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
#?進入容器
[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#?
端口暴露的概念

