docker講解和命令彙總

                            docker

 什麼是docker?php

DockerDocker.inc公司開源的一個基於LXC技術之上構建的Container容器引擎,源代碼託管在GitHub上,基於Go語言並聽從Apache2.0協議開源(能夠商業)。html

 

Docker項目的目標是實現輕量級的操做系統虛擬化解決方案。linux

 

Docker是經過內核虛擬化技術(namespacescgroups等)來提供容器的資源隔離與安全保障等。因爲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 HubDocker Hub 提供了龐大的鏡像集合供使用。這些鏡像能夠是本身建立,或者在別人的鏡像基礎上建立。Docker 倉庫是 Docker 的分發部分。

 

Docker 容器

Docker 容器和文件夾很相似,一個Docker容器包含了全部的某個應用運行所須要的環境。每個 Docker 容器都是從 Docker 鏡像建立的。Docker 容器能夠運行、開始、中止、移動和刪除。每個 Docker 容器都是獨立和安全的應用平臺,Docker 容器是 Docker 的運行部分

 

                          Docker的工做模式

學習Docker的源碼並非一個枯燥的過程,反而能夠從中理解Docker架構的設計原理。

 

Docker對使用者來說是一個C/S模式的架構,而Docker的後端是一個很是鬆耦合的架構,模塊各司其職,並有機組合,支撐Docker的運行。

 

用戶是使用DockerClientDocker 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容器就處於運行狀態,該容器擁有獨立的文件系統,獨立而且安全的運行環境等。


 

                         Dcoerk八中應用場景

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)

 

                       Docker八種開發模式

1.共享基礎容器

2.共享捲開發容器

3.開發工具容器

4.不一樣環境下測試容器

5.構建容器

6.安裝容器

7.盒子中默認服務容器

8.基礎設施/粘合劑容器

 

                           Docker九個基本事實

1.容器不一樣於虛擬機

2.容器不如虛擬機來得成熟

3.容器能夠在幾分之一秒內啓動

4.容器已在大規模環境證實了自身的價值

5.IT人員稱容器爲輕量級

6.容器引起了安全問題

7.Docker已成爲容器的代名詞,但它不是惟一的提供者

8.容器能節省IT人力,加快更新

9.容器仍面臨一些沒有解決的問題

 

使用Docker理由

做爲一種新興的虛擬化方式,Docker跟傳統的虛擬化方式具備衆多的優點。

 

首先,Docker容器的啓動能夠在秒級實現,這相比傳統的虛擬機方式要快得多。其次,Docker對系統資源的利用率很低,一臺主機上能夠同時運行數千個Docker容器。

 

至於爲何要使用Docker

1、技術儲備

相對大公司這個很是重要,若是大家都在用,他們不用就落後了,等到徹底成熟之後就跟不上了。

2、無技術棧和技術債

沒有任何Openstack或者saltstack,服務down了就down,全部的服務都是鬆耦合。

3、跟上潮流(提高自我,裝逼)

面試的時候你們都會Docker,你不會是否是落後了。

4、符合當前業務

雖然Docker很優秀,可是,大多數處在第二種狀態,不多有符合本身的業務

 

 

                        Docker改變了什麼

面向產品:產品交付

● 面向開發:簡化環境配置

● 面向測試:多版本測試

● 面向運維:環境一致性

● 面向架構:自動化擴容(微服務)

Docker更快速的交付和部署

對於開發和人員來講,最但願的就是一次建立和配置,能夠在任意地方正常運行。

 

開發者可使用一個標準的鏡像來構建一套開發容器,開發完成以後,運維人員能夠直接使用這個容器來部署代碼。Docker能夠快速建立容器,快速迭代應用程序,並讓整個過程全稱可見,使團隊中的其餘成員更容易理解應用程序是如何建立和工做。Docker容器很輕很快!容器的啓動時間是秒級的,大量第節約開發、測試、部署的時間。

 

Docker更高效的虛擬化

Docker容器的運行不須要額外的Hypervisor支持,它是內核級的虛擬化,所以能夠實現更高的性能和效率。

 

