docker --- (入門必讀)

docker簡介

  • Docker 是一個開源的應用容器引擎,讓開發者能夠打包他們的應用以及依賴包到一個可移植的鏡像中,而後發佈到任何流行的 Linux或Windows 機器上,也能夠實現虛擬化。容器是徹底使用沙箱機制,相互之間不會有任何接口。
  • Docker 屬於 Linux 容器的一種封裝,提供簡單易用的容器使用接口。它是目前最流行的 Linux 容器解決方案。
  • Docker 使用客戶端-服務器 (C/S) 架構模式:
    Docker 命令行工具,是用戶使用Docker的主要方式,Docker client與Docker daemon通訊並將結果返回給用戶,Docker client也能夠經過socket或者RESTful api訪問遠程的Docker daemon
  • LXC (Linux Container)容器是一種內核虛擬化技術,能夠提供輕量級的虛擬化,以便隔離進程和資源。
  • docker底層語言爲go語言

相關網站

Docker官網:https://www.docker.com/
Docker hub :https://hub.docker.com/html

docker 與傳統虛擬化方式優缺點比較---優勢

特性 Docker 傳統虛擬化技術(KVM)
啓動速度 很是快(秒級) 慢(分鐘級)
磁盤使用(模板文件) 小(MB) 大(GB)
性能 通常於宿主機 比宿主機弱
單機系統支持量 大(千計) 小(十計)
管理及應用 更輕鬆的遷移和擴展

docker 與傳統虛擬化方式優缺點比較---侷限

  1. Docker是基於Linux 64bit的,沒法在32bit的linux/Windows/unix環境下使用
  2. LXC(Linux Container)是基於cgroup等linux kernel功能的,所以container的guest系統(Guest是指讓給客人訪問電腦系統的賬戶)只能是linux base的
  3. 隔離性相比KVM之類的虛擬化方案仍是有些欠缺,全部container公用一部分的運行庫
  4. 網絡管理相對簡單,主要是基於namespace隔離
  5. cgroup的cpu和cpuset提供的cpu功能相比KVM的等虛擬化方案相比難以度量(因此dotcloud主要是按內存收費)
  6. Docker對disk的管理比較有限
  7. container隨着用戶進程的中止而銷燬,container中的log等用戶數據不便收集
  8. Docker 隔離性沒有傳統虛擬化好,KVM等屬於徹底隔離

摘自:https://baike.baidu.com/item/Docker/13344470?fr=aladdin#1_4node


Docker三核心

Docker Image(鏡像)

  1. 文件的層次結構,以及包含如何運行容器的元數據, Dockerfile中的每條命令都會在文件系統中建立一個新的層次結構,文件系統在這些層次上構建起來,鏡像就構建於這些聯合的文件系統之上。
  2. Docker 鏡像就是一個只讀的模板,鏡像能夠用來建立 Docker 容器。Docker 提供了一個很簡單的機制來建立鏡像或者更新現有的鏡像,用戶甚至能夠直接從其餘人那裏下載一個已經作好的鏡像來直接實現。

Docker Container(容器)

  1. 容器是從鏡像建立的運行實例。它能夠被啓動、開始、中止、刪除。每一個容器都是相互隔離的、保證安全的平臺。能夠把容器看作是一個簡易版的 Linux 環境,Docker 利用容器來運行應用。

Docker Hub/Registry(倉庫)

  1. 倉庫是集中存放鏡像文件的場所,倉庫註冊服務器(Registry)上每每存放着多個倉庫,每一個倉庫中又包含了多個鏡像,每一個鏡像有不一樣的標籤(tag)。
  2. 倉庫分爲public registry和private registry
  3. 目前,最大的公開倉庫是 Docker Hub(docker公司運營),存放了數量龐大的鏡像供用戶下載。
  4. Docker倉庫用來保存咱們的images,當咱們建立了本身的image以後咱們就可使用push命令將它上傳到公有或者私有倉庫,這樣下次要在另一臺機器上使用這個image時候,只須要從倉庫上pull下來便可。

Docker 的底層實現

cgroup

  • cgroup (Control Group)Linux 操做系統經過 cgroup 能夠設置進程使用 CPU、內存 和 IO 資源的限額。

在 /sys/fs/cgroup/memory/docker 目錄中,Linux 會爲每一個容器建立一個 cgroup 目錄,以容器長ID 命名:mysql

