1. 程式人生 > >Docker 入門

Docker 入門

upd -- ann 應用程序 style iptable live 鏡像倉庫 routing

Docker 入門


什麽是容器:

容器技術已經成為應用程序封裝和交付的核心技術

容器技術的核心有以下幾個內核技術組成:

— CGroups( Control Groups ) - 資源管理

— NameSpace - 進程隔離

— SELinux 安全

由於是物理機上實施隔離,啟動一個容器,可以想啟動一個進程一樣快速


什麽是Docker:

Docker是完整的一套容器管理系統

Docker提供了一組命令,讓用戶更加方便直接地使用容器技術,而不需要過多關心底層內核技術


Docker優點:

相比與傳統的虛擬化技術,容器更加簡潔高效

傳統虛擬機器要給每個VM安裝操作系統

容器使用的共享公共庫和程序

技術分享圖片


技術分享圖片


技術分享圖片



Docker的缺點

容器的隔離性沒有虛擬化強

共用Linux內核,安全性有先天缺陷

SELinux難以駕馭

監控容器和容器排錯是挑戰



部署Docker


Ubuntu 系列安裝 Docker

Docker支持版本

UbuntuXenial16.04(LTS)

UbuntuWily15.10

UbuntuTrusty14.04(LTS)

UbuntuPrecise12.04(LTS)

Docker目前只能安裝在64位平臺上,並且要求內核版本不低於3.10,實際上內核越新越好,過低的內核版本容易造成功能的不穩定。

用戶可以通過如下命令檢查自己的內存版本信息

$ uname -a

$ cat /proc/version

更新APT鏡像源

首先需要安裝 apt-transport-https 包支持 https 協議的源

$ sudo apt-getinstall apt-transport-https ca-certificates

添加源的 gpg 密鑰

$sudo apt-keyadv--keyserver hkp://p80.pool.sks-keyservers.net

獲取當前操作系統的代號

$ lsb_release -c

Codename:trusty

添加 Docker 的官方 apt 軟件源了。

$ sudo cat <<EOF > /etc/apt/sources.list.d/docker.list

debhttps://apt.dockerproject.org/repoubuntu-trustymain

EOF

添加成功後,更新apt軟件包緩存。

$ sudo apt-get update

分版本的預安裝任務

高於 12.04 LTS的版本

$ sudo apt-get install-y linux-image-extra-$(uname -r)

$ sudo apt-get install apparmor

12.04 LTS版本

$sudo apt-get install linux-image-generic-lts-trusty

安裝Docker

$sudo apt-getinstall -ydocker-engine


CentOS 系列安裝Docker

要添加yum 軟件源

$sudo cat > /etc/yum.repos.d/docker.repo<<-'EOF'

[dockerrepo]

name=DockerRepository

baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/

enabled=1

gpgcheck=0

EOF

使用yum 安裝docker-engine

$ sudo yum install -y install docker-engine


Debian操作系統安裝Docker

支持版本

Debiantestingstretch(64-bit)

Debian8.0Jessie(64-bit)

Debian7.7Wheezy(64-bit)

更新APT倉庫

1. 清理舊的倉庫信息

$apt-getpurgelxc-docker*

$apt-getpurgedocker.io*

2. 更新和安裝軟件包

$apt-getupdate

$apt-getinstallapt-transport-httpsca-certificates

3. 添加 GPG 鍵

$ apt-keyadv--keyserverhkp://p80.pool.sks-keyservers.net:80 --recv-keys58118E89F3A912897C070ADBF76221572C52609D

4. 添加 APT 源 以Debian Jessie 為例

$sudo cat<<EOF> /etc/apt/sources.list.d/docker.list

deb https://apt.dockerproject.org/repodebian-jessie main

EOF

其他兩個版本

deb https://apt.dockerproject.org/repo debian-wheezy main

deb https://apt.dockerproject.org/repo debian-stretch main

安裝Docker

$sudo apt-get install docker-engine

為非 root 用戶授權

#如果沒有就建立一個 Docker 組

$sudo groupadd docker

#增加一個用戶(用真實的名字替換下面的 ${USER})到 Docker 組,需重登陸來生效

$sudo gpasswd -a ${USER}docker

#重啟 Docker 服務

$sudo service docker restart

更新 Docker

$apt-get upgrade docker-engine

卸載 Docker

#卸載軟件包

