docker從入門到放棄

Docker介紹


Docker容器技術於2013年作爲開源Docker引擎推出。是一個開源的應用容器引擎,基於 Go 語言並遵從Apache2.0協議開源。基於 Linux 內置的 Namespace 和 CGroup 等系統內隔離機制而抽象出來的一種輕虛擬化技術。

爲什麼用Docker


l 更快速的交付和部署:

對開發和運維人員來說,最希望的就是一次創建或配置,可以在任意地方正常運行 ,解決開發環境和生產環境不一致的問題。

l 更輕鬆的遷移和擴展:

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

l 更高的資源利用率(微服務)

Docker 對系統資源的利用率很高,一臺主機上可以同時運行數千個 Docker 容器

Docekr應用場景


場景一:節省項目環境部署時間

1.單項目打包

每次部署項目到測試、生產等環境,都要部署一大堆依賴的軟件、工具,而且部署期間出現問題機率很大,不經意就花費了很長時間。

Docker主要理念就是環境打包部署,可在任意DockerEngine運行。前期我們只需要將每個項目環境打包到鏡像,push到鏡像倉庫,當有需要部署這個項目時,直接pull鏡像啓動容器,這個項目就可以訪問了!一次構建多次部署,一勞永逸。

2.整套項目打包

有一個產品可以整套部署到客戶那裏,以往都是派一名實施工程師到客戶那部署。如果用了Docker,我們可以前期將這套項目封裝打包起來,實現一鍵部署,分分鐘鍾搞定,就不需要再派人過去了。比如官方的DockerCompose編排工具。

3.新開源技術試用

直接從公共鏡像倉庫pull項目官方做好鏡像啓動容器

場景二:環境一致性

Docker將項目環境打包成鏡像,可以在任何DockerEngine上浪。此時Docker就是我們這些項目的基石,Docker可移植性,保持運行狀態一致性

場景三:持續集成

一個項目版本快速迭代的測試場景,需要一個合理的CI(持續集成)/CD(持續部署)環境支撐。CI/CD是一個週期性自動化項目測試流程,包括構建、部署、測試、發佈等工作,很少需要人工干預。

場景四:微服務

儘可能細粒度拆分業務程序架構,由多個獨立服務組成業務系統。一個容器一個服務,容器之間相互隔離

場景五:彈性伸縮

容器集羣化管理已經有成熟的解決方案,比如:官方的Swarm,谷歌的K8S

容器和虛擬機


虛擬機(Virtual Machine)指通過軟件模擬的具有完整硬件系統功能的、運行在一個完全隔離環境中的完整計算機系統。在實體計算機中能夠完成的工作在虛擬機中都能夠實現。在計算機中創建虛擬機時,需要將實體機的部分硬盤和內存容量作爲虛擬機的硬盤和內存容量。每個虛擬機都有獨立的CMOS、硬盤和操作系統,可以像使用實體機一樣對虛擬機進行操作。
Vm管理系統 Hyper-V、Xen以及KVM
https://docs.microsoft.com/zh-cn/virtualization/hyper-v-on-windows/about/
windwos家庭版安裝Hyper-V,放在 自定義.bat 管理員運行,重啓生效

pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL

Docker架構設計圖
docker從入門到放棄

Docker概念

鏡像(Image)

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

容器(Container)

Docker 利用容器(Container)來運行應用。容器是從鏡像創建的運行實例。它可以被啓動、開始、停止、刪除。每個容器都是相互隔離的。

文件系統隔離技術使得Docker成爲了一個非常有潛力的虛擬化技術。在容器中可以對文件進行修改、刪除、創建。

倉庫(Registry)

倉庫(Repository)是集中存放鏡像文件的場所。倉庫分爲公開倉庫(Public)和私有倉庫(Private)兩種形式。最大的公開倉庫是 Docker Hub,存放了數量龐大的鏡像供用戶下載。

官方倉庫地址:https://hub.docker.com

Docker安裝

Windwos安裝

https://docs.docker.com/docker-for-windows/install/

Centos安裝

關閉防火牆

systemctl stop firewalld

關閉selinux

獲取selinux狀態

[root@instance-xkxy07le ~]# getenforce
Disabled

關閉selinux

vim /etc/selinux/config
SELINUX=disabled

安裝依賴包

yum install -y  yum-utils device-mapper-persistent-data lvm2

添加 yum 軟件源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