╭─root@du-z ~  
╰─➤  ls /sys/fs/cgroup/memory/docker/196ddbdaa07a5ebdc33cd78a6a575a13cc9319bfe46ed537872b9b960ea4e86b 
cgroup.clone_children               memory.memsw.failcnt
cgroup.event_control                memory.memsw.limit_in_bytes
cgroup.procs                        memory.memsw.max_usage_in_bytes
memory.failcnt                      memory.memsw.usage_in_bytes
memory.force_empty                  memory.move_charge_at_immigrate
memory.kmem.failcnt                 memory.numa_stat
memory.kmem.limit_in_bytes          memory.oom_control
memory.kmem.max_usage_in_bytes      memory.pressure_level
memory.kmem.slabinfo                memory.soft_limit_in_bytes
memory.kmem.tcp.failcnt             memory.stat
memory.kmem.tcp.limit_in_bytes      memory.swappiness
memory.kmem.tcp.max_usage_in_bytes  memory.usage_in_bytes
memory.kmem.tcp.usage_in_bytes      memory.use_hierarchy
memory.kmem.usage_in_bytes          notify_on_release
memory.limit_in_bytes               tasks
memory.max_usage_in_bytes

namespace

  • linux 內核從Linux 2.4.19 版本開始引入namespace的概念。其目的是做系統資源隔離,經過特定的方法使得namespace中的進程看起來擁有本身的全局系統資源(global system resource)。

linux內核中共實現的六種隔離:linux

  1. mount namespaces :Linux 2.4.19版本內核引入;主要用於隔離文件系統掛載點;使每一個容器看上去都有整個文件系統
  2. UTS namespaces : LInux 2.6.19版本內核引入;主要用於隔離nodename和domainname兩個系統標識;使每一個容器都有本身的hostname和domainname
  3. IPC namespaces :Linux 2.6.19版本內核引入;主要用於隔離信號量,消息隊列,共享內存;使只有在同一個IPC namespace 的進程之間才能互相通訊; IPC(Inter-Process Communication,進程間通訊)
  4. PID namespaces :Linux2.6.24版本內核引入;主要用於隔離進程ID;使每一個PID namespace 中的進程能夠有其獨立的PID,每一個容器能夠有PID爲1的root進程;同一進程在不一樣PID namespace中有不一樣的PID;容器中每一個進程都有兩PID 容器中的PID和宿主機中的PID
  5. Network namespaces:Linux2.6.29版本內核引入;主要用於隔離系統網絡資源;使每一個容器都有其獨立的網絡設備,IP地址,端口號,IP路由表等
  6. User namespaces :Linux3.8版本內核引入;主要用於隔離用戶和用戶組ID;使每個進程的User ID 和Group ID 在User namespace 內外能夠是不一樣的;使得每個進程在User namespace裏面有root權限,可是在User namespace外面卻沒有root的權限

Docker 部署安裝

docker-ce 社區免費版
docker-ee 企業收費版

第一步:註冊阿里雲帳號並在阿里雲「容器鏡像服務」中得到加速
第二步:下載阿里雲網站新版docker-cenginx

具體操做:

# vim docker-sbeed.sh
...
#!/bin/bash
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
mv docker-ce.repo /etc/yum.repos.d
yum install docker-ce -y
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
...

# bash docker-sbeed.sh

Docker簡單操做

image相關操做

╭─root@localhost.localdomain ~  
╰─➤  docker image help           

Usage:  docker image COMMAND

Manage images

Commands:
  build       Build an image from a Dockerfile         
                 #從dockerfile中建立鏡像
  history     Show the history of an image         
                   #能夠顯示鏡像的構建歷史 ;docker鏡像分層構建,每一層都有一個指令
  import      Import the contents from a tarball to create a filesystem image   
                  #從一個壓縮包建立鏡像
  inspect     Display detailed information on one or more images     
                  #顯示一個或多個image的詳細信息
  load        Load an image from a tar archive or STDIN   
                  #從tar包或STDIN加載image
  ls          List images     
                 #列出images
  prune       Remove unused images      
                  #刪除未使用的images
  pull        Pull an image or a repository from a registry   
                   #從registry(倉庫)中拉取鏡像 
  push        Push an image or a repository to a registry   
                 #推送鏡像到registry(倉庫)中
  rm          Remove one or more images     
                 #刪除一個或多個鏡像
  save        Save one or more images to a tar archive (streamed to STDOUT by default)    
                 #建立鏡像壓縮包
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE   
                #更名image(原名文件保留)