$sudo apt-get purge docker-engine

#卸載依賴包

$sudo apt-get autoremove --purge docker-engine

#如有必要,執行以下命令,刪除全部鏡像、容器、數據卷和其他docker相關用戶信息

:

$rm -rf /var/lib/docker




下面使用 CentOS 7 系統介紹Docker:

把軟件 docker-engine docker-engine-selinux 拷貝到私有yum倉庫中

運行 createrepo .

# yum -y install -y docker-engine docker-engine-selinux

啟動docker時 最好要將iptables 的規則清空 iptable有的規則可能會影響Docker

    # brctl show
    bridge name	bridge id		STP enabled	interfaces
    # iptables-save 
    //設置開機啟動,啟動 docker 服務
    # systemctl  enable  docker
    # systemctl  start   docker
    # brctl show
    bridge name	bridge id		STP enabled	interfaces
    docker0		8000.02424ba34d68	no		
    # iptables-save 
    # Generated by iptables-save v1.4.21 on Sun Jan 21 22:48:11 2018
    *nat
    :PREROUTING ACCEPT [0:0]
    :INPUT ACCEPT [0:0]
    :OUTPUT ACCEPT [2:262]
    :POSTROUTING ACCEPT [2:262]
    :DOCKER - [0:0]
    -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
    -A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
    -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
    -A DOCKER -i docker0 -j RETURN
    COMMIT
    # Completed on Sun Jan 21 22:48:11 2018
    # Generated by iptables-save v1.4.21 on Sun Jan 21 22:48:11 2018
    *filter
    :INPUT ACCEPT [27:3069]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [20:3101]
    :DOCKER - [0:0]
    :DOCKER-ISOLATION - [0:0]
    -A FORWARD -j DOCKER-ISOLATION
    -A FORWARD -o docker0 -j DOCKER
    -A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    -A FORWARD -i docker0 ! -o docker0 -j ACCEPT
    -A FORWARD -i docker0 -o docker0 -j ACCEPT
    -A DOCKER-ISOLATION -j RETURN
    COMMIT
    # Completed on Sun Jan 21 22:48:11 2018
    
    # docker version
    Client:
     Version:      1.12.1
     API version:  1.24
     Go version:   go1.6.3
     Git commit:   23cf638
     Built:        
     OS/Arch:      linux/amd64
    
    Server:
     Version:      1.12.1
     API version:  1.24
     Go version:   go1.6.3
     Git commit:   23cf638
     Built:        
     OS/Arch:      linux/amd64


Docker 鏡像:

Docker 運行容器前需要本地存在對應的鏡像,如果鏡像不存在本地,Docker會從鏡像倉庫下載( 默認是Docker Hub 公共註冊服務器中的倉庫 )

查看系統鏡像

docker images

從官方源搜索鏡像 (前提 物理機可以連通外網)

docker search 鏡像名

下載鏡像

docker pull 鏡像名

上傳鏡像

docker push 鏡像名

刪除本地鏡像

docker rmi 鏡像名

把本機鏡像備份為 tar 包

docker save 鏡像名 > 鏡像名.tar

把備份的 tar 包導入到本地鏡像

docker load < 鏡像名.tar

查看鏡像制作歷史

docker history

查看鏡像底層信息

docker inspect

修改鏡像名稱和標簽

docker tag

這裏用 busybox 練習
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
# docker search busybox
# docker pull busybox 
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              f9b6f7f7b9d3        6 days ago          1.143 MB
在列出的信息中 可以看到幾個字段信息
    來自於哪個倉庫,比如 busybox
    鏡像標記,比如 latest
    它的 ID 號 唯一
    創建時間
    鏡像大小
# docker save busybox > busybox.tar
# ls busybox.tar 
busybox.tar
# docker rmi busybox
# docker load < busybox.tar
779f37a09c89: Loading layer 1.355 MB/1.355 MB
Loaded image: busybox:latest
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              f9b6f7f7b9d3        6 days ago          1.143 MB
# docker history busybox
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
f9b6f7f7b9d3        6 days ago          /bin/sh -c #(nop)  CMD ["sh"]                   0 B                 
<missing>           6 days ago          /bin/sh -c #(nop) ADD file:3e663b99b5cb560010   1.143 MB

鏡像的實現原理

Docker 使用Union FS 將這些不同的層結合到一個鏡像中去。