查看可安裝的版本

[root@instance-xkxy07le ~]# yum list docker-ce --showduplicates | sort -r
Loaded plugins: langpacks, versionlock
Installed Packages
Excluding 1 update due to versionlock (use "yum versionlock status" to show it)
docker-ce.x86_64            3:19.03.4-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.4-3.el7                    @docker-ce-stable
docker-ce.x86_64            3:19.03.3-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.2-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.1-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.0-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.9-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.8-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.7-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.6-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.5-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.4-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.3-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.2-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.1-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.0-3.el7                    docker-ce-stable 
docker-ce.x86_64            18.06.3.ce-3.el7                   docker-ce-stable 
docker-ce.x86_64            18.06.2.ce-3.el7                   docker-ce-stable 
docker-ce.x86_64            18.06.1.ce-3.el7                   docker-ce-stable 
docker-ce.x86_64            18.06.0.ce-3.el7                   docker-ce-stable 
docker-ce.x86_64            18.03.1.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            18.03.0.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.12.1.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.12.0.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.09.1.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.09.0.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.06.2.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.06.1.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.06.0.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.03.3.ce-1.el7                   docker-ce-stable 
docker-ce.x86_64            17.03.2.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable 

yum安裝docker

1. 默認安裝最新版本

yum install docker-ce

2. 安裝指定版本

yum install docker-ce-3:18.09.5-3.el7

啓動docker

systemctl start docker

配置阿里雲加速器

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors?accounttraceid=07db9e1fa3004ddba41d91d2cfcb73a4cldn

Docker操作鏡像命令

[root@instance-xkxy07le ~]# docker container --hlep
unknown flag: --hlep
See '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
  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
  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
  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
  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
  update      Update configuration of one or more containers
  wait        Block until one or more containers stop, then print their exit codes

Run 'docker container COMMAND --help' for more information on a command.

1.查找鏡像

docker search redis

2.拉取鏡像

docker pull redis

3.查看本地鏡像

docker image ls

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              de25a81a5a0b        2 weeks ago         98.2MB

4.刪除鏡像

docker image rm redis

5.鏡像打包成tar文件

docker image save de25a81a5a0b -o redis.tar

6.tar文件加載到鏡像中

docker image load -i redis.tar

7.給image打標籤

docker image tag IMAGEID  REPOSITORY:VERSION

8.刪除未使用的鏡像

 docker image prune

9.Dockerfile構建鏡像

docker image build

10.查看鏡像的詳情

docker inspect

Docker操作容器命令

[root@instance-xkxy07le ~]# docker image --help
Usage:  docker image COMMAND
Manage images
Commands:
  build       Build an image from a Dockerfile
  history     Show the history of an image
  import      Import the contents from a tarball to create a filesystem image
  inspect     Display detailed information on one or more images
  load        Load an image from a tar archive or STDIN
  ls          List images
  prune       Remove unused images
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a 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

1.列出容器

