docker簡介和基礎命令

一、Docker 概述 

        Docker 是一個開源項目,誕生於 2013 年初,最初是 dotCloud 公司內部的一個業餘項目。它基於 Google 公司推出的 Go 語言實現。 項目後來加入了 Linux 基金會,遵從了 Apache 2.0 協議,項目代碼在 GitHub 上進行維護。Docker 自開源後受到廣泛的關注和討論, 以至於 dotCloud 公司後來都改名爲 Docker Inc。Redhat 已經在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 產品中廣泛應用。Docker 項目的目標是實現輕量級的操作系統虛擬化解決方案。 Docker 的基礎是 Linux 容器(LXC)等技術。在 LXC 的基礎上 Docker 進行了進一步的封裝,讓用戶不需要去關心容器的管理,使得操作更爲簡便。用戶操作 Docker 的容器就像操作一個快速輕量級的虛擬機一樣簡單。

 QQ%E6%88%AA%E5%9B%BE20170504090805.png?v

左邊傳統的虛擬化技術,底層是服務器硬件,硬件上運行宿主機的操作系統,在宿主機

的操作系統之上,虛擬化出虛擬硬件設備,在虛擬硬件之上運行虛擬化操作系統,再在虛擬

的操作系統之上運行應用服務。而中間這段,虛擬化出來的操作系統大大佔用了服務器的硬

件資源。而容器虛擬化技術就不同了,我們看一下右邊這張圖。在底層硬件上運行宿主機操作系

統,在宿主機上運行docker 引擎,無需虛擬化硬件,也不用操作系統,而是直接運行容器,

提供所需的應用服務,大大減降低了服務器資源的佔用。

二、Docker 的優點 

1、快速的交付和部署

2、更高效的虛擬化

3、更輕鬆的遷移和擴展

4、簡單的管理

QQ%E6%88%AA%E5%9B%BE20170504091204.png?v

三、Docker 的基本概念

1、鏡像(Image) Docker 鏡像就是一個只讀的模板。例如:一個鏡像可以包含一個完整的 ubuntu 操作系統環境,裏面僅安裝了 Apache 或用戶需要的其它應用程序。 鏡像可以用來創建 Docker 容器。Docker 提供了一個很簡單的機制來創建鏡像或者更新現有的鏡像,用戶甚至可以直接從其他人那裏下載一個已經做好的鏡像來直接使用。