通常 Union FS 有兩個用途, 一方面可以實現不借助 LVM、RAID 將多個 disk 掛到同一個目錄下,另一個更常用的就是將一個只讀的分支和一個可寫的分支聯合在一起,LiveCD正是基於此方法可以允許在鏡像不變的基礎上允許用戶在其上進行一些寫操作。 Docker 在 AUFS上構建的容器也是利用了類似的原理。


Docker 容器:

容器是獨立運行的一個或一組應用,以及它們的運行態環境。

對應的虛擬機可以理解為模擬運行的一整套操作系統(提供了運行態環境和其他系統環境)和跑在上面的應用。

容器常用命令列表

– docker run //運行容器

– docker ps //查看容器列表

– docker stop //關閉容器

– docker start //啟動容器

– docker restart //重啟容器

– docker attach|exec //進入容器

– docker inspect //查看容器底層信息

– docker top //查看容器進程列表

– docker rm //刪除容器


啟動容器

啟動容器有兩種方式,一種是基於鏡像新建一個容器並啟動,另外一個是將在終止狀態的容器重新啟動.

新建並啟動

命令主要為docker run

例如 下面命令輸出一個'Hello world' 之後終止容器
    # docker run centos /bin/echo 'Hello world'
    Hello world
    下面的命令則啟動一個 bash 終端,允許用戶進行交互。
    # docker run -it  centos /bin/bash
    [root@b45c34328e05 /]#echo Hello world
    Hello world
   [root@b45c34328e05 /]# ls
    anaconda-post.log  dev  home  lib64       media  opt   root  sbin  sys  usr
    bin                etc  lib   lost+found  mnt    proc  run   srv   tmp  var
    [root@b45c34328e05 /]# exit
    exit
    -t 選項 讓Docker分配一個偽終端 並綁定到容器的標準輸入上
    -i 選項 則讓容器的標準輸入保持打開


啟動已終止容器

可以利用 docker start 命令 直接將一個已經終止的容器啟動運行

使用 docker ps 命令查看容器信息 
終止狀態的容器可以用 docker ps -a 看到
# docker ps  -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
b45c34328e05        centos              "/bin/bash"         47 seconds ago      Exited (0) 40 seconds ago                       sharp_carson
# docker start b45c34328e05
b45c34328e05
# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
b45c34328e05        centos              "/bin/bash"         About a minute ago   Up 5 seconds                            sharp_carson


後臺運行

需要讓Docker在後臺運行而不是直接把執行命令的結果輸出在當前宿主機下

可以docker run 添加 -d 參數來實現 啟動後會返回唯一的 id

# docker run -d centos /bin/sh -c "while true;do echo hello world; sleep 1;done"
3a5f25a937544c37c10c37443c848d0c818859995cf74232c16d04f25c5ec932   
# docker logs 3a5f    //可以通過簡寫id  使用docker logs 命令獲取容器的輸出信息
hello world
hello world
hello world
hello world
# docker ps            //查看容器信息
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
3a5f25a93754        centos              "/bin/sh -c 'while tr"   About a minute ago   Up About a minute                       happy_goldstine


終止容器

可以使用 docker stop 來終止一個運行中的容器

當Docker 容器中指定的應用終結時,容器也自動終止,用戶通過exit 命令 或者 Ctrl + d 來退出終端時,所創建的容器立刻終止。