實例1:拉取image(pull)

╭─root@localhost.localdomain ~  
╰─➤  docker image pull busybox
#  docker image pull --help

Usage:  docker image pull [OPTIONS] NAME[:TAG|@DIGEST]

##注意:若是在拉取鏡像的時候只指定了REPOSITORY的話,默認拉取的是tag爲latest的版本

實例2:查看當前有哪些鏡像 (ls)

╭─root@localhost.localdomain ~  
╰─➤  docker image list
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              db8ee88ad75f        3 weeks ago         1.22MB

實例3: 查看鏡像構建歷史 (history)

╭─root@localhost.localdomain ~  
╰─➤  docker image history busybox:latest
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
db8ee88ad75f        3 weeks ago         /bin/sh -c #(nop)  CMD ["sh"]                   0B
<missing>           3 weeks ago         /bin/sh -c #(nop) ADD file:9ceca008111a4ddff…   1.22MB

實例4:製做鏡像壓縮包 (save)

方法一:使用-o選項,outputweb

╭─root@localhost.localdomain ~  
╰─➤  docker image save busybox -o busybox-latest.tar
╭─root@localhost.localdomain ~  
╰─➤  ls
anaconda-ks.cfg  busybox-latest.tar  docker-sbeed.sh

方法二:使用標準輸出sql

╭─root@localhost.localdomain ~  
╰─➤  docker image save busybox > busybox-v1.tar 
╭─root@localhost.localdomain ~  
╰─➤  ls
anaconda-ks.cfg  busybox-latest.tar  busybox-v1.tar  docker-sbeed.sh

實例5:使用鏡像壓縮包 (load)

方法一:使用-i選項 inputdocker

╭─root@localhost.localdomain ~  
╰─➤  docker image load -i busybox-latest.tar 
Loaded image: busybox:latest
╭─root@localhost.localdomain ~  
╰─➤  docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              db8ee88ad75f        3 weeks ago         1.22MB

方法二:實用標準輸入json

docker image load <  busybox-latest.tar

實例6:刪除鏡像 (rm)

docker image rm busybox:latest

實例7:鏡像更名 (tag)

╭─root@localhost.localdomain ~  
╰─➤  docker image tag busybox:latest busybox:v1
╭─root@localhost.localdomain ~  
╰─➤  docker image ls                           
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              db8ee88ad75f        3 weeks ago         1.22MB
busybox             v1                  db8ee88ad75f        3 weeks ago         1.22MB

例子8:清除不常用的鏡像 (prune)

╭─root@localhost.localdomain ~  
╰─➤  docker image prune -f
Total reclaimed space: 0B

Container(容器)操做

╭─root@localhost.localdomain ~  
╰─➤  docker container --help

Usage:  docker container COMMAND

Manage containers

Commands:
  attach      Attach local standard input, output, and error streams to a running container
                     #將本地標準輸入、輸出和錯誤輸出追加到正在運行的容器中
  commit      Create a new image from a container's changes
                     #從容器的更改中建立一個新image
  cp          Copy files/folders between a container and the local filesystem
                   #在容器和本地文件系統之間複製文件/文件夾
  create      Create a new container
                    #建立一個新容器
  diff        Inspect changes to files or directories on a container's filesystem
                  #檢查容器文件系統上文件或目錄的更改
  exec        Run a command in a running container
                   #在正在運行的容器中運行命令(進入容器)
  export      Export a container's filesystem as a tar archive
                     #將容器的文件系統導出爲tar包
  inspect     Display detailed information on one or more containers
                    #在一個或多個容器上顯示詳細信息
  kill        Kill one or more running containers
                     #殺死一個或多個正在運行的容器
  logs        Fetch the logs of a container
                   #獲取容器的日誌
  ls          List containers
                    #列出容器(containers)
  pause       Pause all processes within one or more containers
                   #暫停一個或多個容器中的全部進程
  port        List port mappings or a specific mapping for the container
                      #列出容器的端口映射或特定映射
  prune       Remove all stopped containers
                     #移除全部中止的容器
  rename      Rename a container
                      #給容器更名
  restart     Restart one or more containers
                   #重啓一個或多個容器
  rm          Remove one or more containers
                  #刪除一個或多個容器
  run         Run a command in a new container
                 #在新容器中運行命令
  start       Start one or more stopped containers
                  #啓動一個或多箇中止的容器(stopped)
  stats       Display a live stream of container(s) resource usage statistics
                   #實時顯示容器資源使用統計數據
  stop        Stop one or more running containers
                   #中止一個或多個正在運行的容器
  top         Display the running processes of a container
                    #顯示容器的運行進程
  unpause     Unpause all processes within one or more containers
                      #繼續運行paused狀態的容器
  update      Update configuration of one or more containers
                     #更新一個或多個容器的配置
  wait        Block until one or more containers stop, then print their exit codes
                  #阻塞,直到一個或多個容器中止,而後打印它們的退出代碼
  ps        #查看正在運行的容器