Docker更輕鬆的遷移和擴展

Docker容器幾乎能夠字啊任意的平臺上運行,包括物理機、虛擬機、公有云、私有云、我的電腦、服務器等。這種兼容性可讓用戶把一個應用程序從一個平臺直接遷移到另一個。

 

Docker更簡單的管理

使用Docker,只須要小小的修改,就能夠替代往大量的更新工做。全部的修改都以增量的方式被分發和更新,從而實現自動化而且高效的管理。

 

Docker與虛擬化

Docker與虛擬化

類別

Docker

OpenStack

結論

部署難度

很是簡單

組件多,部署複雜

由於平臺是對已有的線上生產環境進行改造,必須選擇侵入性較小的容器化技術

啓動速度

秒級

分鐘級

面對流量峯值,速度就是一切

執行性能

和物理系統幾乎一致

VM會佔用一些資源

微博核心業務對服務SLA要求很是苛刻

鏡像體積

鏡像是MB級別

虛擬機鏡像是GB級別

當集羣大規模部署時,體積小就表明更大的併發調度量

管理效率

管理簡單

組件相互依賴,管理複雜

生產系統集羣可控性是核心競爭力

隔離性

隔離性高

完全隔離


可管理性能

單進程、不建議啓動SSH

完整的系統管理


網絡鏈接

比較弱

藉助Neutron能夠靈活組建各種網絡架構


 

Docker三大核心概念

Docker鏡像(p_w_picpath)

Docker鏡像就是一個只讀的模板。

 

例如:一個鏡像能夠包含一個完整的CentOS操做系統環境,裏面僅安裝了Apache或用戶須要的其餘應用程序。

 

鏡像能夠用來建立Docker容器。

 

Docker提供了一個很簡單的機制來建立鏡像或者更新現有的鏡像,用戶甚至能夠直接從其餘人那裏下載一個已經作好的鏡像來直接使用。

 

Docker容器(container)

Docker利用容器來運行應用。

 

容器是從鏡像建立的運行實例。它能夠被啓動、開始、中止、刪除。每一個容器都是相互隔離的,保證安全的平臺。

 

能夠把容器看作是一個簡易版的Linux環境(包括root用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序。

 

注意:鏡像是隻讀的,容器在啓動的時候建立一層可寫層做爲最上層。

 

Docker倉庫(repository)

倉庫是集中存放鏡像文件的場所。有時候把倉庫和倉庫註冊服務器(Registry)混爲一談,並不嚴格區分。實際上,倉庫註冊服務器上每每存放着多個倉庫,每一個倉庫中又包含了多個鏡像,每一個鏡像有不一樣的標籤(tag)

 

倉庫分爲公開倉庫(Public)和私有倉庫(Private)兩種形式。

 

最大的公開倉庫是DockerHub,存放了數量龐大的鏡像供用戶下載。國內的公開倉庫包括Docker Pool等,能夠提供大陸用戶更穩定快讀的訪問。

 

當用戶建立了本身的鏡像以後就可使用push命令將它上傳到公有或者私有倉庫,這樣下載在另一臺機器上使用這個鏡像時候,只需須要從倉庫上pull下來就能夠了。

 

注意:Docker倉庫的概念跟Git相似,註冊服務器能夠理解爲GitHub這樣的託管服務。

 

                   Docker企業實戰

系統環境

[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命令在幫助能夠獲取更多信息

 

 

安裝docker

第一步:下載yum安裝包

yum install docker -y

第二步:加入開機自啓動

systemctl enable docker

 

第三步:更改配置文件

登陸阿里雲網站尋找鏡像地址

https://cr.console.aliyun.com

修改配置文件 在固定的行添加上--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

 

docker 鏡像製做

簡單的製做鏡像的方式

centos爲基礎

先執行

docker pull centos

而後在run一個容器

docker run -it centos bash

就進入了容器

 

下載wgetyum

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能夠靈活組件各種網絡架構

相關文章
相關標籤/搜索