# docker stop 3a5f
3a5f
[root@test ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
b45c34328e05        centos              "/bin/bash"         45 minutes ago      Up 44 minutes                           sharp_carson
[root@test ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
3a5f25a93754        centos              "/bin/sh -c 'while tr"   15 minutes ago      Exited (137) 42 seconds ago                       happy_goldstine
[root@test ~]# docker restart 3a5f
3a5f
[root@test ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
3a5f25a93754        centos              "/bin/sh -c 'while tr"   16 minutes ago      Up 4 seconds                            happy_goldstine

此外,docker restart 命令會將一個運行態的容器終止,然後再重新啟動它


進入容器

在使用 -d 參數時,容器啟動會進入後臺。某些時候需要進入容器進行操作

attach 命令

# docker run -idt centos
7cc5abd320d6e67cc8df2388e840bb168715afd3331364514be91e42be0d7304
# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
7cc5abd320d6        centos              "/bin/bash"         7 seconds ago       Up 4 seconds                            high_lamarr
# docker attach 7cc
[root@7cc5abd320d6 /]# 
[root@7cc5abd320d6 /]# exit
exit
[root@test ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@test ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
7cc5abd320d6        centos              "/bin/bash"         3 minutes ago       Exited (0) 13 seconds ago                       high_lamarr

但是使用 attach 命令有時候並不方便。當多個窗口同時 attach 到同一個容器的時候,所有窗口都會同步顯示。當某個窗口因命令阻塞時,其他窗口也無法執操作了。exit 會導致容器關閉

exec 命令

進入容器,退出時不會關閉容器

# docker run -idt centos
f433775528d9616212145b73cc10a04b5b8c0f383c9cd002fe1f6dc984462313
# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f433775528d9        centos              "/bin/bash"         7 seconds ago       Up 5 seconds                            berserk_bassi
# docker exec -it f4 /bin/bash
[root@f433775528d9 /]# 
[root@f433775528d9 /]# exit
exit
# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f433775528d9        centos              "/bin/bash"         3 minutes ago       Up 3 minutes                            berserk_bassi

-i ,-t , -d 參數
-i 選項 則讓容器的標準輸入保持打開
-t 選項 讓Docker分配一個偽終端 並綁定到容器的標準輸入上
-d 選項 在後臺執行一個進程。可以看出,如果一個命令需要長時間進程,使用-d參數會很快返回。
# docker exec -i f4 /bin/bash
date
Tue Jan 23 12:15:21 UTC 2018
echo $?
0
exit
# docker exec -t f4 /bin/bash
[root@f433775528d9 /]# date


^C
# docker exec -it f4 /bin/bash
[root@f433775528d9 /]# date
Tue Jan 23 12:18:21 UTC 2018
[root@f433775528d9 /]# exit
exit


刪除容器

可以使用 docker rm 來刪除一個處於終止狀態的容器

# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
f433775528d9        centos              "/bin/bash"         29 minutes ago      Up 29 minutes                                   berserk_bassi
7cc5abd320d6        centos              "/bin/bash"         34 minutes ago      Exited (0) 32 minutes ago                       high_lamarr
[root@test ~]# docker rm 7cc
7cc
[root@test ~]# docker rm f43
Error response from daemon: You cannot remove a running container f433775528d9616212145b73cc10a04b5b8c0f383c9cd002fe1f6dc984462313. Stop the container before attempting removal or use -f
[root@test ~]# docker rm -f f43
f43

如果要刪除一個運行中的容器,可以添加 -f 參數


清理所有處於終止狀態的容器

如果數量太多要一個個刪除可能會很麻煩,用 docker rm $( docker ps -aq ) 可以全部處理掉



自定義鏡像

docker commit

? 使用鏡像啟動容器,在該容器基礎上修改

? 另存為另一個鏡像


案例 1

基於centos鏡像使用commit創建新的鏡像文件

配置yum源 安裝基礎工具

# docker run -it centos
[root@7ffa443a9898 /]# rm -rf /etc/yum.repos.d/C*
[root@7ffa443a9898 /]# cat > /etc/yum.repos.d/yum.repo <<EOF
> [yum]
> name=yum 
> baseurl=http://192.168.4.254/rhel7
> gpgcheck=0
> EOF
[root@7ffa443a9898 /]# yum repolist
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
repo id                                repo name                          status
yum                                    yum                                4620
repolist: 4620

[root@7ffa443a9898 /]# yum provides ifconfig
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
yum/filelists_db                                         | 3.2 MB     00:00     
net-tools-2.0-0.17.20131004git.el7.x86_64 : Basic networking tools
Repo        : yum
Matched from:
Filename    : /sbin/ifconfig
[root@7ffa443a9898 /]# yum -y install net-tools-2.0-0.17.20131004git.el7.x86_64
[root@7ffa443a9898 /]# yum provides vim     
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
2:vim-enhanced-7.4.160-1.el7.x86_64 : A version of the VIM editor which includes
                                    : recent enhancements
Repo        : yum
Matched from:
Provides    : vim = 7.4.160-1.el7

[root@7ffa443a9898 /]# yum -y install vim
[root@7ffa443a9898 /]# exit
exit
# docker ps -qa 
7ffa443a9898
# docker commit 7ffa443a9898 myos:latest        //自定義鏡像文件
sha256:d2b307795b544d9ee7529dea3ebdcd5028036ed05ceefbcd02c901ef56ad3318
# docker images | grep myos
myos                 latest              d2b307795b54        50 seconds ago      386 MB
# docker run -it myos                    // 運行 自定義鏡像文件
[root@54649cf632cc /]# yum repolist
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
repo id                                repo name                          status
yum                                    yum                                4620
repolist: 4620


使用 Dockerfile 自定義鏡像

? Dockerfile語法格式

– FROM:基礎鏡像

– MAINTAINER:鏡像創建者信息

– EXPOSE:開放的端口

– ENV:設置變量

– ADD:復制文件到鏡像

– RUN:制作鏡像時執行的命令,可以有多個

– WORKDIR:定義容器默認工作目錄

– CMD:容器啟動時執行的命令,僅可以有一條CMD


案例2

基於centos鏡像使用Dockerfile文件創建新的鏡像文件

# mkdir test
# cd test/
# cp /etc/yum.repos.d/yum.repo yum.repo
# vim Dockerfile 
    FROM centos
    RUN rm -rf /etc/yum.repos.d/*
    ADD yum.repo  /etc/yum.repos.d/yum.repo
    RUN yum -y install net-tools psmisc vim iproute
    CMD [ "/bin/bash" ]

 #docker build -t myos:test .
# docker run -itd myos:test
4535d05df622a60d14ee995cf2a7a53d75dd480a96c2f921cde027d6f1797f55
# docker exec -it 4535 /bin/bash
[root@4535d05df622 /]# yum repolist 
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
repo id                                                   repo name                                                 status
docker                                                    docker                                                       2
yum                                                       yum                                                       4620
repolist: 4622


案例3

基於剛剛建立myos:test 鏡像 創建 部署Apache 服務 鏡像

# mkdir httpd
# cd httpd/
# vim Dockerfile
    FROM myos:test
    RUN yum -y install httpd
    ADD index.html  /var/www/html/index.html
    ENV EnvironmentFile=/etc/sysconfig/httpd
    CMD [ "/usr/sbin/httpd","-DFOREGROUND" ]
# docker build -t myos:httpd .
# docker run -d -p 80:80 myos:httpd
# curl  http://192.168.4.1
hello world


案例4

基於剛剛建立myos:test 鏡像 創建 部署sshd 服務 鏡像

# mkdir ssh
# cd ssh/
# vim Dockerfile
    FROM myos:test
    RUN yum -y install openssh-server 
    ENV EnvironmentFile=/etc/sysconfig/sshd
    RUN /usr/sbin/sshd-keygen &> /dev/null
    RUN echo '123' | passwd --stdin root
    EXPOSE 22
    CMD [ "/usr/sbin/sshd","-D" ]
# docker build -t myos:sshd .
# docker run -d -p 222:22 myos:sshd
# ssh -X  -p 222 [email protected]
    The authenticity of host '[192.168.4.1]:222 ([192.168.4.1]:222)' can't be established.
    ECDSA key fingerprint is 7d:c1:ca:40:0d:1d:c4:78:9c:0a:e1:1b:5d:b9:30:60.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '[192.168.4.1]:222' (ECDSA) to the list of known hosts.
    [email protected]'s password: 
    X11 forwarding request failed on channel 0
[root@015c6cab3064 ~]#


案例5

基於剛剛建立myos:test 鏡像 創建 部署 同時使用 ssh 和 apache 服務鏡像# mkdir httpdandssh

# cd httpdandssh/
# vim start.sh
#!/bin/bash
    EnvironmentFile=/etc/sysconfig/sshd
    /usr/sbin/sshd -D &
    EnvironmentFile=/etc/sysconfig/httpd
    /usr/sbin/httpd -DFOREGROUND &
    wait
# vim Dockerfile
    FROM myos:test
    RUN yum -y install openssh-server httpd
    ADD index.html  /var/www/html/index.html
    RUN /usr/sbin/sshd-keygen &> /dev/null
    RUN echo '123' | passwd --stdin root
    ADD start.sh /etc/init.d/start.sh
    RUN chmod 755 /etc/init.d/start.sh
    EXPOSE 22 80
    CMD [ "/etc/init.d/start.sh" ]
# cp ../httpd/index.html index.html
# docker build -t httpd:sshd .
# docker run -d -p 222:22 -p 80:80 httpd:sshd

# curl http://192.168.4.1
    hello world
# ssh -X -p 222 [email protected]
    The authenticity of host '[192.168.4.1]:222 ([192.168.4.1]:222)' can't be established.
    ECDSA key fingerprint is 29:cf:ac:95:4d:d7:2b:36:10:d1:e9:c6:31:7e:72:c7.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '[192.168.4.1]:222' (ECDSA) to the list of known hosts.
    [email protected]'s password: 
    X11 forwarding request failed on channel 0
[root@f072715497ba ~]# exit
logout
Connection to 192.168.4.1 closed.


Docker 倉庫

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

註冊服務器 registry 基礎概念

共享鏡像的一臺服務器(鏡像化的一臺服務器)

技術分享圖片


Docker Hub


目前 Docker 官方維護了一個公共倉庫 Docker Hub,其中已經包括了超過 15,000的鏡像。大部分需求,都可以通過在Docker Hub 中直接下載鏡像來實現。

登錄

可以通過執行docker login 命令來輸入用戶名、密碼和郵箱來完成註冊和登錄。註冊成功後,本地用戶目錄的 .dockercfg 中將保存用戶的認證信息。

基本操作

用戶無需登錄即可通過docker search 命令來查找官方倉庫中的鏡像,並利用docker pull 命令來將它下載到本地。


私有倉庫


有時候使用Docker Hub 這樣的公共倉庫可能不方便,用戶可以創建一個本地倉庫供私人使用。

# vim /etc/docker/daemon.json
# cat /etc/docker/daemon.json
{
    "insecure-registries" : ["192.168.4.1:5000"]
}

# systemctl restart docker
在安裝了Docker 後,可以通過獲取官方 registry 鏡像來運行
# docker run -id -p 5000:5000 registry
創建好私有倉庫之後,就可以使用docker tag 來標記一個鏡像,然後推送它到倉庫,別的機器上就可以下載下來了。
例如私有倉庫地址為192.168.4.1:5000
# docker tag busybox:latest 192.168.4.1:5000/busybox
# docker tag myos:test 192.168.4.1:5000/myos_test
# docker tag httpd:sshd 192.168.4.1:5000/httpd_sshd
使用docker push	上傳標記的鏡像
# docker push 192.168.4.1:5000/busybox
The push refers to a repository [192.168.4.1:5000/busybox]
779f37a09c89: Pushed 
latest: digest: sha256:4efd5033df5ddf3cff692505ae2a8e6d492014dbadd2f7281ccda9f744d41901 size: 527
[root@test httpdandssh]# docker push 192.168.4.1:5000/myos_test
The push refers to a repository [192.168.4.1:5000/myos_test]
8202e413fce3: Pushed 
0d281e60bd3c: Pushed 
b41d6696cce4: Pushed 
0aeb287b1ba9: Pushed 
latest: digest: sha256:860417d703ab3dce337a7f69ccaa417b67842729114d9f34f3760525e4e8a604 size: 1155
[root@test httpdandssh]# docker push 192.168.4.1:5000/httpd_sshd
The push refers to a repository [192.168.4.1:5000/httpd_sshd]
67de9bddfeb9: Pushed 
7ed802e5e1cf: Pushed 
7fa005843c99: Pushed 
c68f5228f676: Pushed 
0b433cb3a604: Pushed 
1e0fef9107ab: Pushed 
8202e413fce3: Mounted from myos_test 
0d281e60bd3c: Mounted from myos_test 
b41d6696cce4: Mounted from myos_test 
0aeb287b1ba9: Mounted from myos_test 
latest: digest: sha256:5ac74ff037126e46123abe22ce81b56879e9b916e191809303b9efedacf6d85d size: 2403
用 curl 查看倉庫中的鏡像。
# curl -XGET "http://192.168.4.1:5000/v2/_catalog"
{"repositories":["busybox","httpd_sshd","myos_test"]}
# curl -XGET "http://192.168.4.1:5000/v2/busybox/tags/list"
{"name":"busybox","tags":["latest"]}
# curl -XGET "http://192.168.4.1:5000/v2/httpd_sshd/tags/list"
{"name":"httpd_sshd","tags":["latest"]}
使用啟動倉庫中的鏡像
# docker run -it 192.168.4.1:5000/busybox
/ # 
/ # 
/ #



Docker 入門