2、容器(Container) Docker 利用容器來運行應用。容器是從鏡像創建的運行實例。它可以被啓動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺。可以把容器看做是一個簡易版的 Linux 環境(包括root 用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序。 *注:鏡像是隻讀的,容器在啓動的時候創建一層可寫層作爲最上層。

3、倉庫(Repository)

倉庫是集中存放鏡像文件的場所。有時候會把倉庫和倉庫註冊服務器(Registry)混爲一談,並不嚴格區分。實際上,倉庫註冊服務器上往往存放着多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標籤(tag)。倉庫分爲公開倉庫(Public)和私有倉庫(Private) 兩種形式。最大的公開倉庫是 Docker Hub,存放了數量龐大的鏡像供用戶下載。 國內的公開倉庫包括 Docker Pool 等,可以提供大陸用戶更穩定快速的訪問。當然,用戶也可以在本地網絡內創建一個私有倉庫。當用戶創建了自己的鏡像之後就可以使用 push 命令將它上傳到公有或者私有倉庫,這樣下次在另外一臺機器上使用這個鏡像時候,只需要從倉庫上 pull 下來就可以了。 *注:Docker 倉庫的概念跟 Git 類似,註冊服務器可以理解爲 GitHub 這樣的託管服務。

四、Docker 基礎命令

1、docker search //從Docker Hub 搜索鏡像

用法: docker search TERM

參數:

--automated=false 僅顯示自動創建的鏡像

--no-trunc=false 輸出信息不截斷顯示

-s, --stars=0 指定僅顯示評價爲指定星級以上的鏡像

QQ%E6%88%AA%E5%9B%BE20170504091333.png?v

[root@docker ~]# docker search -s 500 nginx //搜索星級爲500 以上的鏡像

 

 QQ%E6%88%AA%E5%9B%BE20170504091456.png?v

2、docker info //查看當前信息

[root@docker ~]# docker info 

 QQ%E6%88%AA%E5%9B%BE20170504092032.png?v

3、docker pull //下載鏡像

  [root@docker ~]# docker pull amber/nginx 

4、docker push //上傳鏡像  

[root@docker ~]# docker push amber/nginx  

5、cat 本地容器快照名 |docker import - 自定義容器名:自定義標記名 //導入本地容器快照  

6、docker run //運行一個容器,-i 交互式,-t 獲得一個終端,-d 守護進程形式運行 

 [root@docker ~]# docker run -it centos:1 /bin/bash 

[root@fcbe47db440d /]# 

[root@docker ~]# docker run -d centos:1 /bin/bash -c "while :; do echo hello; sleep 2; done" 

b21e687d0719cb36c89a4325808bc03d42918ef51176235e9dfc50c57094236b 

[root@docker ~]# docker ps 

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES 

b21e687d0719        centos:1            "/bin/bash -c 'while "   About a minute ago   Up About a minute                       high_brahmagupta 

7、退出容器  

exit 或 ctrl + d //退出並停止容器  

(2)先按ctrl + p 再按 ctrl + q //退出僞終端,容器後臺運行  

[root@docker ~]# docker run -it centos:1 /bin/bash 

[root@353fc6f27cb7 /]#ctrl +p ; ctrl+q [root@docker ~]#  

[root@docker ~]# docker ps 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES 

353fc6f27cb7        centos:1            "/bin/bash"              49 seconds ago      Up 48 seconds                           berserk_einstein 

b21e687d0719        centos:1            "/bin/bash -c 'while "   5 minutes ago       Up 5 minutes                            high_brahmagupta 

[root@docker ~]# docker attach 353   //輸入容器ID,若沒有重名的,輸入第一個字母即 

[root@353fc6f27cb7 /]#  

8、docker ps  //查看容器,-a 查看所有容器,-q 只查看容器ID 

[root@docker ~]# docker ps 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES 

b21e687d0719        centos:1            "/bin/bash -c 'while "   11 minutes ago      Up 11 minutes                           high_brahmagupta 

[root@docker ~]# docker ps -a 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES 

353fc6f27cb7        centos:1            "/bin/bash"              18 minutes ago      Exited (127) 11 minutes ago                       berserk_einstein 

b21e687d0719        centos:1            "/bin/bash -c 'while "   23 minutes ago      Up 23 minutes                                     high_brahmagupta 

fcbe47db440d        centos:1            "/bin/bash"              26 minutes ago      Exited (127) 23 minutes ago                       nauseous_franklin 

9、docker rm //刪除一個容器

 [root@docker ~]# docker ps -a 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES 

353fc6f27cb7        centos:1            "/bin/bash"              20 minutes ago      Exited (127) 12 minutes ago                       berserk_einstein 

b21e687d0719        centos:1            "/bin/bash -c 'while "   24 minutes ago      Up 24 minutes                                     high_brahmagupta 

fcbe47db440d        centos:1            "/bin/bash"              27 minutes ago      Exited (127) 24 minutes ago                       nauseous_franklin 

[root@docker ~]# docker rm -f b21 

b21 

[root@docker ~]# docker rm -f f 

f 

[root@docker ~]# docker rm -f 353 

353 

[root@docker ~]# docker ps -a 

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES 

10、docker rmi //刪除一個或多個鏡像,-f 強制刪除  

[root@docker ~]# docker p_w_picpaths 

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 

centos              1                   51f7df51ca40        30 minutes ago      196.7 MB 

docker.io/nginx     latest              db079554b4d2        32 hours ago        181.8 MB 

[root@docker ~]# docker rmi docker.io/nginx 

Untagged: docker.io/nginx:latest 

Untagged: docker.io/nginx@sha256:4296639ebdf92f035abf95fee1330449e65990223c899838283c9844b1aaac4c 

[root@docker ~]# docker p_w_picpaths 

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 

centos              1                   51f7df51ca40        32 minutes ago      196.7 MB 

11、docker create //創建一個容器,但不運行  

[root@docker ~]# docker p_w_picpaths 

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 

centos              1                   385c6554f48e        19 seconds ago      196.7 MB 

[root@docker ~]# docker create -it centos:1 /bin/bash 

9bace61c06b5c4539e4d8668a04ff2762cf5aaad13731d3c2ac6b99d1e3cb517 

[root@docker ~]# docker ps -a 

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES 

9bace61c06b5        centos:1            "/bin/bash"         12 seconds ago      Created                                 drunk_payne 

12、docker start|stop|restart|kill //運行已停止的容器|停止一個正在運行的容器|重啓 

一個容器|殺死一個正在運行的容器 

[root@docker ~]# docker start 9ba 

9ba 

[root@docker ~]# docker ps 

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES 

9bace61c06b5        centos:1            "/bin/bash"         About a minute ago   Up 9 seconds                            drunk_payne 

[root@docker ~]# docker stop 9ba 

9ba 

[root@docker ~]# docker ps 

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES 

[root@docker ~]# docker start 9ba 

9ba 

[root@docker ~]# docker kill 9ba 

9ba 

[root@docker ~]# docker ps -a 

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES 

9bace61c06b5        centos:1            "/bin/bash"         4 minutes ago       Exited (137) 8 seconds ago                       drunk_payne 

13、docker save |load //存儲鏡像|載入鏡像  

[root@docker ~]# docker p_w_picpaths 

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 

centos              1                   385c6554f48e        6 minutes ago       196.7 MB 

[root@docker ~]# docker save -o centos.tar centos:1 

[root@docker ~]# ls 

anaconda-ks.cfg  centos.tar  mysql5.tar  nginx.tar  tomcat.tar 

[root@docker ~]# docker rmi -f centos:1 

Untagged: centos:1 

Deleted: sha256:385c6554f48e0aaa488fd905e2f70b579ba47c98a9d4d44bf0235e0a8e3141ff 

[root@docker ~]# docker p_w_picpaths 

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 

[root@docker ~]# docker load < centos.tar  

Loaded p_w_picpath: centos:1 

[root@docker ~]# docker p_w_picpaths 

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 

centos              1                   385c6554f48e        15 minutes ago      196.7 MB 

[root@docker ~]#  

14、docker export //導出容器快照  

[root@docker ~]# docker run -it centos:1 /bin/bash 

[root@42a1ab757ffd /]# touch aaa 

[root@42a1ab757ffd /]# ls 

aaa                bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var 

anaconda-post.log  dev  home  lib64  media       opt  root  sbin  sys  usr 

[root@42a1ab757ffd /]# exit 

exit 

[root@docker ~]# docker ps -a 

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES 

42a1ab757ffd        centos:1            "/bin/bash"         45 seconds ago      Exited (0) 29 seconds ago                         nauseous_varahamihira 

9bace61c06b5        centos:1            "/bin/bash"         17 minutes ago      Exited (137) 13 minutes ago                       drunk_payne 

[root@docker ~]# docker export -o centos-aaa.tar 42a 

[root@docker ~]# ls 

anaconda-ks.cfg  centos-aaa.tar  centos.tar  mysql5.tar  nginx.tar  tomcat.tar 

[root@docker ~]# cat centos-aaa.tar |docker import - centos-aaa 

sha256:99e1653378ed127eaeb8dd531fc7b4b5fc17b8bf095d9deeec5246f368dc4dcf 

[root@docker ~]# docker p_w_picpaths 

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 

centos-aaa          latest              99e1653378ed        13 seconds ago      196.7 MB 

centos              1                   385c6554f48e        21 minutes ago      196.7 MB 

[root@docker ~]# docker run -it centos-aaa /bin/bash 

[root@0dcb3999062c /]# ls 

aaa                bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var 

anaconda-post.log  dev  home  lib64  media       opt  root  sbin  sys  usr 

 五、創建私有倉庫 

倉庫(Repository)是集中存放鏡像的地方。 

註冊服務器纔是存放倉庫具體的服務器(Registry),每個服務器上都可以放置多個倉庫, 

而每個倉庫下可以放置多個鏡像,每個鏡像上可以運行多個容器,每個容器上可以跑一個應 

用或應用組。 

倉庫自身可以分爲:公共倉庫和私有倉庫 

比如共有倉庫: http://hub.docker.com 或國內的: dl.dockerpool.com 

安裝docker 後,可以通過官方提供的registry 鏡像來簡單搭建一套本地倉庫環境  

[root@docker ~]# vi /etc/sysconfig/docker 

# INSECURE_REGISTRY='--insecure-registry' 

INSECURE_REGISTRY='--insecure-registry 192.168.10.130:5000' 

[root@docker ~]# systemctl restart docker.service 

方法一:

QQ%E6%88%AA%E5%9B%BE20170504092532.png?v

方法二:  

[root@docker ~]# mkdir -pv /opt/data/registry  

mkdir: 已創建目錄 "/opt/data" mkdir:  

已創建目錄 "/opt/data/registry"  

[root@docker ~]# docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry 通過這種方式可以將上傳的鏡像放到本地的: /opt/data/registry  

 

[root@docker ~]# docker ps -a 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES 

bb09700272a6        registry            "/entrypoint.sh /etc/"   5 minutes ago       Exited (2) 25 seconds ago                       jovial_poitras 

[root@docker ~]# docker start bb0 

bb0 

[root@docker ~]# docker ps 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES 

bb09700272a6        registry            "/entrypoint.sh /etc/"   3 minutes ago       Up 3 minutes        0.0.0.0:5000->5000/tcp   jovial_poitras 

 QQ%E6%88%AA%E5%9B%BE20170504092707.png?v

 root@19bd142b0566:/# 192.168.10.160 - - [17/Feb/2017:10:22:06 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)" "-" 

 

按ctrl+p 再按ctrl+q,使服務保持後臺運行  

[root@docker ~]# docker ps 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                           NAMES 

19bd142b0566        nginx               "/bin/bash"              12 minutes ago      Up 12 minutes       443/tcp, 0.0.0.0:5500->80/tcp   adoring_ardinghelli 

bb09700272a6        registry            "/entrypoint.sh /etc/"   23 minutes ago      Up 18 minutes       0.0.0.0:5000->5000/tcp          jovial_poitras 

 

[root@docker ~]# docker tag nginx 192.168.10.130:5000/nginx-test   //將修改過的nginx 鏡 

像做標記封裝,準備上傳到私有倉庫 

[root@docker ~]# docker p_w_picpaths 

REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE 

centos-aaa                       latest              99e1653378ed        31 minutes ago      196.7 MB 

centos                           1                   385c6554f48e        53 minutes ago      196.7 MB 

docker.io/nginx                  latest              db079554b4d2        33 hours ago        181.8 MB 

192.168.10.130:5000/nginx-test   latest              db079554b4d2        33 hours ago        181.8 MB 

docker.io/registry               latest              d1e32b95d8e8        4 weeks ago         33.17 MB 

[root@docker ~]# docker push 192.168.10.130:5000/nginx-test   //上傳到私有倉庫  

The push refers to a repository [192.168.10.130:5000/nginx-test] 

a82b6c66a6d4: Pushed  

1941ca4a7a84: Pushed  

a2ae92ffcd29: Pushed  

latest: digest: sha256:9e81e4ce4899448e5e7aea69a72dfd1df989a7a0fe7365ad63be1133f05acf10 size: 948 

另外打開一臺機器裝好docker  

[root@docker-2 ~]# docker pull 192.168.10.131:5000/nginx-test //從私有倉庫下載鏡像  

略。。。 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章