指定某容器的兩種方法:CONTAINER-ID ,CONTAINER-NAMEvim

實例1:運行容器 (run)

-i 交互模式
-t分配終端

╭─root@localhost.localdomain ~  
╰─➤  docker container run -it busybox /bin/sh            

/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # exit
-d 後臺運行

╭─root@localhost.localdomain ~  
╰─➤  docker  container run  -d nginx-game:v1
--name 指定容器名字
-d 後臺運行
--rm 容器停掉以後自動刪除

╭─root@localhost.localdomain ~  
╰─➤  docker container run --name nginx -d --rm nginx:latest

實例2:查看正在運行的容器 (ps)

╭─root@localhost.localdomain ~  
╰─➤  docker container ps

查看全部容器

╭─root@localhost.localdomain ~  
╰─➤  docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
b967cc0a7a67        busybox             "sh"                9 hours ago         Exited (0) 9 hours ago                         zealous_shaw
ee42b5eff0cd        busybox             "sh"                9 hours ago         Exited (0) 9 hours ago                         intelligent_cerf
db206796c1a0        busybox             "/bin/sh"           9 hours ago         Exited (127) 9 hours ago                       admiring_northcutt

實例3:刪除容器 (rm)

╭─root@localhost.localdomain ~  
╰─➤  docker container rm b967cc0a7a67
b967cc0a7a67

批量刪除容器

╭─root@localhost.localdomain ~  
╰─➤  docker container rm $(docker ps -aq)
ee42b5eff0cd
db206796c1a0
Error response from daemon: You cannot remove a running container bb47bdca3639aaee6ed332a62fa00c7c0d768fa6a1f6a1d1e1864cab2770b622. Stop the container before attempting removal or force remove

# 不會刪除正在運行的container

強制刪除

docker container rm -f  b967cc0a7a67

實例4:查看容器信息 (inspect)

╭─root@localhost.localdomain ~  
╰─➤  docker inspect db206796c1a0

...#詳細信息

實例5:查看容器暴露的端口

方法1: (ps) (注意: 容器需在up運行狀態)

╭─root@du-z ~  
╰─➤  docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
69fdffa4d862        nginx               "nginx -g 'daemon of…"   13 seconds ago      Up 11 seconds       0.0.0.0:32768->80/tcp   frosty_swartz

方法2:(history)

╭─root@localhost.localdomain ~  
╰─➤  docker image history e445ab08b2b |grep EXPOSE
<missing>           2 weeks ago         /bin/sh -c #(nop)  EXPOSE 80                    0B

方法3: (inspect)

╭─root@localhost.localdomain ~  
╰─➤  docker container inspect bb47bdca3639 |grep Ports -A3      
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
--
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
--
            "Ports": {
                "80/tcp": null
            },
            "SandboxKey": "/var/run/docker/netns/ea04a98cd4ee",

實例6:查看容器運行狀態 (stats)

╭─root@localhost.localdomain ~  
╰─➤  docker container stats bb47bdca3639


CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
bb47bdca3639        nginx               0.00%               1.387MiB / 976.5MiB   0.14%               648B / 0B           5.04MB / 0B         2

實例7:對容器內存使用量進行限制 (run -m)

╭─root@du-z ~  
╰─➤  docker run -d --name nginx --rm -m 64M nginx

╭─root@du-z ~  
╰─➤  docker stats nginx

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
fdec1b43873d        nginx               0.00%               1.383MiB / 64MiB    2.16%               648B / 0B           0B / 0B             2

實例8:容器更名 (rename)

