Docker 介绍、安装、基础搭建 --01
?1. Docker介紹
? ? ?1.1 是容器,可以部分完全封閉。封閉意味:一個(gè)物質(zhì)(放到容器),另一個(gè)物質(zhì)(放到容器)隔離
? ? ? ? ? ? 容器可以保護(hù)里面的物質(zhì)
? ? ?1.2 容器的前世
? ? ? ? ? FreeBASE jail(監(jiān)獄) ------> Linux vserver????最早的容器技術(shù),研發(fā)目地:運(yùn)行比較危險(xiǎn)的程序,進(jìn)行測(cè)試。
??????????問(wèn)題:還得自己創(chuàng)建管理銷毀容器。------>到后期移至到 Linux vserver。Linux vserver是什么,相比虛擬化區(qū)別
??????????是什么:那個(gè)年代虛擬化流程,半虛擬化,全虛擬化,硬件虛擬化
? ? ? ? ? ?chroot ? -----> 完整的根文件系統(tǒng)(FHS)標(biāo)準(zhǔn)的
? ? ? ? ? ?namespaces ---> UTS Mount IPC PID user network
? ? ? ? ? ?cgroup?? ? ? ---> 資源的分配和監(jiān)控
? ? ? ? ? 通過(guò)比較復(fù)雜的代碼開(kāi)發(fā)的過(guò)程,調(diào)用以上三項(xiàng)技術(shù)
? ? ? ? ? 實(shí)現(xiàn)容器的創(chuàng)建 ? ----> 管理 ?---->銷毀
? ? ? 1.3 傳統(tǒng)虛擬化技術(shù)和容器對(duì)比
docker 只是管理容器,包括LXC。??
虛擬化技術(shù):兩大類:? ? ??
一、軟件模擬:先模擬硬件在裝系統(tǒng):1、server 包括硬件、cpud等等??2、Host OS (速度機(jī)器內(nèi)核)操作平臺(tái)windows 3、 Hypervisor :比如你在vmware?4、Centos OS 你在vmware裝的Centos???????? 好處:隔離性強(qiáng),全都是獨(dú)立、資源限制。?
?缺點(diǎn):1、耗資源????2、如Centos 請(qǐng)求cpu資源的時(shí)候,先去找Hypervisor,進(jìn)行轉(zhuǎn)換。所有在Hypervisor有層層轉(zhuǎn)換,然后在到達(dá)Host OS系統(tǒng)的內(nèi)核,kernel。在到達(dá)硬件
二、虛擬化技術(shù)的演變:半虛擬化
? ????原理:不在Hypervisor 調(diào)用,實(shí)現(xiàn)應(yīng)用調(diào)用Host OS,實(shí)現(xiàn)資源分配
????半虛擬化技術(shù)的演變:硬件半虛擬化
????原理:Host OS、Hypervisor 打包成一個(gè)。就是一個(gè)服務(wù)器什么也沒(méi)裝,裝上這個(gè)軟件就是一個(gè)系統(tǒng)。Vmware EXSI、KVM、XTN。?KVM:裝Centos,在裝?KVM模塊,把Host OS 變成帶有KVM內(nèi)核,提供即使操作系統(tǒng)也是虛擬化。
???????使得發(fā)展非???#xff0c;但是還是分配、安裝等步驟。大規(guī)模移植、分發(fā)不實(shí)現(xiàn)、因?yàn)檫€得裝系統(tǒng),基于系統(tǒng)。使得用虛擬化計(jì)算分發(fā)浪費(fèi)資源,早期有用openstack。自從容器技術(shù)出來(lái)以后,不需要安裝系統(tǒng),原有系統(tǒng)上達(dá)到資源隔離。
? ????1.4 容器的前世今生?
?????????容器是基于操作系統(tǒng)內(nèi)核實(shí)現(xiàn)隔離,不需要操作系統(tǒng),輕量級(jí)的虛擬化技術(shù)
?????????早期容器實(shí)現(xiàn):Namespaces 、CCgroups、chroot?
? ? ??
? ? ? 實(shí)現(xiàn)隔離能力:原理:最下層為L(zhǎng)inux??→上層為容器引擎 →在上為容器,容器與容器怎么隔離,獨(dú)立管理的資源,最基礎(chǔ)的? ? ? ? 名字、IP地址等。?在Linux 上是由uis管理,多臺(tái)機(jī)器中管理網(wǎng)絡(luò),主機(jī)名等?。還有用戶、文件系統(tǒng)FS、進(jìn)程(IPL進(jìn)程之間? ? ? ? 的隔離)、根隔離(chroot ,比如把/etc設(shè)置為 ? ? ? 根???chroot /etc ,前提/etc/必須滿足FHS)、sdb掛在點(diǎn)隔離、其他按照? ? ? ? ? ? 需求等 。統(tǒng)稱:Namespaces? ?
? ? ?
? ? ?? ? ?
? ?? ?
? ? ?
?Linux在內(nèi)核中通過(guò)namespaces,原生支持6種資源隔離,并且直接通過(guò)系統(tǒng)調(diào)用對(duì)外進(jìn)行輸出。
? ?另外,僅靠namespaces,就可以完成容器的功能嗎?
? ?不對(duì),我們還需要靠CCgroups 控制每個(gè)namespace中的資源分配。
??CCgroups:怎么分配cpu、怎么調(diào)度、每臺(tái)都要有一個(gè)獨(dú)立的資源。獨(dú)立的IO、CPU、硬件機(jī)制。要不會(huì)導(dǎo)致整個(gè)宿主機(jī) ? 掛掉。早期調(diào)用需要用C開(kāi)發(fā)調(diào)用,很麻煩
??直到今生出生:LXC(LinuXContainer) (對(duì)于原有的常用功能進(jìn)行了封裝,不用開(kāi)發(fā)寫,直接調(diào)用代碼,方便我們做容 ? ? 器的生命周期) ,LXC 把文件打包到到本地,但是創(chuàng)建還是很慢的,在跑一遍軟件。一致性難、但是最終出現(xiàn)
? ?----- >Docker(dotcloud),加上了常用鏡像的技術(shù),centos、windows等等,里面封裝了lnmp等不需要跑一遍,啟動(dòng)就 ? ?可以。docker 用的=go 語(yǔ)言進(jìn)行二次開(kāi)發(fā),性能高,接近c(diǎn)語(yǔ)言的輕量級(jí)語(yǔ)言。
2、安裝:? ?
? ?yum源準(zhǔn)備
???curl ?http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
???wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
???curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
? ?2.1 安裝依賴包
???yum install -y yum-utils device-mapper-persistent-data lvm2
???yum list docker-ce.x86_64 --showduplicates | sort -r
? 2.2 安裝docker-ce??--基于阿里云鏡像安裝docker
? ?安裝默認(rèn)yum提供的版本:yum install -y docker-ce?????ce (社區(qū))??ee(企業(yè))
? ?安裝較舊版本(比如Docker 17.03.2) 時(shí)需要指定完整的rpm包的包名,并且加上--?setopt=obsoletes=0 參數(shù):
? ?2.3 啟動(dòng)Docker服務(wù)
systemctl daemon-reload systemctl restart docker? ?查看docker信息
[root@docker ~]# docker version 查看版本 Client: Docker Engine - Community ? ? CS 架構(gòu)? c: clinet 客戶端Version: 20.10.11 docker 版本API version: 1.41 API的版本Go version: go1.16.9 go語(yǔ)言開(kāi)發(fā)Git commit: dea9396 當(dāng)前版本提交的信息編號(hào)Built: Thu Nov 18 00:38:53 2021 建立時(shí)間OS/Arch: linux/amd64 架構(gòu)多少位Context: defaultExperimental: trueServer: Docker Engine - Community CS 架構(gòu)? s: server 引擎端Engine:Version: 20.10.11API version: 1.41 (minimum version 1.12)Go version: go1.16.9Git commit: 847da18Built: Thu Nov 18 00:37:17 2021OS/Arch: linux/amd64Experimental: falsecontainerd: containerd 核心組件已經(jīng)安裝Version: 1.4.12GitCommit: 7b11cfaabd73bb80907dd23182b9347b4245eb5drunc:Version: 1.0.2GitCommit: v1.0.2-0-g52b36a2docker-init:Version: 0.19.0GitCommit: de40ad0[root@docker ~]# docker info Client:Context: defaultDebug Mode: falsePlugins:app: Docker App (Docker Inc., v0.9.1-beta3)buildx: Build with BuildKit (Docker Inc., v0.6.3-docker)scan: Docker Scan (Docker Inc., v0.9.0)Server:Containers: 0Running: 0Paused: 0Stopped: 0Images: 0Server Version: 20.10.11Storage Driver: overlay2 # 存儲(chǔ)驅(qū)動(dòng)器,當(dāng)前流行版本(aufs、overlay、brtfs)overlay2官方 推薦,存儲(chǔ)速度也很 ,必須Linux內(nèi)核是3.18以上,系統(tǒng)必須開(kāi)d_type,要不用不了Backing Filesystem: xfsSupports d_type: trueNative Overlay Diff: trueuserxattr: falseLogging Driver: json-file # docker 日志存儲(chǔ)類型,json-file存在本地在Docker Root Dir:Cgroup Driver: cgroupfsCgroup Version: 1Plugins:Volume: localNetwork: bridge host ipvlan macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslogSwarm: inactive # 是容器編排的工具,沒(méi)有看k8s好Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc # 運(yùn)行容器的標(biāo)準(zhǔn),docker就是基于runc創(chuàng)建、銷毀等等,核心的部分Default Runtime: runcInit Binary: docker-initcontainerd version: 7b11cfaabd73bb80907dd23182b9347b4245eb5drunc version: v1.0.2-0-g52b36a2init version: de40ad0Security Options:seccompProfile: defaultKernel Version: 3.10.0-1160.el7.x86_64Operating System: CentOS Linux 7 (Core)OSType: linuxArchitecture: x86_64CPUs: 1Total Memory: 1.777GiBName: localhost.localdomainID: HE56:OHT2:4HVH:KRJJ:SUS2:RO2Y:PJNX:4RZF:JBNJ:XTI4:VBZQ:4YOCDocker Root Dir: /var/lib/docker docker 日志存儲(chǔ)位置,每次docker重啟之后,日志會(huì)清除, 干凈狀態(tài)運(yùn)行,可以更改,條件允許,使用單獨(dú)掛在的ssd或者其他的類型磁盤,防止日志大后,導(dǎo)致跟目錄占滿Debug Mode: falseRegistry: https://index.docker.io/v1/Labels:Experimental: falseInsecure Registries: 127.0.0.0/8Live Restore Enabled: false # 不打開(kāi),重啟docker會(huì)導(dǎo)致已經(jīng)在運(yùn)行的docker不會(huì)重新啟動(dòng)。打開(kāi)后,重啟docker經(jīng)在運(yùn)行的docker重新啟動(dòng),不用在手動(dòng)啟動(dòng)? ?2.4 配置鏡像加速,方便下載鏡像
? ?通過(guò)這個(gè)網(wǎng)站,生成一個(gè)鏡像私有的鏈接
? ?阿里云Docker-hub
? ?https://cr.console.aliyun.com/cn-hangzhou/mirrors
systemctl daemon-reload
systemctl restart docker
?? ? ??? ? ?
或者:
vim ? /etc/docker/daemon.json
?? ?{
?? ??? ? "registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]
?? ?}?? ?
3. Docker體系結(jié)構(gòu)
DOCKER_HOST 服務(wù)端??Docker_deamon 引擎 。 Containers 維護(hù)、管理客戶端。??Images 鏡像端,本地的鏡像存放位置,鏡像倉(cāng)庫(kù)
clinet 客戶端???建立、上傳、運(yùn)行
Registry 存放 Images,官方的dockerhub。提供:1、用戶驗(yàn)證功能,有一些鏡像是私有的,需要用戶名密碼、授權(quán)。
2、所有鏡像索引,快速查找鏡像。3、鏡像存儲(chǔ)
所以正常的流程為:從Registry 把Nginx???pull下載到DOCKER_HOST本地images,在y運(yùn)行成 Containers容器,提供給clinet nginx?
將來(lái)要實(shí)現(xiàn)秒級(jí)恢復(fù)鏡像,需要把鏡像pull 到本地。
主要運(yùn)維管理是鏡像、容器、倉(cāng)庫(kù)
1、容器的啟動(dòng)
2、pull 想要的鏡像
3、制作鏡像
4、容器管理命令、開(kāi)啟關(guān)閉監(jiān)控
5、要一致跟新本地倉(cāng)庫(kù),提前準(zhǔn)備好傳到私有倉(cāng)庫(kù),局域網(wǎng)調(diào)用
6、一但docker服務(wù)端down ,所有的都銷毀了,所以需要做高可用、自愈等等
7、架構(gòu),多臺(tái)主機(jī),云
4. Docker的鏡像基礎(chǔ)管理
?? 4.1 ?獲取鏡像
? ? 基礎(chǔ)鏡像拉取
? ?? [root@localhost ~]# docker search centos????搜索列出鏡像
?????[root@localhost ~]# docker pull centos:6.9???拉取鏡像
?????[root@localhost ~]# docker pull centos:7.5.1804
?????[root@localhost ~]# docker pull nginx? ? ? ? ? 不加版本號(hào)下載最新版
?????[root@localhost ~]# docker pull alpine:3.6?
? ?4.2 鏡像基本查看????
[root@docekr docker]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest ea335eea17ab 6 days ago 141MB centos 6.9 2199b8eb8390 2 years ago 195MB centos 7.5.1804 cf49811e3cdb 2 years ago 200MB alpine 3.6 43773d1dba76 2 years ago 4.03MB? ? 標(biāo)識(shí)鏡像唯一性的方法:
? ? 1、 REPOSITORY??倉(cāng)庫(kù)名字,一般 centos 這種是官方的
? ? 2、 TAG 鏡像版本
? ? 3、 REPOSITORY:TAG? ? 例如:centos:7.5.1804?
? ? 4、?IMAGE ID? ?鏡像唯一標(biāo)識(shí),(由sha256算法獲得數(shù)值,sha256算法默認(rèn)輸出64位的號(hào)碼,?這里未顯示完全,只截取12位),通過(guò) docker image ls --no-trunc ,查看全部64位
? ? 4.3 鏡像詳細(xì)信息查看
查看的必須是已經(jīng)下載到本地的鏡像 [root@docekr docker]# docker image ls |grep centos centos 6.9 2199b8eb8390 2 years ago 195MB centos 7.5.1804 cf49811e3cdb 2 years ago 200MB查看inspect的幫助 [root@localhost ~]# docker image inspect --\helpUsage:?? ?docker image inspect [OPTIONS] IMAGE [IMAGE...]Display detailed information on one or more imagesOptions:-f, --format string ? Format the output using the given Go template如何使用inspect [root@docekr docker]# docker image inspect centos:latest 或者 [root@docekr docker]# docker image inspect 2199b8eb8390 [{"Id": "sha256:2199b8eb8390197d175b1dd57ed79f53ed92ffa58e23826ada54113262237e56","RepoTags": ["centos:6.9"],"RepoDigests": ["centos@sha256:6fff0a9edc920968351eb357c5b84016000fec6956e6d745f695e5a34f18ecd2"],"Parent": "","Comment": "","Created": "2019-03-14T21:22:46.023197937Z","Container": "d3e1bd47b7bc5704e90893c57f35b4b446adc24229e93cec053e5dbddfbd56ce","ContainerConfig": {"Hostname": "d3e1bd47b7bc","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","#(nop) ","CMD [\"/bin/bash\"]"],"ArgsEscaped": true,"Image": "sha256:2949d2914bc8bcf330ffdea46d30b8798fe9be92c6bfdca14ffb8b3ed4a9afc9","Volumes": null,"WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": {"build-date": "20170406","license": "GPLv2","name": "CentOS Base Image","vendor": "CentOS"}},"DockerVersion": "18.06.1-ce","Author": "","Config": {"Hostname": "","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/bash"],"ArgsEscaped": true,"Image": "sha256:2949d2914bc8bcf330ffdea46d30b8798fe9be92c6bfdca14ffb8b3ed4a9afc9","Volumes": null,"WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": {"build-date": "20170406","license": "GPLv2","name": "CentOS Base Image","vendor": "CentOS"}},"Architecture": "amd64","Os": "linux","Size": 194752565,"VirtualSize": 194752565,"GraphDriver": {"Data": {"MergedDir": "/var/lib/docker/overlay2/91496c836a1f8000af7d7a870e341d0079ae5217c9e8a2c2a18dc6a1bcce86f0/merged","UpperDir": "/var/lib/docker/overlay2/91496c836a1f8000af7d7a870e341d0079ae5217c9e8a2c2a18dc6a1bcce86f0/diff","WorkDir": "/var/lib/docker/overlay2/91496c836a1f8000af7d7a870e341d0079ae5217c9e8a2c2a18dc6a1bcce86f0/work"},"Name": "overlay2"},"RootFS": {"Type": "layers","Layers": ["sha256:aaa5621d7c0157cae5916c9cca66dd8fc2fb4bdb74813ed463b73d5b58cccfdf"]},"Metadata": {"LastTagTime": "0001-01-01T00:00:00Z"}} ]? ?4.4 只查看鏡像ID
[root@docekr docker]# docker image ls -q ea335eea17ab 2199b8eb8390 cf49811e3cdb 43773d1dba76? ?4.5 刪除鏡像:
刪除指定的鏡像: [root@docker ~]#?docker image rm?IMAGE ID或者REPOSITORY:TAG,其中image rm 可以寫成rmi 例如: [root@docekr docker]# docker image ls |grep centos centos 6.9 2199b8eb8390 2 years ago 195MB centos 7.5.1804 cf49811e3cdb 2 years ago 200MB [root@docker ~]#?docker image rm?centos:6.9 [root@docker ~]#?docker rmi?centos:6.9 或者 [root@docker ~]#?docker image rm?2199b8eb8390 [root@docker ~]#?docker rmi?2199b8eb8390遇到問(wèn)題:must be forced 必須要強(qiáng)制,有依賴。-f 刪除+依賴? [root@docker ~]#?docker image rm -f IMAGE ID或者REPOSITORY:TAG 例如: [root@docker ~]#?docker image rm -f?centos:6.9?刪除所有本地的鏡像,上述講述docker image ls -q 只查看鏡像ID [root@docker ~]# docker image rm `docker image ls -q`? ?4.6 鏡像的導(dǎo)入和導(dǎo)出
? ? 場(chǎng)景:局域網(wǎng)電腦,不能上網(wǎng),只能從鏡像服務(wù)器上下載?
打包導(dǎo)出成文件: docker image save ?IMAGE ID > 文件名 或者 docker image save REPOSITORY:TAG > 文件名例子: root@docekr ~]# docker image ls |greo nginx REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest ea335eea17ab 6 days ago 141MB [root@docekr ~]# docker image save ea335eea17ab >/root/nginxlatest2.tar [root@docekr ~]# ll /root/nginx_latest.tar -rw-r--r-- 1 root root 145916416 Nov 23 22:02 /root/nginx_latest.tar導(dǎo)入打包的鏡像: ? docker image load -i 文件例子: [root@docekr ~]# docker rmi ea335eea17ab [root@docekr ~]# docker image load -i /root/nginx_latest.tar e1bbcf243d0e: Loading layer [==================================================>] 83.88MB/83.88MB 37380c5830fe: Loading layer [==================================================>] 61.99MB/61.99MB ff4c72779430: Loading layer [==================================================>] 3.072kB/3.072kB 49eeddd2150f: Loading layer [==================================================>] 4.096kB/4.096kB 1e8ad06c81b6: Loading layer [==================================================>] 3.584kB/3.584kB 8525cde30b22: Loading layer [==================================================>] 7.168kB/7.168kB Loaded image ID: sha256:ea335eea17ab984571cd4a3bcf90a0413773b559c75ef4cda07d0ce952b00291[root@docekr ~]# docker image ls 此時(shí)會(huì)出現(xiàn)一個(gè)問(wèn)題,沒(méi)有標(biāo)簽名字,只能重新設(shè)置標(biāo)簽:手工鏡像打標(biāo)簽 REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> ea335eea17ab 6 days ago 141MB centos 7.5.1804 cf49811e3cdb 2 years ago 200MB alpine 3.6 43773d1dba76 2 years ago 4.03MB[root@docekr ~]# docker image tag ea335eea17ab nginx:latest [root@docekr ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest ea335eea17ab 6 days ago 141MB centos 7.5.1804 cf49811e3cdb 2 years ago 200MB alpine 3.6 43773d1dba76 2 years ago 4.03MB問(wèn)題:如果鏡像很大,分發(fā)慢---docker filter鏡像打包跟導(dǎo)入,還有一套命令: 打包:docker import 導(dǎo)入:docker export 注意:這兩套命令不能交叉使用,否則導(dǎo)入后,報(bào)錯(cuò)open /var/lib/docker/tmp/docker-import-500852078/repositories: no such file or directory 兩套命令的區(qū)別: save命令會(huì)將鏡像完整保存,包括歷史版本和元數(shù)據(jù)信息,所以文件可能比較大 確切的說(shuō),export其實(shí)是容器的保存,只把鏡像當(dāng)前的狀態(tài)保存下來(lái),沒(méi)有歷史版本等信息,所有文件比較小5. 容器的管理??
? ? ?5.1 運(yùn)行第一個(gè)容器 run
? ? ? ? 5.1.1 交互式的容器: ?
? ? ? ? ?交互式啟動(dòng),自動(dòng)登錄后,此時(shí)的shell界面不能退出或者不能退出容器,否則容器停止,可以后期做dockerfile驗(yàn)證,搭配--rm鏡像名稱
交互式啟動(dòng): docker container run -it (+自己起名字或者不加是隨機(jī)名字,名字后期管理用) IMAGE ID ?或者?REPOSITORY:TAGi交互,t(tty)開(kāi)一個(gè)終端。每開(kāi)一個(gè)窗口就會(huì)開(kāi)啟一個(gè)tty,回車后容器創(chuàng)建啟動(dòng)進(jìn)入容器,并且登錄。實(shí)現(xiàn)隔離自動(dòng)登陸. [root@docekr ~]# docker image ls |grep centos centos 6.9 2199b8eb8390 2 years ago 195MB[root@docekr ~]# docker container run -it 2199b8eb8390 [root@f09f9d4712e8 /]# 查看容器狀態(tài) [root@docekr ~]# docker container ps 或者 docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f09f9d4712e8 2199b8eb8390 "/bin/bash" 20 seconds ago Up 19 seconds reverent_mccarthy? ? 參數(shù): CONTAINER ID ? ? ? ? 容器的唯一號(hào)碼(自動(dòng)生成的)。唯一代表容器的 ID。做容器管理,刪除停掉啟動(dòng)重啟都要依賴這個(gè)ID 或者 NAMES IMAGE ? ? ? ? ? ? ? 通過(guò)什么鏡像 COMMAND ? ? ? ? ? ? 啟動(dòng)容器,運(yùn)行的第一個(gè)命令,交互鏈接shell窗口 CREATED ? ? ? ? ? ? ?已經(jīng)創(chuàng)建后的時(shí)間 STATUS ? ? ? ? ? ? ? 容器的運(yùn)行狀態(tài) ?( Exited 未啟動(dòng), Up 啟動(dòng)) PORTS? 容器宿主機(jī)的端口映射 NAMES ? ? ? ? ? ? ? ?容器的名字(可以自動(dòng),也可以手工指定)。不能重名注意:交互式啟動(dòng),自動(dòng)登錄后,此時(shí)的shell界面不能退出或者不能退出容器,否則容器停止,方便后期做dockerfile驗(yàn)證 [root@docekr ~]# docker container run -it 2199b8eb8390 [root@f09f9d4712e8 /]# exit [root@docekr ~]# [root@docekr ~]# docker container ps -a 通過(guò) ps -a 查看全部 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f09f9d4712e8 2199b8eb8390 "/bin/bash" 17 minutes ago Exited (130) 7 minutes ago reverent_mccarthy? ? 指定容器名啟動(dòng):
[root@docekr ~]# docker container run -it --name="test_cent7.6" 2199b8eb8390 [root@c43486c07b32 /]# [root@docekr ~]# docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c43486c07b32 2199b8eb8390 "/bin/bash" 5 seconds ago Up 5 seconds test_cent7.6? ? ? 5.1.2 守護(hù)式容器啟動(dòng):
? ? ? 交互式的容器退出后容器消亡,想要維護(hù)測(cè)試功能的時(shí)候用。而守護(hù)式容器,只要不停止docker,就一直啟動(dòng)
守護(hù)式容器啟動(dòng):在交互的基礎(chǔ)上,添加 -d 參數(shù)。 [root@docekr ~]# docker image ls |grep nginx REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest ea335eea17ab 6 days ago 141MB nginx 1.14 295c7be07902 2 years ago 109MB注意:name不能其帶: [root@docekr ~]# docker run -d --name="testnginx:1.14" 295c7be07902 docker: Error response from daemon: Invalid container name (testnginx:1.14), only [a-zA-Z0-9][a-zA-Z0-9_.-] are allowed. See 'docker run --help'例子: [root@docekr ~]# docker run -d --name="test_nginx_1.14" 295c7be07902 或者 [root@docekr ~]# docker run -d --name="test_nginx_1.14" nginx:1.14 37ce57bc91e43d6edaf20946a6146f56aed419d03edbb83a5d21533536458303 [root@docekr ~]#[root@docekr ~]# docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 37ce57bc91e4 295c7be07902 "nginx -g 'daemon of鈥 About a minute ago Up About a minute 80/tcp test_nginx_1.14如何進(jìn)入容器:(后續(xù)會(huì)詳細(xì)講解) [root@docekr ~]# docker exec -ti 37ce57bc91e4 bash root@37ce57bc91e4:/#注意事項(xiàng):在后文(交互容器,如何退出后繼續(xù)在后臺(tái)執(zhí)行)詳細(xì)講解
例如nginx這種,守護(hù)式容器啟動(dòng),使用run -d 就可以。 例如Centos這種,守護(hù)式容器啟動(dòng),使用run -itd? 這里由一個(gè)知識(shí)點(diǎn),如果在創(chuàng)建容器過(guò)程中,本地沒(méi)有nginx:1.14鏡像,在運(yùn)行docker run -d --name="test_nginx_1.14" nginx:1.14 后,會(huì)自動(dòng)從網(wǎng)絡(luò)中pull nginx:1.14,在docker run -d --name="test_nginx_1.14" nginx:1.14? ?查看容器的網(wǎng)關(guān)、IP信息
[root@docekr ~]# docker container inspect test_nginx_1.14"Gateway": "172.17.0.1", "IPAddress": "172.17.0.2", "IPPrefixLen": 16,注意:由于是nginx的鏡像,此時(shí)外部機(jī)器訪問(wèn)不了nginx ,只能宿主機(jī)能范訪問(wèn)nginx 宿主機(jī)訪問(wèn): [root@docekr ~]# curl 172.17.0.2:80 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;} </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p><p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p> </body> </html>? ?如何刪除容器:
? ? ? 方法一:手工刪除
[root@docekr ~]# docker container ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 37ce57bc91e4 295c7be07902 "nginx -g 'daemon of鈥 19 minutes ago Up 19 minutes 80/tcp test_nginx_1.14 f09f9d4712e8 2199b8eb8390 "/bin/bash" 51 minutes ago Exited (130) 42 minutes ago reverent_mccarthy[root@docekr ~]# docker container rm f09f9d4712e8 f09f9d4712e8 [root@docekr ~]# docker container ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 37ce57bc91e4 295c7be07902 "nginx -g 'daemon of鈥 20 minutes ago Up 20 minutes 80/tcp test_nginx_1.14注意:在運(yùn)行的容器不能刪除,除非 -f 強(qiáng)制刪除 [root@docekr ~]# docker container rm 37ce57bc91e4 Error response from daemon: You cannot remove a running container 37ce57bc91e43d6edaf20946a6146f56aed419d03edbb83a5d21533536458303. Stop the container before attempting removal or force remove[root@docekr ~]# docker rm -f 37ce57bc91e4 37ce57bc91e4???? ?方法二:交互式創(chuàng)建容器,退出容器后,容器停止,加上--rm鏡像名稱參數(shù)后,自動(dòng)刪除容器
使用 docker container run -it --name="" ?--rm 鏡像名稱[root@docekr ~]# docker image ls |gere ningx REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest ea335eea17ab 6 days ago 141MB nginx 1.14 295c7be07902 2 years ago 109MB[root@docekr ~]# docker container run -it --name="oldguo_cent76" --rm 295c7be07902 回車后,就會(huì)卡住重啟一個(gè)shell輸入docker container ps,發(fā)現(xiàn)oldguo_cent76在啟動(dòng) [root@docekr ~]# docker container ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f682bd703b5f 295c7be07902 "nginx -g 'daemon of鈥 17 seconds ago Up 16 seconds 80/tcp oldguo_cent76在卡住的界面中,ctrl+c 后就會(huì)退出 [root@docekr ~]# docker container run -it --name="oldguo_cent76" --rm 295c7be07902^C[root@docekr ~]# 在查看docker container ps -a 沒(méi)有剛才的容器 [root@docekr ~]# docker container ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES[root@docekr ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest ea335eea17ab 6 days ago 141MB nginx 1.14 295c7be07902 2 years ago 109M? ? ?5.1.3 容器的應(yīng)用場(chǎng)景
? ? ? ?交互式的容器: 工具類: 開(kāi)發(fā),測(cè)試,臨時(shí)性的任務(wù)()
? ? ? ?[root@docker ~]# docker container run -it --name="oldguo_cent76" ?--rm 9f38484d220f
? ? ? ?守護(hù)式容器: 跑網(wǎng)絡(luò)服務(wù) ?ssh(管理自己的docker) ?nginx tomcat ? ???
? ? ?5.1.4? 容器端口的轉(zhuǎn)發(fā)? ??
? ? ? 守護(hù)式容器,跑nginx tomcat業(yè)務(wù),除了宿主機(jī),其他機(jī)器無(wú)法訪問(wèn)容器的端口。如何實(shí)現(xiàn)外部機(jī)器訪問(wèn)nginx,做端口轉(zhuǎn)發(fā)。
容器內(nèi)部的80端口映射到宿主機(jī)的8080 <==> 外部機(jī)器訪問(wèn)宿主機(jī)的8080,通過(guò)iptables轉(zhuǎn)給容器,訪問(wèn)容器的80端口,注意宿主機(jī)的8080端口不要被占用,如果占用,可以使用其他的端口[root@docker /]# docker run -d -p 8080:80 --name="oldguo_nginx_80" nginx:1.14[root@docekr ~]# ip addr |grep ens33 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000inet 10.4.7.7/24 brd 10.4.7.255 scope global noprefixroute ens33[root@docekr ~]# curl 10.4.7.7:8080 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;} </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p><p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p> </body> </html>[root@docekr ~]# docker container ps -a 內(nèi)部的tcp 80端口映射到本地的任何地址的8080 通過(guò)iptables CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 893203b76bac nginx:1.14 "nginx -g 'daemon of鈥 36 minutes ago Up 36 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp oldguo_nginx_8? ? ?5.1.5 容器的啟動(dòng)\關(guān)閉
? ? ? ?守護(hù)式容器的關(guān)閉和啟動(dòng)
[root@docker /]# docker container stop oldguo_nginx_80 [root@docker /]# docker container start oldguo_nginx_80? ? ? 交互式的容器的關(guān)閉和啟動(dòng)
[root@docker /]# docker container stop nervous_allen [root@docker /]# docker container start -i nervous_allen 通過(guò)這種形式的啟動(dòng)后,把交互式的容器,改成守護(hù)式,一再在掛在中,但是如何進(jìn)入容器,退出還是會(huì)停止容器。? ? ?停止所有docker
? ? ?腳本:docker container stop?`docker container ls -a |awk '{print $1}' |awk 'NR>1'`
? ? ?命令:docker container stop?`docker container ls -a -q`
?????注銷所有docker
?????腳本:docker container rm `docker container ls -a |awk '{print $1}' |awk 'NR>1'`
? ? ?命令:docker container rm `docker container ls -a -q`
? ? 5.1.6?容器的連接:
? ? ?比如不管是交互還是守護(hù),在運(yùn)行的容器中,如何進(jìn)入容器:??
? ? ? ? 方法一:attach 把后臺(tái)運(yùn)行的程序,鏡像鏈接出前臺(tái)來(lái)
? ? ? ? ?方法二:推薦主推方式
子進(jìn)程的方式登錄(在已有工作容器中生成子進(jìn)程,做登錄(相當(dāng)于我自己開(kāi)啟了一個(gè)/bin/bash,其他在登錄有開(kāi)啟一個(gè)/bin/bash).可以用于進(jìn)行容器的調(diào)試,退出時(shí)也不會(huì)影響到當(dāng)前容器) ?/bin/bash不會(huì)隔離,只是窗口 [root@docker ~]# docker container exec -it nervous_allen /bin/bash注意:啟動(dòng)某些鏡像的時(shí)候,比如centos ,最后可以不接/bin/bash,? docker container run -it centos啟動(dòng)nginx這些鏡像的時(shí)候,最后需要接/bin/bash, docker container run -it nginx /bin/bash有些制作商在鏡像中,已經(jīng)給你寫好了,在啟動(dòng)交互式容器后第一個(gè)執(zhí)行的命令是什么,如果第一個(gè)是/bin/bash,可以不加。但是像nginx 這種,制作商沒(méi)寫好,所以加/bin/bash或者/bin/sh? ? ??交互容器,如何退出后繼續(xù)在后臺(tái)執(zhí)行:
??????1. 在進(jìn)入交互式容器后啟動(dòng)/bin/bash,exit后/bin/bash就會(huì)退出,容器停止,通過(guò)ctrl + P +Q??把/bin/bash 一直丟到后臺(tái)夯住,然后在通過(guò)attach或者把exec -ti 把丟給后臺(tái)的/bin/bash進(jìn)程在獲取到,重新進(jìn)如容器
??????2. 在run容器后,一直讓/bin/bash死循環(huán),不建議
docker container run -it --name="" 鏡像名 sleep 100000???只要保證sleep足夠大,就會(huì)一直夯住
??????3. 讓容器中的一個(gè)程序一直運(yùn)行,比如讓nginx程序一直在運(yùn)行(這里的一直運(yùn)行代表是,啟動(dòng)后類似tail -f 卡住,叫一直運(yùn)行),這樣容器就不會(huì)宕,而這個(gè)nginx進(jìn)程不能在后臺(tái)(后臺(tái):也就是容器先啟動(dòng)/bin/bash,nginx雖然一直運(yùn)行,但是進(jìn)程是/bin/bash的shell中啟動(dòng)),如果/bin/bash掛了,nginx也是宕的。實(shí)現(xiàn)不了容器一直存在,所以要把nginx進(jìn)程放在前臺(tái),夯在前臺(tái)(前臺(tái):容器啟動(dòng)的第一個(gè)程序,叫做前臺(tái)。而第一個(gè)進(jìn)程是一切的開(kāi)始,所以程序默認(rèn)不會(huì)讓這個(gè)進(jìn)程宕掉,所以依賴這個(gè)機(jī)制,實(shí)現(xiàn)一直掛載)? 。
制作守護(hù)式容器:
1、nginx 類型鏡像啟動(dòng)容器后,制作鏡像的人,默認(rèn)讓此鏡像第一個(gè)命令是nginx -g 'daemon off;'? ?這個(gè)就是夯住進(jìn)程。驗(yàn)證測(cè)試:docker container run nginx鏡像名,回車后當(dāng)前界面的shell立即卡住,代表夯住。通過(guò)docker container ps 查看此容器,command第一個(gè)進(jìn)程是nginx -g 'daemon off;' ")。所以制作nginx守護(hù)式容器:?docker container run -d nginx鏡像名? ? ?,-d 后臺(tái)一直運(yùn)行
[root@docekr ~]# docker container run --name="ceshi_nginx" 295c7be07902[root@docekr ~]# docker container ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7a9495f275eb 295c7be07902 "nginx -g 'daemon off;'" 10 seconds ago Up 8 seconds 80/tcp ceshi_nginx2、centos 類型鏡像,他們的第一個(gè)命令是/bin/bash,可以通過(guò)docker container run centos鏡像名,docker container ps 查看此容器。但是運(yùn)行?docker container run -d centos鏡像名? ,通過(guò)docker container ps 查看此容器立馬宕掉,因?yàn)榈谝粋€(gè)命令是/bin/bash,他不是一直運(yùn)行,一直運(yùn)行是卡住。為了解決這種情況,需要加-it 參數(shù),通過(guò)參數(shù)開(kāi)啟交互、開(kāi)一個(gè)終端。讓后在把這個(gè)中終端,通過(guò)-d? 后臺(tái)一直運(yùn)行。所以制作centos守護(hù)式容器:?docker container run -itd centos鏡像名? ?
???5.2 docker容器的網(wǎng)絡(luò)訪問(wèn)詳解
? ? ?docker 默認(rèn)網(wǎng)絡(luò)環(huán)境原理:宿主機(jī)開(kāi)啟docker 0 (相當(dāng)于端口轉(zhuǎn)發(fā)/nat模式)的網(wǎng)卡,宿主機(jī)通過(guò)docker 0與所有的docker容器鏈接,默認(rèn)docker 0 IP是172.17.0.1、容器IP是172.17.0.%。容器上網(wǎng)的也是,docker 容器通過(guò)docker 0 ,在接入到宿主機(jī)網(wǎng)卡上網(wǎng)。同一臺(tái)宿主機(jī)所有容器都是可以互相通信的。
? ? ?docker容器的兩種端口地址映射:指定映射、?隨機(jī)映射
? ?? 原理:(docker 會(huì)自動(dòng)添加一條iptables規(guī)則來(lái)實(shí)現(xiàn)容器內(nèi)部跟宿主機(jī)之間的端口映射)
? ? ?隨機(jī)映射:
? ? ?docker run -P 端口
用-P(大寫)標(biāo)記時(shí),docker會(huì)隨機(jī)選擇一個(gè)端口映射到容器內(nèi)部開(kāi)放的網(wǎng)絡(luò)端口上。docker run -P 端口 使用-p(小寫)標(biāo)記時(shí)則可以指定要映射的端口,并且在一個(gè)指定端口上只可以綁定一個(gè)容器,支持的格式有: ip:hostport:containerport ip::containerport hostport:containerport例子: [root@docker ~]# docker container run -d -p 80 --name='n5' nginx:1.14 ?意思是隨機(jī)分配一個(gè)宿主機(jī)的端口號(hào)跟容器的80端口地址映射,docker container ps 查看[root@docekr ~]# docker container ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2bab757be50b nginx:1.14 "nginx -g 'daemon off About a minute ago Up About a minute 0.0.0.0:49153->80/tcp, :::49153->80/tcp n5[root@docekr ~]# curl 127.0.0.1:49153 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;} </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p><p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p> </body> </html> [root@docekr ~]# ?例子2: [root@docker ~]# docker container run -d -p 10.4.7.7::80 --name='n6' nginx:1.14 ? ? 隨機(jī)映射,把宿主機(jī)的這個(gè)容器80端口跟宿主機(jī)通信的隨機(jī)端口做綁定。目前IP只能跟宿主機(jī),跟其他的報(bào)錯(cuò),不知道如何用應(yīng)用場(chǎng)景:宿主機(jī)IP:端口號(hào):容器端口號(hào)
實(shí)驗(yàn)對(duì)象: 宿主機(jī)的IP:10.4.7.7 另一個(gè)機(jī)器IP:10.4.7.8另一個(gè)機(jī)器IP:物理機(jī)端口:容器端口,這種形式會(huì)報(bào)錯(cuò),所以根本用不了這樣。 [root@docekr ~]# docker run -it -d -p 10.4.7.8:8084:80 295c7be07902 6ffcd62eb2e3b7481845e6fc2a72cd0d8c3ac789ea5cee79416778b16fd0f02c docker: Error response from daemon: driver failed programming external connectivity on endpoint festive_chaum (477f2371e937f606d0b0643715ad362bfb6113f2df73effa9589aa8537d68406): Error starting userland proxy: listen tcp4 10.4.7.8:8084: bind: cannot assign requested address.那這個(gè)到底有何用處: 這臺(tái)宿主機(jī)機(jī)器有多個(gè)網(wǎng)卡:10.4.7.7 、10.4.7.9.這時(shí)候我們啟動(dòng)多個(gè)nginx容器,他們都是80,這個(gè)時(shí)候,就可以 -p 10.4.7.7:80:容器1的80 -p 10.4.7.9:80:容器1的80。指定映射:
? ? -p 宿主機(jī)端口:容器端口
? ? -p 宿主機(jī)ip:宿主機(jī)端口:容器端口
? ? -p 宿主機(jī)ip::容器端口(隨機(jī)端口:32768-60999)
? ? -p 宿主機(jī)端口:容器端口/udp ? ?選擇 tcp 或者udp
? ? -p 81:80 –p 443:443 ? ?多端口映射
?多端口映射:
[root@docker ~]# docker container run -d -p 81:80 –p 443:443 ?--name='n6' nginx:1.14 ?多端口映射 CONTAINER ID ??IMAGE? ? COMMAND? ??CREATED? ? ?STATUS ?? PORTS? ? ?NAMES 45defc5f8660 ??nginx:1.14 ?"nginx -g 'daemon of…" ?6 seconds ago ??Up 4 seconds ?80/tcp, 0.0.0.0:8085->23/tcp,? ? ?0.0.0.0:8083->56/tcp ???oldguo8012?-p 后面不接tcp/udp,默認(rèn)使用TCP的協(xié)議,比如-p 8080:80。如果要進(jìn)行UDP協(xié)議轉(zhuǎn)發(fā),如DNS,需要加上UDP
[root@docker ~]# docker container run -d -p 81:80 –p 443:443/udp ?--name='n6' nginx:1.14 ?選擇 tcp 或者udp-p 就是做了iptables,把外部機(jī)器訪問(wèn)容器的流量,引入到容器中。所以如果不做-p,可以通過(guò)自己添加iptables,做兩跳的路由轉(zhuǎn)發(fā)一樣可以實(shí)現(xiàn)。
?? 5.3 容器的其他管理
查看目前所有的容器ID: ? docker ps -a ?-q ? 等價(jià)于: ?docker container ls -a -q找到容器最新的啟動(dòng)時(shí)間 -l : docker ps -a -q -l ??? ?外部調(diào)試工具:top
場(chǎng)景:并不是每個(gè)docker都可以允許讓你登錄,但是還想知道容器的狀態(tài),就需要使用外部docker命令.查看容器的top: docker ?top ?容器的ID例子:[root@docekr ~]# docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 452f295a0ef2 295c7be07902 "nginx -g 'daemon off 2 hours ago Up 2 hours 10.4.7.7:8084->80/tcp epic_herschel[root@docekr ~]# docker container top 452f295a0ef2 UID PID PPID C STIME TTY TIME CMD root 3840 3822 0 11:4 pts/0 00:00:00 nginx: master process nginx -g daemon off; 101 3866 3840 0 11:4 pts/0 00:00:00 nginx: worker process?查看容器內(nèi)部的日志:
1、查看容器日志: docker container logs 容器ID[root@docekr ~]# docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 452f295a0ef2 295c7be07902 "nginx -g 'daemon of鈥 2 hours ago Up 2 hours 10.4.7.7:8084->80/tcp epic_herschel[root@docekr ~]# docker container logs 452f295a0ef2 10.4.7.7 - - [24/Nov/2021:14:09:35 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-" 10.4.7.1 - - [24/Nov/2021:14:09:43 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "-" 2021/11/24 14:09:43 [error] 7#7: *2 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 10.4.7.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "10.4.7.7:8084", referrer: "http://10.4.7.7:8084/" 10.4.7.1 - - [24/Nov/2021:14:09:43 +0000] "GET /favicon.ico HTTP/1.1" 404 571 "http://10.4.7.7:8084/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "-" [root@docekr ~]# 2、查看容器日志,并顯示時(shí)間方面等:docker container logs -t 容器ID 3、實(shí)施動(dòng)態(tài)監(jiān)控,跟 tail -f 一個(gè)功能:docker logs -f 容器ID 4、顯示最后10行,動(dòng)態(tài)監(jiān)控查看容器日志,并顯示時(shí)間等方面:docker logs -tf ?--tail 10 容器ID? 針對(duì)大量容器,大量日志,通過(guò)架構(gòu),容器化集群,日志怎么看很多 ? ?→ ?elk、efk 等
? 中心化 :數(shù)據(jù)中心 idc物理服務(wù)器搭建
? 云化 ?: ?去中心化 ,云計(jì)算?
? 容器內(nèi)部命令CP:
需求1:已經(jīng)啟動(dòng)了nginx容器,如何把編寫好的index.html替換到容器/usr/share/nginx/html/下 使用方案:docker container cp 文件 容器的名字:容器的路徑[root@docekr ~]# docker run -d -p 8085:80 --name="testnginx" 295c7be07902 [root@docekr ~]# curl 127.0.0.1:8085 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;} </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> ..... </html>[root@docekr ~]# echo "nihao" > index.html [root@docekr ~]# docker container cp index.html testnginx:/usr/share/nginx/html/ [root@docekr ~]# curl 127.0.0.1:8085 nihoa [root@docekr ~]# 需求2:已經(jīng)啟動(dòng)了nginx容器,如何把容器的文件下載到本地[root@docekr ~]# docker container cp testnginx:/usr/share/nginx/html/50x.html ./ [root@docekr ~]# ll 50x.html -rw-r--r-- 1 root root 537 Dec 4 2018 50x.html [root@docekr ~]# 思考:如果每次運(yùn)行完容器后,都需要手動(dòng)拷貝文件到容器中,還是很麻煩,或者以后如果修index.html,還得繼續(xù)cp一次。簡(jiǎn)化操作步驟,直接讓docker中的容器,調(diào)用的是本地的index,html,這樣實(shí)現(xiàn)本地修改,直接關(guān)聯(lián)容器。設(shè)置數(shù)據(jù)卷。? 5.4 docker的數(shù)據(jù)卷實(shí)現(xiàn)持久化存儲(chǔ)
? ?5.4.1?手工交互數(shù)據(jù):
[root@docker opt]# docker container cp index.html n1:/usr/share/nginx/html/ [root@docker opt]# docker container cp n1:/usr/share/nginx/html/50x.html ./? ?5.4.2 Volume實(shí)現(xiàn)宿主機(jī)和容器的數(shù)據(jù)共享
? ?把容器/usr/share/nginx/html 目錄映射到本地 /opt/html
[root@docker opt]# mkdir -p /opt/html [root@docker ~]# docker run -d --name="nginx_3" -p 83:80 -v /opt/html:/usr/share/nginx/html nginx:1.14注意:如果容器沒(méi)有/usr/share/nginx/html會(huì)自動(dòng)創(chuàng)建 作用: 容器數(shù)據(jù)持久化存儲(chǔ)。把容器中重要的目錄或者文件,進(jìn)行數(shù)據(jù)持久化,就算容器被刪除,本地磁盤數(shù)據(jù)不會(huì)刪除。比如nginx容器主要是conf跟html ,做成數(shù)據(jù)卷就算掛了,也沒(méi)事。? ? 5.4.3 共享資源數(shù)據(jù)卷實(shí)現(xiàn)負(fù)載均衡
例子:? 啟動(dòng)兩個(gè)nginx容器,分別掛在到宿主機(jī)90、91端口,共同掛載一個(gè)數(shù)據(jù)卷,實(shí)現(xiàn)靜態(tài)資源共享,nginx做宿主機(jī)90、91端口輪詢,實(shí)現(xiàn)負(fù)載均衡
[root@localhost html]#docker run -d --name="nginx_90" -p 90:80 -v /opt/html:/usr/share/nginx/html nginx:1.14 [root@localhost html]#docker run -d --name="nginx_91" -p 91:80 -v /opt/html:/usr/share/nginx/html nginx:1.14查看容器數(shù)據(jù)卷掛在路徑:
?docker container inspect nginx_91"Mounts": [{"Type": "bind","Source": "/opt/html","Destination": "/usr/share/nginx/html","Mode": "","RW": true,"Propagation": "rprivate"}],? ?? 5.3.4?集中化管理數(shù)據(jù)卷容器:??
? 實(shí)現(xiàn)效果:比如這類容器,要掛載100個(gè)路徑,而這種類型的容器還要啟動(dòng)100多個(gè)。創(chuàng)建第一個(gè)容器,需要寫很長(zhǎng)的 -v ,而在創(chuàng)建后續(xù)的容器,還的繼續(xù)寫這么長(zhǎng),無(wú)疑是增加了工作量。如果第一個(gè)容器建立完成之后,其他的容器在此模板上創(chuàng)建,是不是就會(huì)簡(jiǎn)化-v 的內(nèi)容。
1、先創(chuàng)建第一個(gè)數(shù)據(jù)卷容器 docker run -it ?--name "nginx_test_volumes" -v /opt/Volume/a:/opt/a ?-v /opt/Volume/b:/opt/b centos:6.9 /bin/bash ,通過(guò)ctrl + p +? q?后臺(tái)運(yùn)行2、創(chuàng)建其他的容器 ,?調(diào)用第一個(gè)數(shù)據(jù)卷容器 --volumes-from 作為模板。 docker run -d ?-p 8085:80 --volumes-from ?nginx_test_volumes --name "n8085" ?nginx docker run -d ?-p 8086:80 --volumes-from ?nginx_test_volumes --name "n8086" ?nginx 作用: ?在集中管理集群中,大批量的容器都需要掛載相同的多個(gè)數(shù)據(jù)卷時(shí),可以采用數(shù)卷容器進(jìn)行統(tǒng)一管理?5.5 制作本地局域網(wǎng)yum源
? 1. 安裝vsftpd軟件
? [root@docker ~]# yum install -y vsftpd
? 2. 啟動(dòng)ftp?
?[root@docker ~]# systemctl enable vsftpd
?[root@docker ~]# systemctl start vsftpd
?3. 上傳系統(tǒng)鏡像進(jìn)行到虛擬機(jī)
?cd /mnt
?rz CentOS-6.9-x86_64-bin-DVD1.iso
?rz CentOS-7.5-x86_64-bin-DVD1.iso
?配置yum倉(cāng)庫(kù)
?mkdir -p /var/ftp/centos6.9?
?mkdir -p /var/ftp/centos7.5
?鏡像掛在到一個(gè)目錄上去
?[root@docker mnt]# mount -o loop /mnt/CentOS-6.9-x86_64-bin-DVD1.iso ?/var/ftp/centos6.9/
?[root@docker mnt]# mount -o loop /mnt/CentOS-7.5-x86_64-bin-DVD1.iso ?/var/ftp/centos7.5/
?windows驗(yàn)證
?ftp://192.168.78.4/centos6.9/
優(yōu)化yum源
cat >/etc/yum.repos.d/ftp_6.repo <<EOF?
[ftp]
name=ftpbase
baseurl=ftp://192.168.78.4/centos6.9
enabled=1
gpgcheck=0
EOF
cat >/etc/yum.repos.d/ftp_7.repo <<EOF?
[ftp]
name=ftpbase
baseurl=ftp://192.168.78.4/centos7.5
enabled=1
gpgcheck=0
EOF
?
總結(jié)
以上是生活随笔為你收集整理的Docker 介绍、安装、基础搭建 --01的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《高级计算机网络》之移动自组网——大连理
- 下一篇: LVS配合piranha安装使用