[root@instance-xkxy07le ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
54e39c3af532        redis:latest        "docker-entrypoint.s…"   3 minutes ago       Up 3 minutes        0.0.0.0:6379->6379/tcp   amazing_sinoussi

docker container ps

-a :顯示所有的容器,包括未運行的。
-f :根據條件過濾顯示的內容。
--format :指定返回值的模板文件。
-l :顯示最近創建的容器。
-n :列出最近創建的n個容器。
--no-trunc :不截斷輸出。
-q :靜默模式,只顯示容器編號。
-s :顯示總的文件大小。

輸出詳情介紹:

CONTAINER ID:容器 ID。
IMAGE:使用的鏡像。
COMMAND:啓動容器時運行的命令。
CREATED:容器的創建時間。
STATUS:容器狀態。
狀態有7種:
1.created(已創建)
2.restarting(重啓中)
3.running(運行中)
4.removing(遷移中)
5.paused(暫停)
6.exited(停止)
7.dead(死亡)

2.創建一個新的容器並運行一個命令

[root@instance-xkxy07le ~]# docker run -p 6379:6379 -d redis:latest redis-server
54e39c3af532dc183204381a86f41ae3b7f18c754a8d5abae1f911aa83b92cea

-d, --detach=false, 指定容器運行於前臺還是後臺,默認爲false
-i, --interactive=false, 打開STDIN,用於控制檯交互
-t, --tty=false, 分配tty設備,該可以支持終端登錄,默認爲false
-u, --user="", 指定容器的用戶
-a, --attach=[], 登錄容器(必須是以docker run -d啓動的容器)
-w, --workdir="", 指定容器的工作目錄
-c, --cpu-shares=0, 設置容器CPU權重,在CPU共享場景使用
-e, --env=[], 指定環境變量,容器中可以使用該環境變量
-m, --memory="", 指定容器的內存上限
-P, --publish-all=false, 指定容器暴露的端口
-p, --publish=[], 指定容器暴露的端口
-h, --hostname="", 指定容器的主機名
-v, --volume=[], 給容器掛載存儲卷,掛載到容器的某個目錄
--volumes-from=[], 給容器掛載其他容器上的卷,掛載到容器的某個目錄
--cap-add=[], 添加權限,權限清單詳見:https://linux.die.net/man/7/capabilities
--cap-drop=[], 刪除權限,權限清單詳見: https://linux.die.net/man/7/capabilities
--cidfile="", 運行容器後,在指定文件中寫入容器PID值,一種典型的監控系統用法
--cpuset="", 設置容器可以使用哪些CPU,此參數可以用來容器獨佔CPU
--device=[], 添加主機設備給容器,相當於設備直通
--dns=[], 指定容器的dns服務器
--dns-search=[], 指定容器的dns搜索域名,寫入到容器的/etc/resolv.conf文件
--entrypoint="", 覆蓋image的入口點
--env-file=[], 指定環境變量文件,文件格式爲每行一個環境變量
--expose=[], 指定容器暴露的端口,即修改鏡像的暴露端口
--link=[], 指定容器間的關聯,使用其他容器的IP、env等信息
--lxc-conf=[], 指定容器的配置文件,只有在指定--exec-driver=lxc時使用
--name="", 指定容器名字,後續可以通過名字進行容器管理,links特性需要使用名字
--net="bridge", 容器網絡設置:
1.bridge 使用docker daemon指定的網橋
2.host //容器使用主機的網絡
3.container:NAME_or_ID >//使用其他容器的網路,共享IP和PORT等網絡資源
4.none 容器使用自己的網絡(類似--net=bridge),但是不進行配置
--privileged=false, 指定容器是否爲特權容器,特權容器擁有所有的capabilities
--restart="no", 指定容器停止後的重啓策略:
1.no:容器退出時不重啓
2.on-failure:容器故障退出(返回值非零)時重啓
3.always:容器退出時總是重啓
--rm=false, 指定容器停止後自動刪除容器(不支持以docker run -d啓動的容器)
--sig-proxy=true, 設置由代理接受並處理信號,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理

2.進入容器

[root@instance-xkxy07le ~]# docker exec -it 容器名/容器id /bin/bash
root@54e39c3af532:/data# hostname
54e39c3af532 

3. 查看容器的輸出日誌

docker  logs  容器名

4.查看容器的資源使用

docker  stats  容器名

--no-stream

5.查看容器的具體信息

docker inspect 容器名/容器id

6.cp 拷貝文件到容器

docker cp php.ini 容器名/容器id:/

7.查看容器運行的進程

 docker top 容器名/容器

8.停止/啓動/重啓

docker stop/start/restart  容器名/容器

9.刪除容器

docker rm  容器名/容器

10.刪除所有運行的容器container

docker rm -f $(docker ps -a | awk '{print $1}')

11.更新容器資源限制

docker update 容器名/容器

–blkio-weight Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)
–cpu-period Limit CPU CFS (Completely Fair Scheduler) period
–cpu-quota Limit CPU CFS (Completely Fair Scheduler) quota
–cpu-rt-period Limit the CPU real-time period in microseconds
–cpu-rt-runtime ALimit the CPU real-time runtime in microseconds
–cpu-shares , -c CPU shares (relative weight)
–cpus Number of CPUs
–cpuset-cpus CPUs in which to allow execution (0-3, 0,1)
–cpuset-mems MEMs in which to allow execution (0-3, 0,1)
–kernel-memory Kernel memory limit
–memory , -m Memory limit
–memory-reservation Memory soft limit
–memory-swap Swap limit equal to memory plus swap: ‘-1’ to enable unlimited swap
–restart Restart policy to apply when a container exits

數據持久化

將宿主機目錄掛載到容器目錄。

數據卷 是一個可供一個或多個容器使用的特殊目錄,它繞過 UFS,可以提供很多有用的特性:

數據卷 可以在容器之間共享和重用
對 數據卷 的修改會立馬生效
對 數據卷 的更新,不會影響鏡像
數據卷 默認會一直存在,即使容器被刪除

[root@instance-xkxy07le ~]# docker volume
Usage:  docker volume COMMAND
Manage volumes
Commands:
create      Create a volume
inspect     Display detailed information on one or more volumes
ls          List volumes
prune       Remove all unused local volumes
rm          Remove one or more volumes
Run 'docker volume COMMAND --help' for more information on a command.

創建一個數據卷

docker volume create my-vol

查看所有的 數據卷

docker volume ls

查看指定數據卷的信息

docker volume inspect my-vol

刪除數據卷

docker volume rm my-vol

無主的數據卷可能會佔據很多空間,要清理請使用以下命令

docker volume prune

查看數據卷的具體信息

docker inspect web

啓動一個掛載數據卷的容器

docker run  -d --name nginxweb  -p 80:80  -v /home/www:/usr/share/nginx/html  nginx 

網絡模式

Docker支持五種網絡模式

  • bridge
    默認網絡,Docker啓動後創建一個docker0網橋,默認創建的容器也是添加到這個網橋中;IP地址段是172.17.0.1/16

  • host

    容器不會獲得一個獨立的network namespace,而是與宿主機共用一個

  • none

    獲取獨立的network namespace,但不爲容器進行任何網絡配置。

  • container

    與指定的容器使用同一個network namespace,網卡配置也都是相同的。

  • 自定義

    自定義網橋,默認與bridge網絡一樣。

先創建一個docker0的網橋,使用veth pair創建一對虛擬網卡,一端放到新創建的容器中,並重命名eth0,另一端放到宿主機上,以veth+隨機7個字符串命名,並將這個網絡設備加入到docker0網橋中,網橋自動爲容器分配一個IP,並設置docker0的IP爲容器默認網關。所以容器默認網絡都加入了這個網橋,因此都可以彼此通信。同時在iptables添加SNAT轉換網絡段IP,以便容器訪問外網。

容器網絡訪問原理

Linux IP信息包過濾原理
Docker主要通過netfilter/iptables實現網絡通信。iptables由netfilter和iptables組成,netfilter組件是Linux內核集成的信息包過濾系統,它維護一個信息包過濾表,這個表用於控制信息包過濾處理的規則集。而iptables只是一個在用戶空間的工具,用於增刪改查這個過濾表的規則。

容器訪問外部

iptables -t nat -nL 

外部訪問容器

 iptables -t nat -nL 

橋接宿主機網絡

臨時生效:

# 網橋名稱
br_name=br0
# 添加網橋
brctl addbr $br_name
# 給網橋設置IP
ip addr add 192.168.1.120/24 dev $br_name
# 刪除已存在的eth0網卡配置
ip addr del 192.168.1.120/24 dev eth0
# 激活網橋
ip link set $br_name up
# 添加eth0到網橋
brctl addif $br_name eth0
還需要在Docker啓動時橋接這個網橋:
vi /etc/default/docker
DOCKER_OPTS="-b=br0"
service docker restart  

永久生效

# vi /etc/network/interfaces
auto eth0
iface eth0 inet static
auto br0
iface br0 inet static
address 192.168.1.120
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.1
bridge_ports eth0

配置固定IP

C_ID=$(docker run -itd --net=none ubuntu)
C_PID=$(docker inspect -f '{{.State.Pid}}' $C_ID)
# 創建network namespace目錄並將容器的network namespace軟連接到此目錄,以便ip netns命令讀取
mkdir -p /var/run/netns
ln -s /proc/$C_PID/ns/net /var/run/netns/$C_PID
# 添加虛擬網卡veth+容器PID,類型是veth pair,名稱是vp+容器PID
ip link add veth$C_PID type veth peer name vp$C_PID
# 添加虛擬網卡到br0網橋
brctl addif br0 veth$C_PID
# 激活虛擬網卡
ip link set veth$C_PID up
# 設置容器網絡信息
IP='192.168.1.123/24'
GW='192.168.1.1'
# 給進程配置一個network namespace
ip link set vp$C_PID netns $C_PID
# 在容器進程裏面設置網卡信息
ip netns exec $C_PID ip link set dev vp$C_PID name eth0
ip netns exec $C_PID ip link set eth0 up
ip netns exec $C_PID ip addr add $IP dev eth0
ip netns exec $C_PID ip route add default via 192.168.1.1