╭─root@du-z ~  
╰─➤  docker rename nginx nginx1    
╭─root@du-z ~  
╰─➤  docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
fdec1b43873d        nginx               "nginx -g 'daemon of…"   2 minutes ago       Up 2 minutes        80/tcp              nginx1

實例9:停掉容器 (stop)

╭─root@du-z ~  
╰─➤  docker stop 2ed61f50ef50
2ed61f50ef50

實例10:殺掉容器 (kill)

╭─root@du-z ~  
╰─➤  docker kill 2ed61f50ef50
2ed61f50ef50

kill與stop的區別:

  • kill: 強硬退出,直接退出 -9
  • stop: 優雅退出 -15 ,給10秒鐘退出準備,10秒後 kill -9

實例12:查看容器日誌 (logs)

╭─root@du-z ~  
╰─➤  docker container logs nginx1
# 持續監聽日誌 

╭─root@du-z ~  
╰─➤  docker container logs nginx1 -f

實例13:進入容器 (exec)

╭─root@du-z ~  
╰─➤  docker exec -it nginx1 /bin/sh               
# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
# 
# exit

實例14:查看端口映射(port)

╭─root@du-z ~  
╰─➤  docker port b4b75dcb00cc
80/tcp -> 192.168.137.3:32768

Container(容器)端口映射

  • 端口映射使容器能夠外部訪問

第一類:把容器的端口隨機映射爲物理機的一個端口(-P 大寫)

注意:使用-P選項,是把容器內全部expose的端口都映射爲物理機的隨機端口

╭─root@du-z ~  
╰─➤  docker run -d -P nginx

╭─root@du-z ~  
╰─➤  docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
69fdffa4d862        nginx               "nginx -g 'daemon of…"   13 seconds ago      Up 11 seconds       0.0.0.0:32768->80/tcp   frosty_swartz
╭─root@du-z ~  
╰─➤  ss -ntl
State       Recv-Q Send-Q          Local Address:Port                         Peer Address:Port              
LISTEN      0      128                         *:22                                      *:*                  
LISTEN      0      100                 127.0.0.1:25                                      *:*                  
LISTEN      0      128                        :::22                                     :::*                  
LISTEN      0      100                       ::1:25                                     :::*                  
LISTEN      0      128                        :::32768                                  :::*

第二類:把容器的端口映射爲物理機特定的一個端口(-p 小寫)

注意:81 爲物理機端口 80爲容器端口

╭─root@du-z ~  
╰─➤  docker run -d -p 81:80 nginx

╭─root@du-z ~  
╰─➤  docker ps              
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
fa0c51407f81        nginx               "nginx -g 'daemon of…"   52 seconds ago      Up 50 seconds       0.0.0.0:81->80/tcp   elegant_fermat
╭─root@du-z ~  
╰─➤  ss -ntl
State       Recv-Q Send-Q          Local Address:Port                         Peer Address:Port              
LISTEN      0      128                         *:22                                      *:*                  
LISTEN      0      100                 127.0.0.1:25                                      *:*                  
LISTEN      0      128                        :::81                                     :::*                  
LISTEN      0      128                        :::22                                     :::*                  
LISTEN      0      100                       ::1:25                                     :::*

第三類:把容器的端口映射爲物理機特定網卡上的特定端口(-p 小寫)

注意:192.168.137.3:81 <--->0.0.0.0:81

╭─root@du-z ~  
╰─➤  docker run -d -p 192.168.137.3:81:80 nginx

╭─root@du-z ~  
╰─➤  docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
d4fd0a2b72f9        nginx               "nginx -g 'daemon of…"   13 seconds ago      Up 11 seconds       192.168.137.3:81->80/tcp   laughing_tu
╭─root@du-z ~  
╰─➤  ss -ntl 
State       Recv-Q Send-Q          Local Address:Port                         Peer Address:Port              
LISTEN      0      128             192.168.137.3:81                                      *:*                  
LISTEN      0      128                         *:22                                      *:*                  
LISTEN      0      100                 127.0.0.1:25                                      *:*                  
LISTEN      0      128                        :::22                                     :::*                  
LISTEN      0      100                       ::1:25                                     :::*

第四類:把容器的端口映射爲物理機特定網卡上的隨機端口(-p 小寫)

╭─root@du-z ~  
╰─➤  docker run -d -p 192.168.137.3::80 nginx

