建設(shè)銀行網(wǎng)站怎么短信轉(zhuǎn)賬關(guān)鍵詞權(quán)重如何打造
1.docker 體系架構(gòu)
Docker 采用了 C / S 架構(gòu),包括客戶端和服務(wù)端。Docker 守護(hù)進(jìn)程作為服務(wù)端接受來自客戶端的請求,并處理這些請求(創(chuàng)建、運(yùn)行、分發(fā)容器)。客戶端和服務(wù)端既可以運(yùn)行在一個(gè)機(jī)器上,也可通過 socket 或者 RESTfulAPI 來進(jìn)行通信。
2.Docker基本組成
Docker overview
Docker Daemon:守護(hù)進(jìn)程
Docker 主機(jī)(Host):一個(gè)物理機(jī)或虛擬機(jī),用于運(yùn)行 Docker 服務(wù)進(jìn)程和容器。
Docker 服務(wù)端(Server):Docker 守護(hù)進(jìn)程,運(yùn)行 docker 容器。
Docker 客戶端(Client):客戶端使用 docker 命令或其他工具調(diào)用 docker API。
Docker 倉庫(Registry):保存鏡像的倉庫,類似于 git 或 svn 這樣的版本控制系
Docker 鏡像(Images):鏡像可以理解為創(chuàng)建實(shí)例使用的模板。
Docker 容器(Container):容器是從鏡像生成對外提供服務(wù)的一個(gè)或一組服務(wù)。官方倉庫: Docker
# step 1: 安裝必要的一些系統(tǒng)工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加軟件源信息 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Step 3 sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo # Step 4: 更新并安裝Docker-CE sudo yum makecache fast sudo yum -y install docker-ce # Step 4: 開啟Docker服務(wù) sudo systemctl restart docker #Docker-compose安裝 sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker-compose --version
2.1 基本術(shù)語
2.1.1 Docker主機(jī)(Host)
安裝了Docker程序的主機(jī),運(yùn)行Docker守護(hù)進(jìn)程
2.1.2 Docker鏡像(Image)
鏡像就是一堆只讀層的統(tǒng)一視角
docker 鏡像就好比是一個(gè)(只讀)模板(和我們常見的 ISO 鏡像類似,支持增刪改查),可以通過這個(gè)模板來創(chuàng)建容器服務(wù),tomcat鏡像 ===> run ===> tomcat01容器(提供服務(wù)),一個(gè)鏡像可以創(chuàng)建多個(gè)容器(最終服務(wù)運(yùn)行或者項(xiàng)目運(yùn)行就是在容器中)
鏡像不是一個(gè)單一的文件,而是有多層構(gòu)成,我們可以通過 docker history <ID/NAME> 查看鏡像中各層內(nèi)容及大小,每層對應(yīng)著Dockerfile中的一條指令
Docker鏡像默認(rèn)存儲(chǔ)在 /var/lib/docker/<Storage Driver>,docker info 查看 Docker 使用的 Storage Driver
2.1.3 Docker容器(Container)
運(yùn)行鏡像后生成的實(shí)例成為容器,每運(yùn)行一次鏡像就會(huì)產(chǎn)生一個(gè)容器,容器可以啟動(dòng)、停止或刪除
容器使用沙箱機(jī)制,互相隔離,是獨(dú)立安全的
可以把容器看做是一個(gè)簡易版的linux環(huán)境,包括root用戶權(quán)限、進(jìn)程空間、用戶空間、網(wǎng)絡(luò)空間、文件系統(tǒng)和運(yùn)行的在其中的應(yīng)用程序
容器 = 鏡像 + 讀寫層,容器其實(shí)是在鏡像的最上面加了一層讀寫層,在運(yùn)行容器里文件改動(dòng)時(shí),會(huì)先從鏡像要寫的文件復(fù)制到容器自己的文件系統(tǒng)(讀寫層)如果容器刪除了,最上面的讀寫層也就刪除了,改動(dòng)也就丟失了,所以無論多少個(gè)容器共享一個(gè)鏡像,所做的寫操作都是從鏡像的文件系統(tǒng)復(fù)制過來操作的,并不會(huì)修改鏡像的源文件,這種方式提高磁盤利用率,若想持久化這些改動(dòng),可以通過 docker commit 將容器保存成一個(gè)新的鏡像
2.1.4 Docker倉庫(Repository)
用來保存鏡像的,倉庫中包含許多鏡像,每個(gè)鏡像都有不同的標(biāo)簽(tag)
分為公開倉庫(Public)和私有倉庫(Private)兩種形式
2.2 鏡像和容器的關(guān)系
鏡像:鏡像是文件,是靜態(tài)的,只讀的,提供了運(yùn)行程序完整的數(shù)據(jù),是應(yīng)用程序的“集裝箱”
容器:鏡像的運(yùn)行環(huán)境,動(dòng)態(tài),有生命周期,像是迷你的“l(fā)inux操作系統(tǒng)”,由Docker負(fù)責(zé)創(chuàng)建,容器之間彼此隔離
鏡像與容器的關(guān)系就是程序和進(jìn)程的關(guān)系,如:
/bin/ls 執(zhí)行程序文件 ls /etc 進(jìn)程 ls /var 進(jìn)程
注意
docker客戶端與docker server是通過http或https協(xié)議進(jìn)行交互的
加載鏡像到本地使用 http 或 https,默認(rèn)必須使用 https 協(xié)議,如果你自己確認(rèn)不使用安全的,可以用 http
鏡像下載可以去 dockerhub 或者阿里云、華為云等
使用Docker步驟
安裝Docker
從Docker倉庫中下載軟件對應(yīng)的鏡像
運(yùn)行這個(gè)鏡像,此時(shí)會(huì)生成一個(gè)Docker容器
對容器的啟動(dòng)/停止就是對軟件的啟動(dòng)/停止
4.安裝及使用docker
4.1 依賴的基礎(chǔ)環(huán)境
64 bits CPU
內(nèi)存至少4G
Linux Kernel 3.10+
Linux Kernel cgroups and namespaces
4.2 安裝Docker
Docker版本:分為社區(qū)版(Community Ddition,CE)和企業(yè)版(Enterprise Edition,EE)
4.2.1 Centos7+ 安裝 docker
“Extras” repository (使用命令yum repolist可以看到extras,extras里面有docker)
Cenots7 版本自帶的 docker 版本較老,建議卸載后,安裝新版
cd /etc/yum.repos.d/ # 下載清華 Docker 倉庫 wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo sed -i 's@https://.*@https://mirrors.tuna.tsinghua.edu.cn/docker-ce@g' /etc/yum.repos.d/docker-ce.repo # 使用 yum repolist 看到 docker-ce-stable/x86_64 # 卸載舊的版本 yum remove docker docker-client docker-client-latest docker-common yum remove docker-latest docker-latest-logrotate docker-logrotate docker-engine # 刪除資源 rm -rf /var/lib/docker # 更新軟件包索引 yum makecache fast # 安裝 docker 社區(qū)版 yum -y install docker-ce docker-ce-cli containerd.io # 啟動(dòng) Docker systemctl start docker # 查看 docker 版本 docker version # 開機(jī)啟動(dòng) Docker systemctl enable docker # 查看 Docker 狀態(tài) systemctl status docker # 驗(yàn)證是否正確安裝了docker,方法是運(yùn)行 hello-world 鏡像 docker run hello-world # 關(guān)閉 Docker systemctl stop docker
4.2.2 Ubuntu 安裝 docker-ce 環(huán)境
#參考文檔 https://docs.docker.com/engine/install/debian/ https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/ #卸載舊版 sudo apt-get remove docker docker-engine docker.io containerd runc #安裝依賴 sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common #信任 Docker 的 GPG 公鑰(發(fā)行版不同,下面的內(nèi)容也有所不同) curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - #添加倉庫(發(fā)行版不同,下面的內(nèi)容也有所不同) sudo add-apt-repository \"deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \$(lsb_release -cs) \stable"#安裝docker-ce sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io # 指定安裝版本 apt install docker-ce=5:19.03.15~3-0~ubuntu-bionic docker-ce-cli=5:19.03.15~3-0~ubuntu-bionic#檢查是否安裝成功 [root@docker ~]# docker run hello-worldHello from Docker! This message shows that your installation appears to be working correctly.To generate this message, Docker took the following steps:1. The Docker client contacted the Docker daemon.2. The Docker daemon pulled the "hello-world" image from the Docker Hub.(amd64)3. The Docker daemon created a new container from that image which runs theexecutable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent itto your terminal.To try something more ambitious, you can run an Ubuntu container with:$ docker run -it ubuntu bashShare images, automate workflows, and more with a free Docker ID:https://hub.docker.com/For more examples and ideas, visit:https://docs.docker.com/get-started/
4.3 Docker鏡像加速
使用阿里云提供的鏡像加速(鏡像倉庫),也可以使用網(wǎng)易云等;步驟:①.注冊并登陸“阿里云的開發(fā)者平臺(tái)”http://dev.aliyun.com;②.查看專屬的加速器地址;③.配置自己的Docker加速器;vi /etc/docker/daemon.json {"exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"] }systemctl daemon-reload&&systemctl enable --now docker
5. Docker平臺(tái)基本使用方法
運(yùn)行一個(gè)container并加載鏡像centos,運(yùn)行起來這個(gè)實(shí)例后,在實(shí)例中執(zhí)行 /bin/bash命令
5.1 docker常用參數(shù):
header 1 | header 2 |
run | 運(yùn)行 |
-i | 以交互模式運(yùn)行容器,通常與-t 同時(shí)使用; |
-t | 為容器重新分配一個(gè)偽輸入終端,通常與-i同時(shí)使用 |
-d | 后臺(tái)運(yùn)行容器,并返回容器ID; |
-c | 后面跟待完成的命令 |
#示例 # 下載和運(yùn)行鏡像一步完成 root@RS1:~# docker run -it nginx /bin/bash Unable to find image 'nginx:latest' locally latest: Pulling from library/nginx b4d181a07f80: Already exists 66b1c490df3f: Pull complete d0f91ae9b44c: Pull complete baf987068537: Pull complete 6bbc76cbebeb: Pull complete 32b766478bc2: Pull complete Digest: sha256:8df46d7414eda82c2a8c9c50926545293811ae59f977825845dda7d558b4125b Status: Downloaded newer image for nginx:latest root@2e1e48cd50c7:/# #5.2 容器后臺(tái)運(yùn)行的特點(diǎn) 如果沒有永久運(yùn)行的程序,終端退出(exit)容器就會(huì)馬上退出"容器永久運(yùn)行的條件:需要有永久運(yùn)行的程序,并且使用 docker run -d 后臺(tái)啟動(dòng)容器" "常見的坑:docker 容器使用后臺(tái)運(yùn)行,必須要有一個(gè)前臺(tái)進(jìn)程,docker發(fā)現(xiàn)沒有應(yīng)用,就會(huì)自動(dòng)停止"# 在container中啟動(dòng)一個(gè)長久運(yùn)行的進(jìn)程,不斷向stdin輸出 hello world 。模擬一個(gè)后臺(tái)運(yùn)行的服務(wù) docker run --name mycentos -d centos:7 /bin/bash -c "while true;do echo hello world; sleep 3; done" # 進(jìn)入容器 docker exec -it mycentos /bin/bash # 查看容器日志 docker logs -tf --tail 10 mycentos # -tf 顯示日志 # --tail number 要顯示日志條數(shù)
6. Docker常用命令
# 輸入docker可以查看docker的命令用法,輸入docker COMMAND --help 查看指定命令的詳細(xì)用法 docker 命令 --help# 查看docker版本信息 root@RS1:~# docker version Client: Docker Engine - CommunityVersion: 20.10.7API version: 1.41Go version: go1.13.15Git commit: f0df350Built: Wed Jun 2 11:56:40 2021OS/Arch: linux/amd64Context: defaultExperimental: trueServer: Docker Engine - CommunityEngine:Version: 20.10.7API version: 1.41 (minimum version 1.12)Go version: go1.13.15Git commit: b0f5bc3Built: Wed Jun 2 11:54:48 2021OS/Arch: linux/amd64Experimental: falsecontainerd:Version: 1.4.6GitCommit: d71fcd7d8303cbf684402823e425e9dd2e99285drunc:Version: 1.0.0-rc95GitCommit: b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7docker-init:Version: 0.19.0GitCommit: de40ad0 root@RS1:~# # 查看docker更詳細(xì)的信息,包括鏡像和容器的數(shù)量 root@RS1:~# docker info Client:Context: defaultDebug Mode: falsePlugins:app: Docker App (Docker Inc., v0.9.1-beta3)buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)scan: Docker Scan (Docker Inc., v0.8.0)Server:Containers: 3Running: 0Paused: 0Stopped: 3Images: 4Server Version: 20.10.7Storage Driver: overlay2Backing Filesystem: extfsSupports d_type: trueNative Overlay Diff: trueuserxattr: falseLogging Driver: json-fileCgroup Driver: cgroupfsCgroup Version: 1Plugins:Volume: localNetwork: bridge host ipvlan macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslogSwarm: inactiveRuntimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runcDefault Runtime: runcInit Binary: docker-initcontainerd version: d71fcd7d8303cbf684402823e425e9dd2e99285drunc version: b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7init version: de40ad0Security Options:apparmorseccompProfile: defaultKernel Version: 4.15.0-143-genericOperating System: Ubuntu 18.04.4 LTSOSType: linuxArchitecture: x86_64CPUs: 4Total Memory: 1.946GiBName: RS1ID: 5RW4:7Z37:G2RU:BXH6:6U62:53TS:AIOQ:Z7C4:EHRQ:G5HV:VIRK:FGXYDocker Root Dir: /var/lib/dockerDebug Mode: falseRegistry: https://index.docker.io/v1/Labels:Experimental: falseInsecure Registries:127.0.0.0/8Live Restore Enabled: falseWARNING: No swap limit support root@RS1:~#
6.1 鏡像操作
"6.1.1 搜索鏡像" docker search 關(guān)鍵字 示例 # 通過搜索來過濾 # 搜索出來的鏡像就是STARS大于3000的 docker search mysql --filter=STARS=3000 #可以在 Docker Hub 網(wǎng)站查看鏡像的詳細(xì)信息,如鏡像的 tag 標(biāo)簽,OFFICIAL 為 [ok] 的是官方鏡像,可以放心使用。 示例 root@RS1:~# docker search nginx NAME DESCRIPTION STARS OFFICIAL AUTOMATED nginx Official build of Nginx. 15141 [OK] jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 2041 [OK] richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 816 [OK] jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho… 211 linuxserver/nginx An Nginx container, brought to you by LinuxS… 147 tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 132 [OK] jlesage/nginx-proxy-manager Docker container for Nginx Proxy Manager 122 [OK] alfg/nginx-rtmp NGINX, nginx-rtmp-module and FFmpeg from sou… 101 [OK] jasonrivers/nginx-rtmp Docker images to host RTMP streams using NGI… 91 [OK] nginxdemos/hello NGINX webserver that serves a simple page co… 70 [OK] privatebin/nginx-fpm-alpine PrivateBin running on an Nginx, php-fpm & Al… 56 [OK] nginx/nginx-ingress NGINX and NGINX Plus Ingress Controllers fo… 55 nginxinc/nginx-unprivileged Unprivileged NGINX Dockerfiles 42 staticfloat/nginx-certbot Opinionated setup for automatic TLS certs lo… 23 [OK] nginx/nginx-prometheus-exporter NGINX Prometheus Exporter for NGINX and NGIN… 19 schmunk42/nginx-redirect A very simple container to redirect HTTP tra… 19 [OK] centos/nginx-112-centos7 Platform for running nginx 1.12 or building … 15 centos/nginx-18-centos7 Platform for running nginx 1.8 or building n… 13 raulr/nginx-wordpress Nginx front-end for the official wordpress:f… 13 [OK] bitwarden/nginx The Bitwarden nginx web server acting as a r… 11 flashspys/nginx-static Super Lightweight Nginx Image 10 [OK] mailu/nginx Mailu nginx frontend 9 [OK] sophos/nginx-vts-exporter Simple server that scrapes Nginx vts stats a… 7 [OK] ansibleplaybookbundle/nginx-apb An APB to deploy NGINX 2 [OK] wodby/nginx Generic nginx 1 [OK] root@RS1:~# "6.1.2 下載鏡像" docker pull 鏡像名[:tag] [:tag] 表示軟件的版本,如果不指定 tag 默認(rèn)是 latest#示例:下載指定版本的 nginx root@RS1:~# docker pull nginx:1.14.1 1.14.1: Pulling from library/nginx a5a6f2f73cd8: Pull complete 2343eb083a4e: Pull complete 251439d5b33c: Pull complete Digest: sha256:32fdf92b4e986e109e4db0865758020cb0c3b70d6ba80d02fe87bad5cc3dc228 Status: Downloaded newer image for nginx:1.14.1 docker.io/library/nginx:1.14.1 root@RS1:~# #示例:下載最新版本的 redis # 如果不指定 tag 默認(rèn)是 latest root@RS1:~# docker pull redis Using default tag: latest latest: Pulling from library/redis b4d181a07f80: Pull complete 86e428f79bcb: Pull complete ba0d0a025810: Pull complete ba9292c6f77e: Pull complete b96c0d1da602: Pull complete 5e4b46455da3: Pull complete Digest: sha256:8b8d1c205e0149483f320ed234debaed7091f18b6c1d47bf1720951cd2161bfc Status: Downloaded newer image for redis:latest docker.io/library/redis:latest root@RS1:~# "6.1.3 上傳鏡像" #推送一個(gè)鏡像到鏡像倉庫 docker push 鏡像名[:tag] "6.1.4 查看鏡像" # 查看所有本地主機(jī)上的鏡像(活動(dòng)的) docker images # 列出所有的鏡像(包含非活動(dòng)) docker images -a # 只顯示鏡像的id docker images -q docker image ls(新版本docker) #示例 root@RS1:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE redis latest 08502081bff6 2 weeks ago 105MB hello-world latest d1165f221234 4 months ago 13.3kB nginx 1.14.1 5f2d4477b7ea 2 years ago 109MB root@RS1:~# "6.1.5 獲取鏡像的元信息(詳細(xì)信息)" docker inspect 鏡像名或鏡像ID docker image inspect 鏡像名或鏡像ID "6.1.6 刪除鏡像" docker rmi 鏡像ID或鏡像名[:tag] docker rmi -f 鏡像ID或鏡像名[:tag] # 刪除指定的本地鏡像,-f表示強(qiáng)制刪除 docker image rm 鏡像ID或鏡像名[:tag] #示例:刪除所有的鏡像 docker rmi -f $(docker images -aq) "6.1.7 prune" #移除未使用的鏡像,沒有被標(biāo)記或被任何容器引用的 docker image prune "6.1.8 歷史記錄" #查看鏡像的變更歷史 docker history 鏡像ID或鏡像名 #示例 [root@RS2 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 4cdc5dd7eaad 5 days ago 133MB [root@RS2 ~]# docker history nginx IMAGE CREATED CREATED BY SIZE COMMENT 4cdc5dd7eaad 5 days ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B <missing> 5 days ago /bin/sh -c #(nop) STOPSIGNAL SIGQUIT 0B <missing> 5 days ago /bin/sh -c #(nop) EXPOSE 80 0B <missing> 5 days ago /bin/sh -c #(nop) ENTRYPOINT ["/docker-entr… 0B <missing> 5 days ago /bin/sh -c #(nop) COPY file:09a214a3e07c919a… 4.61kB <missing> 5 days ago /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7… 1.04kB <missing> 5 days ago /bin/sh -c #(nop) COPY file:0b866ff3fc1ef5b0… 1.96kB <missing> 5 days ago /bin/sh -c #(nop) COPY file:65504f71f5855ca0… 1.2kB <missing> 5 days ago /bin/sh -c set -x && addgroup --system -… 63.9MB <missing> 5 days ago /bin/sh -c #(nop) ENV PKG_RELEASE=1~buster 0B <missing> 5 days ago /bin/sh -c #(nop) ENV NJS_VERSION=0.6.1 0B <missing> 5 days ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.21.1 0B <missing> 2 weeks ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B <missing> 2 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B <missing> 2 weeks ago /bin/sh -c #(nop) ADD file:4903a19c327468b0e… 69.3MB [root@RS2 ~]# "6.1.8 構(gòu)建鏡像" docker build -f Dockerfile文件的路徑 -t 鏡像名:tag 命令執(zhí)行的上下文 #示例:使用Dockerfile構(gòu)建鏡像 docker build -f Dockerfile -t harbor.test.com/os/tomcat:v1 . # 注意最后的點(diǎn)號(hào)不能省略 "6.1.9 設(shè)置鏡像標(biāo)簽" #創(chuàng)建一個(gè)引用源鏡像標(biāo)記目標(biāo)鏡像 docker tag tomcat:v1 harbor.test.com/os/tomcat:v1 "6.1.10 導(dǎo)出容器文件系統(tǒng)到tar歸檔文件” docker export "6.1.11 導(dǎo)入容器文件系統(tǒng)tar歸檔文件創(chuàng)建鏡像" docker import "6.1.12 保存鏡像" #保存一個(gè)或多個(gè)鏡像到一個(gè)tar歸檔文件(可應(yīng)用于無法聯(lián)網(wǎng)的機(jī)器) docker image save nginx |gzip >nginx.tar.gz "6.1.13 加載鏡像" #加載來自tar歸檔或標(biāo)準(zhǔn)輸入的鏡像(可應(yīng)用于無法聯(lián)網(wǎng)的機(jī)器) docker image load -i nginx.tar.gzdocker load < nginx.tar.gz
6.2 容器操作
"6.2.1 運(yùn)行容器" #示例:啟動(dòng)容器并以 bash 形式進(jìn)入 注意:有些容器沒有 bash 環(huán)境,需要使用 /bin/sh 或其他 shell 環(huán)境進(jìn)入 docker run -p 80:8080 -it --name webserver webserver:1.1 /bin/bash #示例:啟動(dòng)容器并在后臺(tái)運(yùn)行 docker run -p 80:8080 -itd --name webserver webserver:1.1 /bin/bash #示例:啟動(dòng)容器并在后臺(tái)運(yùn)行,并傳入指定參數(shù)(相當(dāng)于創(chuàng)建dockerfile的ENV) docker run \ -p 80:8080 \ --name webserver \ -e project_name="webserver" \ -d webserver:1.1 #示例:啟動(dòng)容器并在后臺(tái)運(yùn)行,并指定所在網(wǎng)絡(luò) docker run \ -p 80:8080 \ --name webserver \ --network myweb \ -d webserver:1.1 #示例:啟動(dòng)容器,并指定路徑映射 docker run \ -p 80:8080 \ --name webserver \ --network web_net \ -e project_name="webserver" \ -v /search/webserver/logs:/search/webserver/logs \ -itd webserver:1.1 /bin/bash #示例:啟動(dòng)容器,指定host網(wǎng)絡(luò)并指定路徑映射 docker run \ -p 80:8080 \ --name webserver \ --network host \ -e project_name="webserver" \ -v /search/webserver/logs:/search/webserver/logs \ -itd webserver:1.1 /bin/bash
參數(shù)說明
參數(shù) | 解釋 |
–name | 指定容器名,名稱自定義,如果不指定會(huì)自動(dòng)命名 |
–ip | 指定容器IP,只能用于自定義網(wǎng)絡(luò) |
-i | 以交互模式運(yùn)行,即以交互模式運(yùn)行容器,表示讓容器的標(biāo)準(zhǔn)輸入打開,不跟這個(gè)參數(shù)容器無法啟動(dòng) |
-t | 分配一個(gè)偽終端,即命令行,通常組合使用-it |
-p | 端口映射,將主機(jī)端口映射到容器內(nèi)的端口 -p 8080:8080 -p ip:主機(jī)端口:容器端口 -p 主機(jī)端口:容器端口 (常用) -p 容器端口 容器端口 |
-P | 發(fā)布容器所有 EXPOSE 的端口到宿主機(jī)隨機(jī)端口(docker history 容器ID或容器名) |
-d | 后臺(tái)運(yùn)行,即守護(hù)式運(yùn)行容器,并返回容器ID |
-e | 設(shè)置環(huán)境變量 |
-h | 設(shè)置容器主機(jī)名(hostname) |
-v | 指定掛載主機(jī)目錄到容器目錄,默認(rèn)為rw讀寫模式,ro表示只讀 |
–mount | 將文件系統(tǒng)附加到容器 |
–net | 指定網(wǎng)絡(luò)模型,默認(rèn)是橋接模式 |
–add-host master:172.22.16.13 | 寫/etc/hosts文件 |
–rm | 當(dāng)容器命令運(yùn)行結(jié)束后,自動(dòng)刪除容器,自動(dòng)釋放資源, |
–privileged | 特權(quán)模式,無特權(quán)模式在容器中很多命令無法運(yùn)行 |
–restart | 容器退出時(shí)重啟策略,默認(rèn)為no,可選值: 如果創(chuàng)建時(shí)未指定 ,可通過update命令設(shè)置: |
6.2.2 資源限制
"6.2.2.1 內(nèi)存限額" # 允許容器最多使用500M內(nèi)存和100M的Swap,并禁用OOM Killer docker run \ --name web1 \ -m 500m \ --memory-swap=600m \ --oom-kill-disable \ -d nginxdocker stats --no-stream web # 默認(rèn)情況下,上面兩組參數(shù)為 -1,即對容器內(nèi)存和 swap 的使用沒有限制。 "6.2.2.2 CPU限額" # 允許容器最多使用一個(gè)半的CPU docker run --name web1 --cpus="1.5" -d nginx # 允許容器最多使用50%的CPU docker run --name web2 --cpus=".5" -d nginx # 容器實(shí)例分配512權(quán)重的cpu使用資源 docker run -it --cpu-shares 512 centos /bin/bash/ # cat /sys/fs/cgroup/cpu/cpu.shares "6.2.2.3 I/O限額" # bps 是 byte per second,每秒讀寫的數(shù)據(jù)量。 # iops 是 io per second,每秒 IO 的次數(shù)。# 可通過以下參數(shù)控制容器的 bps 和 iops # 下面這個(gè)例子限制容器寫 /dev/sda 的速率為 30 MB/s docker run -it --device-write-bps /dev/sda:30MB ubuntu
參數(shù)說明
參數(shù) | 解釋 |
-m 200M | 設(shè)置內(nèi)存的使用限額,例如 100M, 2G。 |
–memory-swap | 允許交換到磁盤的內(nèi)存量 |
–memory-swappiness=<0-100> | 容器使用SWAP分區(qū)交換的百分比(默認(rèn)為-1) |
–oom-kill-disable | 禁用OOM Killer |
–vm 1 | 啟動(dòng) 1 個(gè)內(nèi)存工作線程。 |
–vm-bytes 280M | 每個(gè)線程分配 280M 內(nèi)存。 |
–cpus | 可以使用的CPU數(shù)量 |
–cpuset-cpus | 限制容器使用特定的CPU核心,如(0-3,0,1) |
-c, --cpu-shares 1024 | container_A 的 cpu share 1024,是 container_B 的兩倍。 |
–device-read-bps | 限制讀某個(gè)設(shè)備的 bps。 |
–device-write-bps | 限制寫某個(gè)設(shè)備的 bps。 |
–device-read-iops | 限制讀某個(gè)設(shè)備的 iops。 |
–device-write-iops | 限制寫某個(gè)設(shè)備的 iops。 |
6.2.3 查看容器
# 查看(運(yùn)行態(tài))容器 docker ps docker container ls # 查看(包含非運(yùn)行態(tài))容器 docker ps -a docker container ls -a # 只顯示容器 IDdocker ps -q # 顯示最近創(chuàng)建的容器 docker ps -a -n=1
參數(shù) | 解釋 |
-a | 顯示所有容器,包括非運(yùn)行態(tài)容器 |
-l | 獲得最新的容器信息 |
-q | 只顯示容器的ID |
-n=? | 顯示最近創(chuàng)建的容器 |
"6.2.4 啟動(dòng)容器" docker start 容器ID或容器名稱 #示例root@RS1:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0ee82d82570e nginx "/docker-entrypoint.…" 14 hours ago Exited (137) 14 hours ago wonderful_herschel 2e1e48cd50c7 nginx "/docker-entrypoint.…" 14 hours ago Exited (0) 14 hours ago adoring_bell 6e71462510b9 hello-world "/hello" 15 hours ago Exited (0) 15 hours ago priceless_dijkstra root@RS1:~# docker start 2e1e48cd50c7 2e1e48cd50c7 root@RS1:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2e1e48cd50c7 nginx "/docker-entrypoint.…" 14 hours ago Up 3 seconds 80/tcp adoring_bell root@RS1:~# "6.2.5 停止容器" #停止當(dāng)前正在運(yùn)行的容器 docker stop 容器ID或容器名稱 #示例:停止全部運(yùn)行中的容器 docker stop $(docker ps -q) "6.2.6 重啟容器" docker restart 容器ID或容器名稱 "6.2.7 kill 容器" #強(qiáng)制停止(殺死)當(dāng)前容器 docker kill 容器ID "6.2.8 刪除容器" # 刪除(非運(yùn)行)態(tài)容器 docker rm 容器ID docker rm 容器名稱 # 刪除(運(yùn)行態(tài)的)容器需要先將容器關(guān)閉 docker stop containerID docker rm containerID # 強(qiáng)制刪除容器(不管容器是否在運(yùn)行) docker rm -f containerID # -f:表示強(qiáng)制刪除 # 刪除所有(運(yùn)行和非運(yùn)行的)容器 docker rm -f $(docker ps -aq) # 刪除所有(運(yùn)行和非運(yùn)行的)容器 docker ps -a -q | xargs docker rm -f #示例:刪除所有(運(yùn)行和非運(yùn)行的)容器 [root@RS1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0ee82d82570e nginx "/docker-entrypoint.…" 15 hours ago Exited (137) 15 hours ago wonderful_herschel 2e1e48cd50c7 nginx "/docker-entrypoint.…" 15 hours ago Up 21 minutes 80/tcp adoring_bell 6e71462510b9 hello-world "/hello" 15 hours ago Exited (0) 15 hours ago priceless_dijkstra [root@RS1 ~]# docker rm -f $(docker ps -aq) 0ee82d82570e 2e1e48cd50c7 6e71462510b9 [root@RS1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@RS1 ~]# "6.2.9 容器日志" #獲取容器的日志(容器的ID可以寫全,也可以不寫全,唯一即可) docker logs 容器id或容器名稱 #示例 [root@slave4 ~]# docker run \ > --privileged \ > -p 6379:6379 \ > -p 16379:16379 \ > --name redis-node \ > -v /apps/redis/data:/data \ > -v /apps/redis/conf/redis.conf:/etc/redis/redis.conf \ > --net host \ > -d redis:5.0 \ > redis-server /etc/redis/redis.conf Unable to find image 'redis:5.0' locally 5.0: Pulling from library/redis bf5952930446: Pull complete 911b8422b695: Pull complete 093b947e0ade: Pull complete 2e4ea19ac656: Pull complete 62403d50d101: Pull complete 3a097fa7018a: Pull complete Digest: sha256:50e8ee4558b11cdc12b9a94497697190bc8d77e6c15aa6af045a64f6a68f5f48 Status: Downloaded newer image for redis:5.0 WARNING: Published ports are discarded when using host network mode 38e49f7a359ad6be30e9777e75656a664e1b323d37325bd8387cbe130a96d6d6 [root@slave4 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@slave4 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 38e49f7a359a redis:5.0 "docker-entrypoint.s…" About a minute ago Exited (1) About a minute ago redis-node [root@slave4 ~]# docker logs 38e49f7a359a*** FATAL CONFIG FILE ERROR *** Reading the configuration file, at line 11 >>> 'logfile /var/log/redis.log' Can't open the log file: Permission denied [root@slave4 ~]# #示例:查看指定時(shí)間后的日志,只顯示最后100行 docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID #示例:查看最近30分鐘的日志 docker logs --since 30m CONTAINER_ID #示例:查看某時(shí)間之后的日志 docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID #示例:查看某時(shí)間段日志 docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID "6.2.10 進(jìn)入容器" #進(jìn)入正在運(yùn)行的容器中并開啟一個(gè)交互模式的終端,可以在容器中執(zhí)行操作 docker exec 進(jìn)入容器后開啟一個(gè)新的終端,可以在里面操作(常用) docker exec -it 容器id或容器名稱 /bin/bash docker attach 進(jìn)入容器正在執(zhí)行的終端,不會(huì)啟動(dòng)新的進(jìn)程 docker attach 容器id或容器名稱 "6.2.11 拷貝文件" #將宿主機(jī)中的文件拷貝到容器中指定的目錄中 docker cp 主機(jī)中的文件路徑 容器ID或容器名稱:容器路徑 #將容器中的文件拷貝到宿主機(jī)的指定目錄中 docker cp 容器ID或容器名稱:容器中的路徑 主機(jī)路徑 #示例 docker cp web:/usr/local/tomcat/conf/server.xml /tmp "6.2.12 獲取容器的元信息(詳細(xì)信息,如IP地址等)" docker inspect 容器ID或容器名稱 #示例:查找配置文件"場景:今天發(fā)現(xiàn)一個(gè)報(bào)警,查找之后發(fā)現(xiàn)是 nginx 反向代理配置,而由于沒有交接,需要找出 nginx 配置文件在物理機(jī)中的部署位置,或者說,原來部署 docker 的詳細(xì)配置項(xiàng)"root@gz-manage16:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f508a5397ee9 nginx:1.15 "nginx -g 'daemon of…" 2 years ago Up 5 minutes 80/tcp, 0.0.0.0:9200->9200/tcp production_nginx root@gz-manage16:~# root@gz-manage16:~# docker inspect f508a5397ee9 [......"Mounts": [{"Type": "bind","Source": "/opt/es-stack-compose/nginx/nginx.conf","Destination": "/etc/nginx/nginx.conf","Mode": "rw","RW": true,"Propagation": "rprivate"},{"Type": "bind","Source": "/opt/es-stack-compose/nginx/logs","Destination": "/var/log/nginx","Mode": "rw","RW": true,"Propagation": "rprivate"},{"Type": "bind","Source": "/opt/es-stack-compose/nginx/conf.d","Destination": "/etc/nginx/conf.d","Mode": "rw","RW": true,"Propagation": "rprivate"}],...... ] "6.2.13 查看容器中進(jìn)程信息" docker top 容器ID或容器名稱 #示例[root@RS1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 713ad3324392 nginx "/docker-entrypoint.…" Less than a second ago Up Less than a second 0.0.0.0:83->80/tcp, :::83->80/tcp nginx-3 a04dfb342238 nginx "/docker-entrypoint.…" Less than a second ago Up Less than a second 0.0.0.0:82->80/tcp, :::82->80/tcp nginx-2 f6271f4335ef nginx "/docker-entrypoint.…" Less than a second ago Up Less than a second 0.0.0.0:81->80/tcp, :::81->80/tcp nginx-1 [root@RS1 ~]# docker top 713ad3324392 UID PID PPID C STIME TTY TIME CMD root 4059 4028 0 01:46 ? 00:00:00 nginx: master process nginx -g daemon off; systemd+ 4133 4059 0 01:46 ? 00:00:00 nginx: worker process systemd+ 4134 4059 0 01:46 ? 00:00:00 nginx: worker process systemd+ 4135 4059 0 01:46 ? 00:00:00 nginx: worker process systemd+ 4136 4059 0 01:46 ? 00:00:00 nginx: worker process [root@RS1 ~]# "6.2.14 列出或指定容器端口映射" docker port 容器ID或容器名稱 #示例 [root@RS1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 713ad3324392 nginx "/docker-entrypoint.…" Less than a second ago Up Less than a second 0.0.0.0:83->80/tcp, :::83->80/tcp nginx-3 a04dfb342238 nginx "/docker-entrypoint.…" Less than a second ago Up Less than a second 0.0.0.0:82->80/tcp, :::82->80/tcp nginx-2 f6271f4335ef nginx "/docker-entrypoint.…" Less than a second ago Up Less than a second 0.0.0.0:81->80/tcp, :::81->80/tcp nginx-1 [root@RS1 ~]# docker port 713ad3324392 80/tcp -> 0.0.0.0:83 80/tcp -> :::83 [root@RS1 ~]# "6.2.15 顯示容器資源使用統(tǒng)計(jì)" docker stats 容器ID或容器名稱 #示例[root@RS1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 713ad3324392 nginx "/docker-entrypoint.…" Less than a second ago Up Less than a second 0.0.0.0:83->80/tcp, :::83->80/tcp nginx-3 a04dfb342238 nginx "/docker-entrypoint.…" Less than a second ago Up Less than a second 0.0.0.0:82->80/tcp, :::82->80/tcp nginx-2 f6271f4335ef nginx "/docker-entrypoint.…" Less than a second ago Up Less than a second 0.0.0.0:81->80/tcp, :::81->80/tcp nginx-1 [root@RS1 ~]# docker stats f6271f4335ef CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS f6271f4335ef nginx-1 0.06% 43.3MiB / 1.946GiB 2.17% 9.79MB / 336kB 31.4MB / 14.6MB 5 CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS f6271f4335ef nginx-1 0.06% 43.3MiB / 1.946GiB 2.17% 9.79MB / 336kB 31.4MB / 14.6MB 5 ...... "6.2.16 暫停容器" docker pause 容器ID "6.2.17 取消暫停" docker unpause "6.2.18 容器重命名" docker rename 舊容器名 新容器名
6.3 示例:運(yùn)行 CentOS 鏡像
#下載鏡像創(chuàng)建容器docker search centos docker pull centos 交互式運(yùn)行容器(-it)# 根據(jù)centos:latest鏡像運(yùn)行容器,并以交互式模式進(jìn)入容器中,但exit退出之后,容器會(huì)自動(dòng)銷毀 docker run --name mycentos -it --net host centos:latest /bin/bash # 實(shí)際上是在Docker容器中運(yùn)行了一個(gè)精簡版的CentOS系統(tǒng) # 退出并關(guān)閉容器 exit # 退出不關(guān)閉容器 Ctrl + P + Q # 列出所有的容器 docker ps -a docker start mycentos docekr stop mycentos docker rm mycentos 強(qiáng)制刪除所有容器docker rm -f $(docker ps -aq) 2.守護(hù)式運(yùn)行容器(-d)根據(jù)centos:latest鏡像運(yùn)行容器,并以守護(hù)式運(yùn)行容器docker run --name mycentos --net host -d centos:latest 進(jìn)入正在運(yùn)行的容器中并開啟一個(gè)交互模式的終端,可以在容器中執(zhí)行操作(exit退出后容器不會(huì)銷毀)docker exec -it mycentos /bin/bash