一鍵腳本

https://github.com/jpetazzo/pipework

容器SSH連接

# docker run -itd --name test01 centos:6
# docker attach test01
/# yum install openssh-server
/# passwd root
# docker commit test01 centos6_ssh
# docker run -itd --name test03 -p 2222:22 centos6_ssh

Dockerfile

指令

指令 描述
FROM 構建的新鏡像是基於哪個鏡像 例如:FROM centos:6
MAINTAINER 鏡像維護者姓名或郵箱地址 例如:MAINTAINER wangzhiqiang
RUN 構建鏡像時運行的Shell命令 例如: RUN [“yum”, “install”, “httpd”] RUN yum install httpd
CMD 運行容器時執行的Shell命令 例如: CMD [“-c”, “/start.sh”] CMD ["/usr/sbin/sshd", "-D"] CMD /usr/sbin/sshd –D
EXPOSE 聲明容器運行的服務端口 例如:EXPOSE 80 443
ENV 設置容器內環境變量 例如:ENV MYSQL_ROOT_PASSWORD 123456
ADD 拷貝文件或目錄到鏡像,如果是URL或壓縮包會自動下載或自動解 壓 ADD … ADD [“”,… “”] ADD https://xxx.com/html.tar.gz /var/www/html ADD html.tar.gz /var/www/html
COPY 拷貝文件或目錄到鏡像,用法同上 例如:COPY ./start.sh /start.sh
ENTRYPOINT 運行容器時執行的Shell命令 例如: ENTRYPOINT [“/bin/bash", “-c", “/start.sh"] ENTRYPOINT /bin/bash -c ‘/start.sh’
VOLUME 指定容器掛載點到宿主機自動生成的目錄或其他容器 例如: VOLUME ["/var/lib/mysql"]
USER 爲RUN、CMD和ENTRYPOINT執行命令指定運行用戶 USER [:] or USER [:] 例如:USER wangzhiqiang
WORKDIR 爲RUN、CMD、ENTRYPOINT、COPY和ADD設置工作目錄 例如:WORKDIR /data
HEALTHCHECK 健康檢查 HEALTHCHECK --interval=5m --timeout=3s \ CMD curl -f http://localhost/
ARG 在構建鏡像時指定一些參數 例如: FROM centos:6 ARG user # ARG user=root USER $user # docker build --build-arg user=wangzhiqiang Dockerfile .

CMD和ENTRYPOINT指令區別

  1. RUN在building時運行,可以寫多條
  2. CMD和ENTRYPOINT在運行container時運行,只能寫一條,如果寫多條,最後一條生效。
  3. CMD在run時可以被COMMAND覆蓋,ENTRYPOINT不會被COMMAND覆蓋,但可以指定—entrypoint覆蓋。

Build鏡像命令

使用Dockerfile文件構建鏡像

Usage: docker build [OPTIONS] PATH | URL | -
Options:
-t, --tag list # 鏡像名稱
-f, --file string # 指定Dockerfile文件位置

公共鏡像倉庫使用

1、註冊賬號
https://hub.docker.com
2、登錄Docker Hub
# docker login
或
# docker login --username=lizhenliang --password=123456
3、鏡像打標籤
# docker tag wordpress:v1 lizhenliang/wordpress:v1
4、上傳
# docker push lizhenliang/wordpress:v1
搜索測試:
# docker search lizhenliang
5、下載
# docker pull lizhenliang/wordpress:v1

搭建私有倉庫

Docker Hub作爲Docker默認官方公共鏡像;如果想自己搭建私有鏡像倉庫,官方也提供registry鏡像,使得搭建私有倉 庫非常簡單。

下載registry鏡像並啓動
# docker pull registry
# docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry
測試,查看鏡像倉庫中所有鏡像
# curl http://192.168.1.120:5000/v2/_catalog
{"repositories":[]}
配置私有倉庫可信任
# vi /etc/docker/daemon.json
{"insecure-registries":["192.168.1.120:5000"]}
# service docker restart
打標籤
# docker tag centos:6 192.168.1.120:5000/centos:6
上傳
# docker push 192.168.1.120:5000/centos:6
下載
# docker pull 192.168.1.120:5000/centos:6
列出鏡像標籤
# curl http://192.168.1.120:5000/v2/centos/tags/list
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章