╭─root@du-z ~  
╰─➤  docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
b4b75dcb00cc        nginx               "nginx -g 'daemon of…"   5 seconds ago       Up 4 seconds        192.168.137.3:32768->80/tcp   loving_hellman
╭─root@du-z ~  
╰─➤  ss -ntl
State       Recv-Q Send-Q          Local Address:Port                         Peer Address:Port              
LISTEN      0      128                         *:22                                      *:*                  
LISTEN      0      100                 127.0.0.1:25                                      *:*                  
LISTEN      0      128             192.168.137.3:32768                                   *:*                  
LISTEN      0      128                        :::22                                     :::*                  
LISTEN      0      100                       ::1:25                                     :::*

兩容器之間創建鏈接

命令參數

$ run --link  name:alias     

#其中:name一個運行中的容器名;alias 是這個鏈接的別名
#Docker 在兩個互聯的容器之間建立了一個安全隧道,並且不用映射它們的端口到宿主主機上

Docker 經過兩種方式爲容器公開鏈接信息:

  1. 環境變量
  2. 更新 /etc/hosts文件

示例:

#第一步:運行一個mysql容器取名mysqlname

╭─root@du-z ~  
╰─➤  docker run -d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name mysqlname  mysql            
499490e40651b18d0fd37d4d91268f1c2af0b40c06dfb19b705b7b4ff87cd31c

#第二步:run --link 關聯建立nginx容器

╭─root@du-z ~  
╰─➤  docker run -d --link mysqlname:mysql nginx                                                             
2b90eb01945aae98f476bc23ac0766ab840b96a69b933b5b3bc999da5fc38271


#第三步:進入nginx容器查看環境變量

╭─root@du-z ~  
╰─➤  docker ps               
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                 NAMES
2b90eb01945a        nginx               "nginx -g 'daemon of…"   About a minute ago   Up About a minute   80/tcp                awesome_mcclintock
499490e40651        mysql               "docker-entrypoint.s…"   8 minutes ago        Up 8 minutes        3306/tcp, 33060/tcp   mysqlname

╭─root@du-z ~  
╰─➤  docker exec -it 2b90eb01945a sh
# env
MYSQL_PORT_33060_TCP=tcp://172.17.0.4:33060
HOSTNAME=2b90eb01945a
HOME=/root
PKG_RELEASE=1~buster
MYSQL_ENV_MYSQL_MAJOR=8.0
TERM=xterm
MYSQL_PORT_3306_TCP_ADDR=172.17.0.4
NGINX_VERSION=1.17.2
MYSQL_ENV_MYSQL_ROOT_PASSWORD=root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MYSQL_ENV_GOSU_VERSION=1.7
MYSQL_PORT_3306_TCP_PORT=3306
NJS_VERSION=0.3.3
MYSQL_PORT_3306_TCP_PROTO=tcp
MYSQL_PORT_33060_TCP_ADDR=172.17.0.4
MYSQL_PORT=tcp://172.17.0.4:3306
MYSQL_PORT_3306_TCP=tcp://172.17.0.4:3306
MYSQL_PORT_33060_TCP_PORT=33060
MYSQL_ENV_MYSQL_VERSION=8.0.17-1debian9
MYSQL_PORT_33060_TCP_PROTO=tcp
MYSQL_NAME=/awesome_mcclintock/mysql

commit製做鏡像

第一步:運行容器

╭─root@du-z ~  
╰─➤  docker run -d nginx

第二步:配置環境

# 略

第三步:進行commit提交,製做鏡像

╭─root@du-z ~  
╰─➤  docker commit -p b4b75dcb00c nginx-public:v1
sha256:0a23a33fc7f72598deb80d3c4fe16bca13804bd5b171be7f8ec9caef65db6d26
╭─root@du-z ~  
╰─➤  docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx-public        v1                  0a23a33fc7f7        10 seconds ago      126MB


## 建議-p (pause)暫停製做鏡像

第四步:把鏡像製做成壓縮包

╭─root@du-z ~  
╰─➤  docker image save nginx-public:v1 > nginx-public.tar    
╭─root@du-z ~  
╰─➤  ls
anaconda-ks.cfg  busybox:v1.tar  docker-sbeed.sh  nginx-public.tar

第五步:發送

# 略

第六步:使用

╭─root@du-z ~  
╰─➤  docker image load < nginx-public.tar 
0b9c86526c2e: Loading layer [==================================================>]  6.656kB/6.656kB
Loaded image: nginx-public:v1
╭─root@du-z ~  
╰─➤  docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx-public        v1                  0a23a33fc7f7        8 minutes ago       126MB

