Docker概述:
Docker為什么會(huì)出現(xiàn)?
一款產(chǎn)品:開(kāi)發(fā)...測(cè)試..上線,三套環(huán)境!
例如:發(fā)布一個(gè)項(xiàng)目(jar+redis mysql jdk等),項(xiàng)目能不能帶上環(huán)境安裝一起打包
傳統(tǒng):java -- apk(應(yīng)用)-- 發(fā)布(應(yīng)用商店)--張三使用apk -- 下載安裝即可使用
現(xiàn)在:java -- jar(環(huán)境)-- 打包項(xiàng)目帶上環(huán)境(鏡像)-- (docker倉(cāng)庫(kù):商店) --下載我們發(fā)布的鏡像 -- 直接運(yùn)行即可!
Docker的核心思想:隔離
Docker的歷史:
2010年,幾個(gè)搞it的年輕人,就在美國(guó)成立了一家公司叫dotCloud
做一些pass的云計(jì)算服務(wù),LXC有關(guān)的容器服務(wù)!
他們將自己的技術(shù)(容器化技術(shù))命名為docker!
Docker剛剛誕生的時(shí)候,沒(méi)有引起行業(yè)的注意!dotCloud,就活不下去了!
想到了“開(kāi)源”
開(kāi)放源代碼!
2013年,docker開(kāi)源!
Docker越來(lái)越多的人發(fā)現(xiàn)了docker的優(yōu)點(diǎn)!火了,docker每個(gè)月都會(huì)有新的版本誕生!
2014年4月9日,docker1.0發(fā)布!
Docker至今短短10年為什么這么火?
十分輕巧
在容器技術(shù)出來(lái)之前,我們都是使用虛擬機(jī)(非常占內(nèi)存及本地資源),vm、kvm等!
Docker如何安裝:
Docker的基本組成:
鏡像(image):就好比是個(gè)一個(gè)模板,可以通過(guò)這個(gè)模板來(lái)啟動(dòng)容器創(chuàng)建容器服務(wù),tomcat鏡像 --- run --- tomcat服務(wù),可以經(jīng)過(guò)這個(gè)鏡像可以啟動(dòng)無(wú)數(shù)個(gè)(最終服務(wù)運(yùn)行或項(xiàng)目運(yùn)行就是在這個(gè)容器中的)
容器(container):docker利用容器技術(shù),獨(dú)立運(yùn)行一個(gè)或一組應(yīng)用,通過(guò)鏡像來(lái)創(chuàng)建的;容器的基本命令,啟動(dòng)、停止、刪除!目前就可以把這個(gè)容器理解為就是一個(gè)簡(jiǎn)易的Linux系統(tǒng)。
倉(cāng)庫(kù)(repository):倉(cāng)庫(kù)就是存放鏡像的地方,倉(cāng)庫(kù)分為公有倉(cāng)庫(kù)和私有倉(cāng)庫(kù)。公有倉(cāng)庫(kù)有docker Hub(默認(rèn)是國(guó)外的)、阿里云、騰訊云...都有容器服務(wù)器(我們需要配置鏡像加速)
安裝docker:
環(huán)境準(zhǔn)備:系統(tǒng)centos7
幫助文檔:
- 卸載舊的 版本
yum remove docker \ ??????????????????docker-client \ ??????????????????docker-client-latest \ ??????????????????docker-common \ ??????????????????docker-latest \ ??????????????????docker-latest-logrotate \ ??????????????????docker-logrotate \ ??????????????????docker-engine |
- 安裝依賴關(guān)系:
yum install -y?yum-utils |
- 設(shè)置鏡像倉(cāng)庫(kù):
yum-config-manager \ ????--add-repo?\ https://download.docker.com/linux/centos/docker-ce.repo(國(guó)外的,很慢) yum-config-manager \ ????--add-repo?\ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(推薦使用阿里云的) |
- 更新yum軟件包索引
yum makecache fast |
- 安裝docker
yum -y install docker-ce docker-ce-cli containerd.io 注:docker-ce 社區(qū)、docker-ee 企業(yè)版 |
- 啟動(dòng)docker
systemctl start docker |
- 使用docker version查看是否啟動(dòng)成功
8、測(cè)試hello-world
docker run hello-world
9查看一下hello-world鏡像在不在?
docker images |
10如何卸載docker
yum remove docker-ce docker-ce-cli containerd.io rm -rf?/var/lib/docker?#docker默認(rèn)的工作路徑 rm -rf?/var/lib/containerd |
阿里云加速:
1、登錄阿里云平臺(tái)找到“產(chǎn)品與服務(wù)”里的“容器鏡像服務(wù)”
?
2. 點(diǎn)擊“鏡像工具”-“鏡像加速器”
回顧hello-world創(chuàng)建流程
docker底層原理:
Docker是怎么工作的?
Docker是一個(gè)client-server結(jié)構(gòu)的系統(tǒng),docker的守護(hù)進(jìn)程運(yùn)行在主機(jī)上,通過(guò)socket從客戶端訪問(wèn)!
Docker-server接受到docker-client的指令就會(huì)執(zhí)行這個(gè)命令!
Docker為什么比vm虛擬機(jī)快?
Docker利用的是宿主機(jī)的內(nèi)核,vm需要Guest OS
所以說(shuō)新建一個(gè)容器的時(shí)候,docker不需要像虛擬機(jī)一樣重新加載一個(gè)操作系統(tǒng)內(nèi)核,避免一些引導(dǎo)性的操作。
Docker常用命令:
幫助命令:
Docker version #顯示docker的版本信息 Docker info #顯示docker的系統(tǒng)信息,docker的鏡像和容器信息 Docker 命令 --help #萬(wàn)能命令 |
?
鏡像命令:
Docker images 查看所有本地的主機(jī)上的鏡像
[root@localhost containerd]# docker images REPOSITORY ???TAG ??????IMAGE ID ??????CREATED ???????SIZE hello-world ??latest ???d1165f221234 ??3 months ago ??13.3kB #解釋: REPOSITORY ?#鏡像的倉(cāng)庫(kù)源 TAG ?#鏡像的標(biāo)簽 IMAGE ID ?#鏡像的ID CREATED ?#鏡像的創(chuàng)建時(shí)間 SIZE ?#鏡像的大小 #可選項(xiàng) [root@localhost containerd]# docker images --help Usage: ?docker images [OPTIONS] [REPOSITORY[:TAG]] List images Options: ??-a, --all ??????#顯示所有鏡像 ??-q, --quiet ????#只顯示鏡像的ID |
Docker search 鏡像名稱 ?#搜索鏡像
[root@localhost containerd]# docker search mysql NAME ?????????????????????????????DESCRIPTION ????????????????????????????????????STARS ????OFFICIAL ??AUTOMATED mysql ????????????????????????????MySQL is a widely used, open-source relation… ??11082 ????[OK] ?????? mariadb ??????????????????????????MariaDB Server is a high performing open sou… ??4199 ?????[OK] ?????? #可選項(xiàng),通過(guò)搜索來(lái)過(guò)濾 --filter=STARS=4000 #就是搜索出來(lái)的鏡像STARS大于4000的。 |
Docker pull 鏡像名稱[:tag] ?#下載鏡像
最新版本下載: [root@localhost containerd]# docker pull mysql Using default tag: latest??#不跟版本,下載默認(rèn)最新的版本 latest: Pulling from library/mysql b4d181a07f80: Pull complete ?#分層下載,image的核心,聯(lián)合文件系統(tǒng) a462b60610f5: Pull complete 578fafb77ab8: Pull complete 524046006037: Pull complete d0cbe54c8855: Pull complete aa18e05cc46d: Pull complete 32ca814c833f: Pull complete 9ecc8abdb7f5: Pull complete ad042b682e0f: Pull complete 71d327c6bb78: Pull complete 165d1d10a3fa: Pull complete 2f40c47d0626: Pull complete Digest: sha256:52b8406e4c32b8cf0557f1b74517e14c5393aff5cf0384eff62d9e81f4985d4b?#簽名信息,防偽標(biāo)識(shí) Status: Downloaded newer image for mysql:latest docker.io/library/mysql:latest??#真實(shí)地址 指定版本下載: [root@localhost containerd]# docker pull mysql:5.7 5.7: Pulling from library/mysql b4d181a07f80: Already exists a462b60610f5: Already exists 578fafb77ab8: Already exists 524046006037: Already exists d0cbe54c8855: Already exists aa18e05cc46d: Already exists 32ca814c833f: Already exists 52645b4af634: Pull complete bca6a5b14385: Pull complete 309f36297c75: Pull complete 7d75cacde0f8: Pull complete Digest: sha256:1a2f9cd257e75cc80e9118b303d1648366bc2049101449bf2c8d82b022ea86b7 Status: Downloaded newer image for mysql:5.7 docker.io/library/mysql:5.7 |
Docker rmi 刪除鏡像
docker rmi -f 09361feeb475??#根據(jù)鏡像ID,刪除單個(gè)鏡像 docker rmi -f $(docker images -aq)??#刪除全部鏡像 |
容器命令:
說(shuō)明:我們有了鏡像才可以創(chuàng)建容器,下載一個(gè)centos鏡像來(lái)測(cè)試學(xué)習(xí)!
docker pull centos |
創(chuàng)建容器并啟動(dòng)
docker run [可選參數(shù)] image 參數(shù)說(shuō)明: --name=“name” #容器的名字 tomcat01 tomcat02 用來(lái)區(qū)分容器 -d #后臺(tái)方式運(yùn)行 -it #使用交互方式運(yùn)行,進(jìn)入容器查看內(nèi)容 /bin/bash #給一個(gè)控制臺(tái) -p #指定容器的端口 -p8080:8080 -p ip:主機(jī)端口:容器端口 ????-p主機(jī)端口:容器端口 (常用) ????-p容器端口 -P ?#隨機(jī)映射一個(gè)?49000~49900?的端口到內(nèi)部容器開(kāi)放的網(wǎng)絡(luò)端口 -v 宿主機(jī)目錄和容器內(nèi)目錄映射 測(cè)試 啟動(dòng)并進(jìn)入容器: [root@localhost containerd]# docker run -it centos /bin/bash [root@c2e9f2af5df6 /]# ls??#查看容器內(nèi)的centos ,基礎(chǔ)版本,很多命令是不完善的 bin ?etc ??lib ??lost+found ?mnt ?proc ?run ??srv ?tmp ?var dev ?home ?lib64 ?media ??????opt ?root ?sbin ?sys ?usr [root@c2e9f2af5df6 /]# exit ??#退出命令 exit [root@localhost /]# ls bin ?boot ?dev ?etc ?home ?lib ?lib64 ?media ?mnt ?opt ?proc ?root ?run ?sbin ?srv ?sys ?tmp ?usr ?var |
列出容器:
dokcer ps #查看正在運(yùn)行中的容器列表 -a #查看所有容器 -n=? #顯示最近創(chuàng)建的容器 -q #只顯示容器的ID [root@localhost /]# docker ps CONTAINER ID ??IMAGE ????COMMAND ??CREATED ??STATUS ???PORTS ????NAMES [root@localhost /]# docker ps -a CONTAINER ID ??IMAGE ?????????COMMAND ??????CREATED ????????STATUS ????????????????????PORTS ????NAMES c2e9f2af5df6 ??centos ????????"/bin/bash" ??7 minutes ago ??Exited (0) 4 minutes ago ????????????infallible_wu 04e4b20d023d ??d1165f221234 ??"/hello" ?????2 hours ago ????Exited (0) 2 hours ago ??????????????flamboyant_hellman |
退出容器
Exit #退出后容器停止 Ctrl+p+q #退出容器不停止 |
刪除容器
docker rm 容器id ?#刪除指定容器,不能刪除正在運(yùn)行中的容器 docker rm -f $(docker ps -aq) ?#刪除所有的容器 docker ps -a -q | xargs docker rm ?#刪除所有的容器 |
啟動(dòng)和停止容器的操作
docker start 容器id ?#啟動(dòng)容器 docker stop容器id ??#停止當(dāng)前運(yùn)行容器 docker restart 容器id ?#重啟容器 docker kill 容器id ??#強(qiáng)制停止當(dāng)前容器 |
常用其他命令:
查看日志:
docker logs -f -t --tail 10 容器 -tf ?#顯示日志 --tail number ?#要顯示日志條數(shù) [root@MiWiFi-R4A-srv ~]# docker ps CONTAINER ID ??IMAGE ????COMMAND ??????CREATED ???????STATUS ????????PORTS ????NAMES c2e9f2af5df6 ??centos ???"/bin/bash" ??10 hours ago ??Up 6 seconds ????????????infallible_wu [root@MiWiFi-R4A-srv ~]#?docker logs -f -t --tail 10 c2e9f2af5df6 2021-07-03T16:58:57.371780294Z [root@c2e9f2af5df6 /]# ls 2021-07-03T16:58:57.378009686Z bin ?etc ??lib ??lost+found ?mnt ?proc ?run ??srv ?tmp ?var 2021-07-03T16:58:57.378060051Z dev ?home ?lib64 ?media ??????opt ?root ?sbin ?sys ?usr 2021-07-03T17:00:45.937116561Z [root@c2e9f2af5df6 /]# exit ? 2021-07-03T17:00:45.937156697Z exit |
查看容器進(jìn)程信息
[root@MiWiFi-R4A-srv ~]# docker top c2e9f2af5df6 UID ????????????????PID ????????????????PPID ???????????????C ??????????????????STIME ??????????????TTY ????????????????TIME ???????????????CMD root ???????????????9559 ???????????????9538 ???????????????0 ??????????????????11:00 ??????????????pts/0 ??????????????00:00:00 ???????????/bin/bash [root@MiWiFi-R4A-srv ~]#?docker inspect --help Usage: ?docker inspect [OPTIONS] NAME|ID [NAME|ID...] Return low-level information on Docker objects Options: ??-f, --format string ??Format the output using the given Go template ??-s, --size ???????????Display total file sizes if the type is container ??????--type string ????Return JSON for specified type [root@MiWiFi-R4A-srv ~]# docker inspect c2e9f2af5df6 |
進(jìn)入當(dāng)前正在運(yùn)行的容器
#我們通常容器都是使用后臺(tái)方式運(yùn)行,退出容器后需要再次進(jìn)入容器修改一些配置
#命令 方式一:docker exec -it 容器id bashshell ?#進(jìn)入容器后開(kāi)啟一個(gè)新的終端,可以在里面操作(常用) [root@MiWiFi-R4A-srv ~]# docker ps CONTAINER ID ??IMAGE ????COMMAND ??????CREATED ???????STATUS ?????????PORTS ????NAMES c2e9f2af5df6 ??centos ???"/bin/bash" ??10 hours ago ??Up 14 minutes ????????????infallible_wu [root@MiWiFi-R4A-srv ~]# docker exec -it c2e9f2af5df6 /bin/bash [root@c2e9f2af5df6 /]# ls bin ?etc ??lib ??lost+found ?mnt ?proc ?run ??srv ?tmp ?var dev ?home ?lib64 ?media ??????opt ?root ?sbin ?sys ?usr 方式二: docker attach 容器id ?#進(jìn)入容器正在執(zhí)行的終端,不會(huì)啟動(dòng)新的進(jìn)程 [root@MiWiFi-R4A-srv ~]# docker attach c2e9f2af5df6 [root@c2e9f2af5df6 /]# ls bin ?etc ??lib ??lost+found ?mnt ?proc ?run ??srv ?tmp ?var dev ?home ?lib64 ?media ??????opt ?root ?sbin ?sys ?usr [root@c2e9f2af5df6 /]# |
從容器內(nèi)拷貝文件到主機(jī)上
docker cp c2e9f2af5df6:容器文件路徑 本地路徑 #進(jìn)入docker容器內(nèi)部 [root@MiWiFi-R4A-srv ~]#?docker attach c2e9f2af5df6 [root@c2e9f2af5df6 /]# ls bin ?etc ??lib ??lost+found ?mnt ?proc ?run ??srv ?tianda.txt ?usr dev ?home ?lib64 ?media ??????opt ?root ?sbin ?sys ?tmp var [root@c2e9f2af5df6 /]#?pwd / #cp容器內(nèi)部文件到本地 [root@MiWiFi-R4A-srv ~]# docker cp c2e9f2af5df6:/tianda.txt ./ [root@MiWiFi-R4A-srv ~]#?ls ?? ??????????????initial-setup-ks.cfg ?tianda.txt??模板 ?圖片 ?下載 ?桌面 anaconda-ks.cfg ?localho 注:cp是一個(gè)手動(dòng)過(guò)程,后邊我們使用-v選項(xiàng),以卷的技術(shù)實(shí)現(xiàn)自動(dòng) |
從主機(jī)復(fù)制到容器:
docker cp host_path containerID:container_path
#docker cp 本地文件 容器id:容器路徑
小結(jié):
1. 如何搜索鏡像和獲取鏡像? ????dockersearch 關(guān)鍵字和 docker pull 鏡像名 2、創(chuàng)建一個(gè)保持運(yùn)行的容器命令? ????docker run -t -i centos /bin/bash 3、容器的啟動(dòng)、停止及重啟命令? ????docker start 、restart 、stop 容器id 4、怎么查看正在運(yùn)行的容器和所有容器? ????docker ps && docker ps -a 5、怎么退出容器:兩種方法分別? ????exit:bash終止,容器進(jìn)入停止?fàn)顟B(tài) ????ctrl+p && Ctrl+q:退出容器,但容器保持運(yùn)行狀態(tài) 6、查看容器運(yùn)行信息(占用的cpu、內(nèi)存、網(wǎng)絡(luò)等) ????docker stats 容器id 7、怎么查看在容器里做過(guò)的操作記錄? ????docker diff 容器id 8、怎么連接到運(yùn)行的容器? ????docker attach 容器id ????docker exec -ti 容器id /bin/bash 9、查看容器或鏡像的內(nèi)部信息? ????docker inspect 容器id或鏡像id 10、如何刪除容器? ????docker rm 容器id (前提需要關(guān)閉運(yùn)行的容器),不關(guān)閉加-f強(qiáng)行移除 11、如何查看所有鏡像? ?????docker images 12、如何刪除鏡像? ?????在沒(méi)有容器使用此鏡像的前提下使用: ?????docker rmi 鏡像id 13、從容器內(nèi)拷貝文件到主機(jī)上 docker cp c2e9f2af5df6:容器文件路徑 本地路徑 |
作業(yè)練習(xí)
作業(yè)一:
Docker安裝nginx 1、搜索鏡像 search 鏡像名稱 #建議大家去docker搜索,可以看幫助文檔 2、拉去鏡像 pull 鏡像名稱 3、docker images 查看鏡像 4、docker run -d --name nginx01 -p 3344:80 nginx 5、運(yùn)行測(cè)試 :elinks http://ip:3344?--dump 6、進(jìn)入容器查看配置文件 docker exec -it nginx01 /bin/bash whereis nginx cd /etc/nginx ls |
端口暴露的概念:
思考問(wèn)題:我們每次改動(dòng)nginx配置文件,都需要進(jìn)入容器內(nèi)部?十分的麻煩,我要是可以在外部提供一個(gè)映射路徑,達(dá)到在容器外修改文件名,容器內(nèi)部就可以自動(dòng)修改?(使用-v數(shù)據(jù)卷技術(shù)實(shí)現(xiàn))
作業(yè)二:
使用docker安裝一個(gè)tomcat!
#官方的使用 Docker run -it --rm tomcat:9.0 #我們之前的啟動(dòng)都是后臺(tái)啟動(dòng),停止了容器之后,容器還是可以查到的,Docker run -it --rm 一般是用來(lái)測(cè)試的,用完即刪。 #下載啟動(dòng) docker pull tomcat #啟動(dòng)tomcat docker run -d -p 3355:8080 --name tomcat01 tomcat 安裝好tomcat后,默認(rèn)沒(méi)有webapps,阿里云鏡像的原因,默認(rèn)是最小的鏡像,所有不必要的都剔除了,保證最小的可用的環(huán)境。 將/usr/local/tomcat/下webapps.dist目錄里的文件cp到webapps下即可。 思考問(wèn)題:我們以后要部署項(xiàng)目,如果每次都要進(jìn)入容器是不是十分麻煩?咱們要是可以在容器外部提供一個(gè)映射路徑,webapps,我們?cè)谕獠糠胖庙?xiàng)目,就自動(dòng)同步到內(nèi)部就好了!文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-704393.html |
?docker的總結(jié)就到這里!如果可以的話給個(gè)贊吧!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-704393.html
到了這里,關(guān)于Linux部署docker(最詳細(xì)docker,一看就會(huì))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!