什麼是docker?php
Docker是Docker.inc公司開源的一個基於LXC技術之上構建的Container容器引擎,源代碼託管在GitHub上,基於Go語言並聽從Apache2.0協議開源(能夠商業)。html
Docker項目的目標是實現輕量級的操做系統虛擬化解決方案。linux
Docker是經過內核虛擬化技術(namespaces及cgroups等)來提供容器的資源隔離與安全保障等。因爲Docker經過操做系統層的虛擬化實現隔離,因此Docker容器在運行時,不須要相似虛擬機VM額外的操做系統開銷,提升資源利用率。nginx
比較了Docker和傳統虛擬化方式的不一樣之處,可見容器是在操做系統層面上實現虛擬化,直接複製本地主機的操做系統,而傳統方式則是在硬件層面實現。web
Docker 內部面試
要理解 Docker 內部構建,須要理解如下三種部件:docker
Docker鏡像 - Docker p_w_picpathsshell
Docker倉庫 - Docker registeriesjson
Docker容器 - Docker containersvim
Docker 鏡像
Docker 鏡像是 Docker 容器運行時的只讀模板,每個鏡像由一系列的層 (layers) 組成。Docker 使用 UnionFS 來將這些層聯合到單獨的鏡像中。UnionFS 容許獨立文件系統中的文件和文件夾(稱之爲分支)被透明覆蓋,造成一個單獨連貫的文件系統。正由於有了這些層的存在,Docker是如此的輕量。當你改變了一個Docker 鏡像,好比升級到某個程序到新的版本,一個新的層會被建立。所以,不用替換整個原先的鏡像或者從新創建(在使用虛擬機的時候你可能會這麼作),只是一個新 的層被添加或升級了。如今你不用從新發布整個鏡像,只須要升級,層使得分發 Docker 鏡像變得簡單和快速。
Docker 倉庫
Docker 倉庫用來保存鏡像,能夠理解爲代碼控制中的代碼倉庫。一樣的,Docker 倉庫也有公有和私有的概念。公有的 Docker 倉庫名字是 Docker Hub。Docker Hub 提供了龐大的鏡像集合供使用。這些鏡像能夠是本身建立,或者在別人的鏡像基礎上建立。Docker 倉庫是 Docker 的分發部分。
Docker 容器
Docker 容器和文件夾很相似,一個Docker容器包含了全部的某個應用運行所須要的環境。每個 Docker 容器都是從 Docker 鏡像建立的。Docker 容器能夠運行、開始、中止、移動和刪除。每個 Docker 容器都是獨立和安全的應用平臺,Docker 容器是 Docker 的運行部分
學習Docker的源碼並非一個枯燥的過程,反而能夠從中理解Docker架構的設計原理。
Docker對使用者來說是一個C/S模式的架構,而Docker的後端是一個很是鬆耦合的架構,模塊各司其職,並有機組合,支撐Docker的運行。
用戶是使用DockerClient與Docker Daemon創建通訊,併發送請求給後者。
而Docker Daemon做爲Docker架構中的主體部分,首先提供Server的功能使其能夠接受Docker Client的請求;然後Engine執行Docker內部的一系列工做,每一項工做都是以一個Job的形式的存在。
Job的運行過程當中,當須要容器鏡像時,則從Docker Registry中下載鏡像,並經過鏡像管理驅動graphdriver將下載鏡像以Graph的形式存儲;當須要爲Docker建立網絡環境時,經過網絡管理驅動networkdriver建立並配置Docker容器網絡環境;當須要限制Docker容器運行資源或執行用戶指令等操做時,則經過execdriver來完成。而libcontainer是一項獨立的容器管理包,networkdriver以及execdriver都是經過libcontainer來實現具體對容器進行的操做。當執行完運行容器的命令後,一個實際的Docker容器就處於運行狀態,該容器擁有獨立的文件系統,獨立而且安全的運行環境等。
1、簡化配置,統一配置,經過鏡像快速啓動(Simplifying)
2、代碼流水線管理,開發環境->測試環境->預生產環境->灰度發佈->正式發佈,docker在這裏實現了快速遷移(Code Oioeline Management)
3、開發效率,對開發人員,有了鏡像,直接啓動容器便可(Developer Productivity)
4、應用隔離,相對於虛擬機的徹底隔離會佔用資源,docker會比較節約資源(App lsolation)
5、服務器整合,一臺服務器跑多個docker容器,提升服務器的利用率(Server Consolidation)
6、調試能力,debug調試(DebuggingCapabilties)
7、多租戶,一個租戶多個用戶,相似於阿里公有云的一個project下多個用戶(Multi-tenancy)
8、快速部署,不須要啓動操做系統,實現秒級部署(Rapid Deplovment)
1.共享基礎容器
2.共享捲開發容器
3.開發工具容器
4.不一樣環境下測試容器
5.構建容器
6.安裝容器
7.盒子中默認服務容器
8.基礎設施/粘合劑容器
1.容器不一樣於虛擬機
2.容器不如虛擬機來得成熟
3.容器能夠在幾分之一秒內啓動
4.容器已在大規模環境證實了自身的價值
5.IT人員稱容器爲輕量級
6.容器引起了安全問題
7.Docker已成爲容器的代名詞,但它不是惟一的提供者
8.容器能節省IT人力,加快更新
9.容器仍面臨一些沒有解決的問題
做爲一種新興的虛擬化方式,Docker跟傳統的虛擬化方式具備衆多的優點。
首先,Docker容器的啓動能夠在秒級實現,這相比傳統的虛擬機方式要快得多。其次,Docker對系統資源的利用率很低,一臺主機上能夠同時運行數千個Docker容器。
至於爲何要使用Docker:
1、技術儲備
相對大公司這個很是重要,若是大家都在用,他們不用就落後了,等到徹底成熟之後就跟不上了。
2、無技術棧和技術債
沒有任何Openstack或者saltstack,服務down了就down了,全部的服務都是鬆耦合。
3、跟上潮流(提高自我,裝逼)
面試的時候你們都會Docker,你不會是否是落後了。
4、符合當前業務
雖然Docker很優秀,可是,大多數處在第二種狀態,不多有符合本身的業務
● 面向產品:產品交付
● 面向開發:簡化環境配置
● 面向測試:多版本測試
● 面向運維:環境一致性
● 面向架構:自動化擴容(微服務)
對於開發和人員來講,最但願的就是一次建立和配置,能夠在任意地方正常運行。
開發者可使用一個標準的鏡像來構建一套開發容器,開發完成以後,運維人員能夠直接使用這個容器來部署代碼。Docker能夠快速建立容器,快速迭代應用程序,並讓整個過程全稱可見,使團隊中的其餘成員更容易理解應用程序是如何建立和工做。Docker容器很輕很快!容器的啓動時間是秒級的,大量第節約開發、測試、部署的時間。
Docker容器的運行不須要額外的Hypervisor支持,它是內核級的虛擬化,所以能夠實現更高的性能和效率。
Docker容器幾乎能夠字啊任意的平臺上運行,包括物理機、虛擬機、公有云、私有云、我的電腦、服務器等。這種兼容性可讓用戶把一個應用程序從一個平臺直接遷移到另一個。
使用Docker,只須要小小的修改,就能夠替代往大量的更新工做。全部的修改都以增量的方式被分發和更新,從而實現自動化而且高效的管理。
Docker與虛擬化
類別 |
Docker |
OpenStack |
結論 |
部署難度 |
很是簡單 |
組件多,部署複雜 |
由於平臺是對已有的線上生產環境進行改造,必須選擇侵入性較小的容器化技術 |
啓動速度 |
秒級 |
分鐘級 |
面對流量峯值,速度就是一切 |
執行性能 |
和物理系統幾乎一致 |
VM會佔用一些資源 |
微博核心業務對服務SLA要求很是苛刻 |
鏡像體積 |
鏡像是MB級別 |
虛擬機鏡像是GB級別 |
當集羣大規模部署時,體積小就表明更大的併發調度量 |
管理效率 |
管理簡單 |
組件相互依賴,管理複雜 |
生產系統集羣可控性是核心競爭力 |
隔離性 |
隔離性高 |
完全隔離 |
|
可管理性能 |
單進程、不建議啓動SSH |
完整的系統管理 |
|
網絡鏈接 |
比較弱 |
藉助Neutron能夠靈活組建各種網絡架構 |
Docker鏡像就是一個只讀的模板。
例如:一個鏡像能夠包含一個完整的CentOS操做系統環境,裏面僅安裝了Apache或用戶須要的其餘應用程序。
鏡像能夠用來建立Docker容器。
Docker提供了一個很簡單的機制來建立鏡像或者更新現有的鏡像,用戶甚至能夠直接從其餘人那裏下載一個已經作好的鏡像來直接使用。
Docker利用容器來運行應用。
容器是從鏡像建立的運行實例。它能夠被啓動、開始、中止、刪除。每一個容器都是相互隔離的,保證安全的平臺。
能夠把容器看作是一個簡易版的Linux環境(包括root用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序。
注意:鏡像是隻讀的,容器在啓動的時候建立一層可寫層做爲最上層。
倉庫是集中存放鏡像文件的場所。有時候把倉庫和倉庫註冊服務器(Registry)混爲一談,並不嚴格區分。實際上,倉庫註冊服務器上每每存放着多個倉庫,每一個倉庫中又包含了多個鏡像,每一個鏡像有不一樣的標籤(tag)。
倉庫分爲公開倉庫(Public)和私有倉庫(Private)兩種形式。
最大的公開倉庫是DockerHub,存放了數量龐大的鏡像供用戶下載。國內的公開倉庫包括Docker Pool等,能夠提供大陸用戶更穩定快讀的訪問。
當用戶建立了本身的鏡像以後就可使用push命令將它上傳到公有或者私有倉庫,這樣下載在另一臺機器上使用這個鏡像時候,只需須要從倉庫上pull下來就能夠了。
注意:Docker倉庫的概念跟Git相似,註冊服務器能夠理解爲GitHub這樣的託管服務。
系統環境
[root@docker~]# cat/etc/redhat-release #查看版本號
CentOSLinux release 7.2.1511 (Core)
[root@docker ~]# uname -r #查看Linux內核
c3.10.0-229.el7.x86_64
[root@docker ~]#yum install -y docker
#安裝docker(CentOS7系統CentOS-Extras庫中已帶Docker)
[root@docker~]#systemctlstart docker
#啓動docker
[root@docker~]#systemctlenable docker
#加入開機自啓動
[root@docker~]# dockerversion
#查看docker版本信息
Client:#docker客戶端版本信息
Version:1.8.2-el7.centos
API version:1.20
PackageVersion: docker-1.8.2-10.el7.centos.x86_64
Go version:go1.4.2
Git commit:a01dc02/1.8.2
Built:
OS/Arch:linux/amd64
Server:#docker服務端版本信息
Version:1.8.2-el7.centos
API version:1.20
PackageVersion:
Go version:go1.4.2
Git commit:a01dc02/1.8.2
Built:
OS/Arch:linux/amd6
Docker基礎命令
[root@docker~]# docker–help
Usage:docker [OPTIONS] COMMAND [arg…]
dockerdaemon [ –help | … ]
docker [–help | -v | –version ]
Aself-sufficient runtime for containers.
Options:
–config=~/.docker Location of client configfiles #客戶端配置文件的位置
-D, –debug=falseEnable debug mode #啓用Debug調試模式
-H, –host=[]Daemon socket(s) to connect to #守護進程的套接字(Socket)鏈接
-h, –help=falsePrint usage #打印使用
-l, –log-level=infoSet the logging level #設置日誌級別
–tls=false Use TLS; implied by –tlsverify #
–tlscacert=~/.docker/ca.pem Trust certssigned only by this CA #信任證書籤名CA
–tlscert=~/.docker/cert.pem Path to TLScertificate file #TLS證書文件路徑
–tlskey=~/.docker/key.pem Path to TLS keyfile #TLS密鑰文件路徑
–tlsverify=false Use TLS and verify theremote #使用TLS驗證遠程
-v, –version=falsePrint version information and quit #打印版本信息並退出
Commands:
attach Attach to a running container #當前shell下attach鏈接指定運行鏡像
build Build an p_w_picpath from a Dockerfile #經過Dockerfile定製鏡像
commit Create a new p_w_picpath from acontainer’s changes #提交當前容器爲新的鏡像
cp Copy files/folders from a container toa HOSTDIR or to STDOUT #從容器中拷貝指定文件或者目錄到宿主機中
create Create a new container #建立一個新的容器,同run 但不啓動容器
diff Inspect changes on a container’s filesystem #查看docker容器變化
events Get real time events from theserver #從docker服務獲取容器實時事件
exec Run a command in a running container#在已存在的容器上運行命令
export Export a container’s filesystem as a tar archive #導出容器的內容流做爲一個tar歸檔文件(對應import)
history Show the history of an p_w_picpath #展現一個鏡像造成歷史
p_w_picpaths List p_w_picpaths #列出系統當前鏡像
import Import the contents from a tarballto create a filesystem p_w_picpath #從tar包中的內容建立一個新的文件系統映像(對應export)
info Display system-wide information #顯示系統相關信息
inspect Return low-level information on acontainer or p_w_picpath #查看容器詳細信息
kill Kill a running container #kill指定docker容器
load Load an p_w_picpath from a tar archive orSTDIN #從一個tar包中加載一個鏡像(對應save)
login Register or log in to a Dockerregistry #註冊或者登錄一個docker源服務器
logout Log out from a Docker registry #從當前Docker registry退出
logs Fetch the logs of a container #輸出當前容器日誌信息
pause Pause all processes within acontainer #暫停容器
port List port mappings or a specificmapping for the CONTAINER #查看映射端口對應的容器內部源端口
ps List containers #列出容器列表
pull Pull an p_w_picpath or a repository from aregistry #從docker鏡像源服務器拉取指定鏡像或者庫鏡像
push Push an p_w_picpath or a repository to aregistry #推送指定鏡像或者庫鏡像至docker源服務器
rename Rename a container #重命名容器
restart Restart a running container #重啓運行的容器
rm Remove one or more containers #移除一個或者多個容器
rmi Remove one or more p_w_picpaths #移除一個或多個鏡像(無容器使用該鏡像才能夠刪除,不然須要刪除相關容器才能夠繼續或者-f強制刪除)
run Run a command in a new container #建立一個新的容器並運行一個命令
save Save an p_w_picpath(s) to a tar archive #保存一個鏡像爲一個tar包(對應load)
search Search the Docker Hub for p_w_picpaths #在docker hub中搜索鏡像
start Start one or more stoppedcontainers #啓動容器
stats Display a live stream ofcontainer(s) resource usage statistics #統計容器使用資源
stop Stop a running container #中止容器
tag Tag an p_w_picpath into a repository #給源中鏡像打標籤
top Display the running processes of acontainer #查看容器中運行的進程信息
unpause Unpause all processes within acontainer #取消暫停容器
version Show the Docker versioninformation #查看容器版本號
wait Block until a container stops, thenprint its exit code #截取容器中止時的退出狀態值
Run ‘docker COMMAND –help’ for moreinformation on a command.
#運行docker命令在幫助能夠獲取更多信息
第一步:下載yum安裝包
yum install docker -y
第二步:加入開機自啓動
第三步:更改配置文件
登陸阿里雲網站尋找鏡像地址
修改配置文件 在固定的行添加上--registry-mirror=https://2b2oi9ju.mirror.aliyuncs.com
vim /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target
Wants=docker-storage-setup.service
Requires=docker-cleanup.timer
[Service]
Type=notify
NotifyAccess=all
KillMode=process
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
Environment=GOTRACEBACK=crash
Environment=DOCKER_HTTP_HOST_COMPAT=1
Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
ExecStart=/usr/bin/dockerd-current --registry-mirror=https://2b2oi9ju.mirror.aliyuncs.com\
--add-runtimedocker-runc=/usr/libexec/docker/docker-runc-current \
--default-runtime=docker-runc \
--exec-opt native.cgroupdriver=systemd \
--userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
$OPTIONS\
$DOCKER_STORAGE_OPTIONS \
$DOCKER_NETWORK_OPTIONS \
$ADD_REGISTRY \
$BLOCK_REGISTRY \
$INSECURE_REGISTRY
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=0
Restart=on-abnormal
MountFlags=slave
[Install]
WantedBy=multi-user.target
第四步:
重啓一下
systemctl daemon-reload
第五步:
打開docker
systemctlstart docker
第六步:檢查docker狀態,是否打開成功
[root@centos7 ~]# systemctlstatus docker
● docker.service - Docker Application ContainerEngine
Loaded:loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset:disabled)
Active: active(running) since Fri 2017-07-14 09:15:30 CST; 5min ago
Docs:http://docs.docker.com
Main PID: 6093(dockerd-current)
CGroup:/system.slice/docker.service
├─6093 /usr/bin/dockerd-current --registry-mirror=http...
└─6097 /usr/bin/docker-containerd-current -l unix:///v...
Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
Jul 14 09:15:30 centos7 systemd[1]: Started DockerApplication C....
Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
Hint: Some lines were ellipsized, use -l to showin full.
下載alpine鏡像
docker pull alpine
查找 nginx 鏡像文件
[root@centos7 ~]# docker search nginx
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/nginx Officialbuild of Nginx. 6411 [OK]
docker.io docker.io/jwilder/nginx-proxy Automated Nginx reverseproxy for docker c... 1064 [OK]
docker.io docker.io/richarvey/nginx-php-fpm Container running Nginx +PHP-FPM capable ... 406 [OK]
docker.io docker.io/jrcs/letsencrypt-nginx-proxy-companion LetsEncrypt container to use with nginxas... 200 [OK]
docker.io docker.io/kong Open-sourceMicroservice & API Management ... 88 [OK]
docker.io docker.io/webdevops/php-nginx Nginx with PHP-FPM 85 [OK]
docker.io docker.io/bitnami/nginx Bitnami nginx DockerImage 30 [OK]
docker.io docker.io/linuxserver/nginx An Nginx container,brought to you by Linu... 20
docker.io docker.io/tutum/nginx Base Docker Image to runNginx server 10
docker.io docker.io/webdevops/nginx Nginx container 8 [OK]
docker.io docker.io/blacklabelops/nginx Dockerized Nginx ReverseProxy Server. 5 [OK]
docker.io docker.io/nginxdemos/nginx-ingress NGINX Ingress Controller forKubernetes 5
docker.io docker.io/1science/nginx Nginx Docker p_w_picpathsthat include Consul Te... 4 [OK]
docker.io docker.io/ixbox/nginx Nginx on AlpineLinux. 3 [OK]
docker.io docker.io/nvucinic/nginx Simple nginxp_w_picpath 3
docker.io docker.io/phpdockerio/nginx Note: p_w_picpath is nowdeprecated, here only t... 2 [OK]
docker.io docker.io/pebbletech/nginx-proxy nginx-proxy sets up acontainer running ng... 1 [OK]
docker.io docker.io/schmunk42/nginx Legacy nginxp_w_picpath 1
docker.io docker.io/xutongle/nginx nginx http 1 [OK]
docker.io docker.io/jenkler/nginx Docker Nginxpackage 0
docker.io docker.io/mailu/nginx Mailu nginxfrontend 0 [OK]
docker.io docker.io/tcaxias/nginx Nginx container toserver static content w... 0 [OK]
docker.io docker.io/travix/nginx NGinx reverseproxy 0 [OK]
docker.io docker.io/vukor/nginx Build for Nginx. Projectavailable on http... 0 [OK]
docker.io docker.io/watsco/nginx nginx:1.11-alpine 0 [OK]
下載nginx鏡像文件
docker pull nginx
查看本機下載好的鏡像
docker p_w_picpaths
導出操做
docker save nginx >/tmp/nginx.tar.gz
[root@centos7 ~]# cd /tmp/
[root@centos7 tmp]# ll
total 108608
-rw-r--r-- 1 root root 111210496 Jul 14 09:57 nginx.tar.gz
drwx------ 2 root root 6 Jul 14 09:15tmp.hB45j5rpnN
[root@centos7 tmp]# tar xf nginx.tar.gz
tar: manifest.json: implausibly old time stamp1970-01-01 08:00:00
tar: repositories: implausibly old time stamp1970-01-01 08:00:00
刪除鏡像的操做(能不用盡可能不用)
docker rmi nginx
導入鏡像的操做
docker load < /tmp/nginx.tar.gz
鏡像的常見操做五個操做步驟
1 搜索
2 下載
3 導入
4 導出
5 刪除
默認存儲的目錄/var/lib/docker/
更換存儲目錄
--graph=/opt/docker
dns服務
默認docker是採用宿主機的dns
能夠採用--dns=xxxx的方式制定
docker daemon --help 查看docker 的幫助
dockerrun alpine sh
(run = cleate+ start)
進入容器
dockerrun -it alpine sh
docker run- 運行一個容器
-t 分配一個(僞)tty(link is external)
-i 交互模式 (sowe can interact with it)
正在運行的容器有那些
docker ps
想要退出可是還想容器正在運行的方法
按住ctrl不放手,按一下p 按一下q 就行了。
顯示全部的容器(無論關閉仍是打開)
docker ps -a
[root@centos7 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a7da0cfb507 alpine "sh" 3minutes ago Exited (0) 3 minutesago reverent_darwin
a5059f339762 alpine "sh" 3minutes ago Exited (0) 3 minutesago compassionate_rosalind
28d29bfdbe90 alpine "sh" 5minutes ago Up 5 minutes condescending_chandrasekhar
805ae1d79c82 alpine "sh" 10 minutes ago Exited (0) 6 minutes ago elegant_ramanujan
5b0339fee0d8 alpine "sh" 10minutes ago Exited (0) 10 minutesago drunk_cori
073ab3b420bc alpine "sh" 10 minutes ago Exited (0) 10 minutes ago goofy_swirles
刪除容器(刪除前面-a查到的ID號就能夠)
docker rm 073ab3b420bc
正在運行的容器刪不了的話
docker rm -f ID號(加上-f強制刪除)
指定容器名進行建立容器
docker run -it --name mynginx nginx
inspect查看容器的詳細信息
docker inspect mynginx
--rm退出時自動進行刪除
docker run -it --rm --name mynginx nginx
進入容器進行操做的三種方式
方法一:
attach 不推薦
docker attcah 容器名/ID 這種實時操做,別的終端也能看見你操做的內容
方法二:
exec 比較推薦
docker exec -it 容器名/ID sh
優勢: 不會對其餘用戶有影響(操做層面)
第三種:
經過查看容器的空間進行進入
得先安裝 yum install util-linux命令
開兩個xshell窗口 一個執行下面的打開容器的命令
[root@centos7 docker]# docker run -it --rm --name mynginx nginx
另外一個編寫一個腳本
[root@centos7 ~]# cat docker_in.sh
#!/bin/bash
pid=`docker inspect --format"``.`State`.`Pid`" $1`
nsenter -t $pid -m -u -i -n -p
sh docker_in.sh 容器名/ID
這樣就進入了容器
後臺運行容器的操做命令
docker run -it -d --name mynginx nginx
查看當前訪問的日誌(只能查看最後一條)
docker logs mynginx
臨時開一終端,實時查看當前訪問的日誌
docker logs -f mynginx
殺死容器
docker kill xxx
關閉容器
docker stop xxx
-v 掛載
docker run -it --rm -v/opt/nginx:/usr/share/nginx/html -p80:80 nginx
刪除的話須要加v
docker rm -fv 容器名/ID
簡單的製做鏡像的方式
以centos爲基礎
先執行
docker pull centos
而後在run一個容器
docker run -it centos bash
就進入了容器
下載wget的yum源
cd /etc/yum.repos.d/
yum install wget -y
rm -rf *
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repohttp://mirrors.aliyun.com/repo/epel-7.repo
下載nginx 服務,由於咱們要作一個nginx鏡像
yum install nginx -y
下載完成後修改配置文件
vi /etc/nginx/nginx.conf
在user nginx;
添加 daemon off;
[root@d4bbca6b4a94 yum.repos.d]# cat/etc/nginx/nginx.conf
# For more information on configuration, see:
# *Official English Documentation: http://nginx.org/en/docs/
# *Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
daemon off;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
nginx -t檢查
在執行 nginx
若是卡的不動說明執行成功了。
docker commit --help 查看幫助
[root@centos7 ~]# docker commit --help
Usage: dockercommit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Create a new p_w_picpath from a container's changes
Options:
-a,--author string Author (e.g.,"John Hannibal Smith <hannibal@a-team.com>")
-c,--change value Apply Dockerfileinstruction to the created p_w_picpath (default [])
--help Print usage
-m,--message string Commit message
-p,--pause Pause container duringcommit (default true)
-a,做者字符串做者(例如,「John Hannibal Smith的」,「他的團隊」
-c——更改值將Dockerfile指令應用到建立的映像(默認)
——幫助打印使用
-m,消息字符串提交消息
-p,在提交期間暫停暫停容器(默認true)
容器製做鏡像的過程
添加鏡像
docker commit -m 'add nginx p_w_picpaths' 容器名/ID 鏡像名:TAG號(本身能夠添加)
docker commit -m 'add nginx p_w_picpaths' mynginx lsy/my_nginx:V1
檢查鏡像是否添加成功
添加完成後docker p_w_picpaths查看 是否添加成功
[root@centos7 ~]# docker commit -m 'add nginx p_w_picpaths'mynginx lsy/my_nginx:V1
sha256:5f22d143d7d83723af8025cbb0cbdc8fdb882cd2613a9594759957633402b12d
[root@centos7 ~]# docker p_w_picpaths
REPOSITORY TAG IMAGE ID CREATED SIZE
lsy/my_nginx V1 5f22d143d7d8 10 seconds ago 107.5 MB
docker.io/nginx latest e4e6d42c70b3 2 daysago 107.5 MB
docker.io/centos latest 36540f359ca3 8 daysago 192.5 MB
docker.io/alpine latest 7328f6f8b418 2 weeksago 3.962 MB
啓動本身作的鏡像
docker run -d --name 本身起名字鏡像的名字後面跟着執行的命令(默認沒有執行的命令)
docker run -d --name lsy_nginx lsy/my_nginx:V1 nginx
[root@centos7 ~]# docker run -d --name lsy_nginxlsy/my_nginx:V1 nginx
[root@centos7 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8624ad43cf1f lsy/my_nginx:V1 "nginx" 16 seconds ago Exited (0) 15 seconds ago lsy_nginx
57f7e7bb9bb3 nginx "nginx -g'daemon off" 23 minutes ago Up 23 minutes 80/tcp mynginx
d4bbca6b4a94 centos "bash" 41 minutes ago Up 41 minutes amazing_knuth
2fa04440346b centos "bash" 55 minutes ago Exited (0) 43minutes ago awesome_jones
083631b830a7 centos "bash" About an hour ago Exited (130)About an hour ago berserk_montalcini
上傳鏡像
[root@centos7 ~]# docker search lsy0109lsy
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/lsy0109lsy/lsy0109lsy 本身的鏡像 0
[root@centos7 ~]# docker search lsy0109lsy/lsy0109lsy
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/lsy0109lsy/lsy0109lsy 本身的鏡像 0
第一步
docker login
輸入帳號 密碼
第二步:
docker p_w_picpaths
獲取製做的鏡像的ID
第三步:
docker tag 鏡像的ID 後面跟本身在Docker Hub註冊的帳號的域名
第四步:
docker push後面跟本身在Docker Hub註冊的帳號的域名
這個時候就會上傳你的鏡像到網站
本身的操做過程記錄
docker login
輸入本身的帳戶和密碼
docker p_w_picpaths
docker tag lsy/my_nginx:V1 docker.io/lsy0109lsy/my_nginx
docker push docker.io/lsy0109lsy/my_nginx
[root@centos7 ~]# docker pushdocker.io/lsy0109lsy/my_nginx
The push refers to a repository[docker.io/lsy0109lsy/my_nginx]
0cb915ddfd19: Layer already exists
473c450db44d: Layer already exists
57842ac5be45: Layer already exists
54522c622682: Layer already exists
latest: digest:sha256:0a07f792e691c9356fdbe01b31091ec5ef7fb92130b0cc0a06b7d15be8652965 size:1155
先執行把容器上傳到鏡像
docker commit -m "add new nginx dockerp_w_picpaths" my_nginx lsy/nginx:V1
查看鏡像是否上傳成功,並記錄一下ID號下面訪問的時候會用到
[root@docker1 ~]# docker p_w_picpaths
REPOSITORY TAG IMAGE ID CREATED SIZE
lsy/nginx V1 f4a4e312ac8d 4 minutes ago 381.8 MB
docker.io/centos latest 36540f359ca3 10 days ago 192.5 MB
docker.io/alpine latest 7328f6f8b418 2 weeks ago 3.962 MB
在訪問 鏡像的nginx服務
docker run -p 80:80 --name nginx --rm f4a4e312ac8dnginx
打開網頁看是否顯示(輸入主機的IP地址)
類別 |
Docker |
Openstack |
部署難度 |
很是簡單 |
組件多,部署複雜 |
啓動速度 |
秒級 |
分鐘級 |
執行性能 |
和物理系統幾乎一致 |
VM會佔用一些資源 |
鏡像體積 |
鏡像是MB級別 |
虛擬機鏡像GB級別 |
管理效率 |
管理簡單 |
組件相互依賴,管理複雜 |
隔離性 |
隔離性高 |
完全隔離 |
可管理性 |
單進程 |
完整的系統管理 |
網絡鏈接 |
比較弱 |
藉助Neutron能夠靈活組件各種網絡架構 |