私有倉庫registry使用

第一步:拉取到registry鏡像(查看鏡像)

╭─root@node1 ~  
╰─➤  docker pull registry
╭─root@node1 ~  
╰─➤  docker image ls
╭─root@node1 ~  
╰─➤  docker image ls   
REPOSITORY                                                        TAG                 IMAGE ID            CREATED             SIZE

registry                                                          latest              f32a97de94e1        5 months ago        25.8MB

第二步:查看鏡像信息

╭─root@node1 ~  
╰─➤  docker image history registry     
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
f32a97de94e1        5 months ago        /bin/sh -c #(nop)  CMD ["/etc/docker/registr…   0B                  
<missing>           5 months ago        /bin/sh -c #(nop)  ENTRYPOINT ["/entrypoint.…   0B                  
<missing>           5 months ago        /bin/sh -c #(nop) COPY file:507caa54f88c1f38…   155B                
<missing>           5 months ago        /bin/sh -c #(nop)  EXPOSE 5000                  0B                  
<missing>           5 months ago        /bin/sh -c #(nop)  VOLUME [/var/lib/registry]   0B                  
<missing>           5 months ago        /bin/sh -c #(nop) COPY file:4544cc1555469403…   295B                
<missing>           5 months ago        /bin/sh -c #(nop) COPY file:21256ff7df5369f7…   20.1MB              
<missing>           5 months ago        /bin/sh -c set -ex     && apk add --no-cache…   1.29MB              
<missing>           5 months ago        /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B                  
<missing>           5 months ago        /bin/sh -c #(nop) ADD file:38bc6b51693b13d84…   4.41MB

第三步:編寫文件

╭─root@node1 ~  
╰─➤  vim /etc/docker/daemon.json

{
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"],     #阿里雲鏡像加速地址(每人一個);結尾 「,」 不能省
  "insecure-registries":["192.168.137.3:5000"]    #容許不安全的鏡像地址
}

第四步:重啓docker

╭─root@node1 ~  
╰─➤  systemctl restart docker

第五步:改鏡像名

╭─root@node1 ~  
╰─➤  docker image tag nginx 192.168.137.3:5000/nginx:v1

第六步:運行registry

╭─root@node1 ~  
╰─➤  docker run -d -v /registry:/var/lib/registry -p 5000:5000 registry
e39972548aca665813421c1b4bff85acc08400d5d0d2810f441498efff94f997

# 綁定數據卷
# 作端口映射

╭─root@node1 ~  
╰─➤  ls /      # 查看自動建立/registry目錄
bin   dev  home  lib64  mnt  proc      root  sbin  sys  usr  webroom
boot  etc  lib   media  opt  registry  run   srv   tmp  var

第七步:查看registry容器運行狀態,並上傳鏡像

╭─root@node1 ~  
╰─➤  docker ps |grep 5000    
05df172e9cd2        registry                                            "/entrypoint.sh /etc…"   5 minutes ago       Up 5 minutes        0.0.0.0:5000->5000/tcp   funny_swartz

╭─root@node1 ~  
╰─➤  docker image tag nginx 192.168.137.3:5000/nginx:v1

第八步:查看

╭─root@node1 ~  
╰─➤  ls /registry/docker/registry/v2/repositories/                     
nginx

其餘人使用

第一步:編寫docker daemon文件,並重啓docker

╭─root@node2 ~  
╰─➤  vim /etc/docker/daemon.json

{
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.137.3:5000"]
}

╭─root@node2 ~  
╰─➤  systemctl restart docker

第二步:拉取鏡像

╭─root@node2 ~  
╰─➤  docker pull 192.168.137.3:5000/nginx:v1
v1: Pulling from nginx
f5d23c7fed46: Pull complete 
918b255d86e5: Pull complete 
8c0120a6f561: Pull complete 
Digest: sha256:dc85890ba9763fe38b178b337d4ccc802874afe3c02e6c98c304f65b08af958f
Status: Downloaded newer image for 192.168.137.3:5000/nginx:v1
192.168.137.3:5000/nginx:v1

推薦文章:http://www.bubuko.com/infodetail-2686015.html

推薦文章:http://www.kendd.cn/?s=docker+

相關文章
相關標籤/搜索