- 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 | 傳統虛擬化技術(KVM) |
---|---|---|
啓動速度 | 很是快(秒級) | 慢(分鐘級) |
磁盤使用(模板文件) | 小(MB) | 大(GB) |
性能 | 通常於宿主機 | 比宿主機弱 |
單機系統支持量 | 大(千計) | 小(十計) |
管理及應用 | 更輕鬆的遷移和擴展 |
- Docker是基於Linux 64bit的,沒法在32bit的linux/Windows/unix環境下使用
- LXC(Linux Container)是基於cgroup等linux kernel功能的,所以container的guest系統(Guest是指讓給客人訪問電腦系統的賬戶)只能是linux base的
- 隔離性相比KVM之類的虛擬化方案仍是有些欠缺,全部container公用一部分的運行庫
- 網絡管理相對簡單,主要是基於namespace隔離
- cgroup的cpu和cpuset提供的cpu功能相比KVM的等虛擬化方案相比難以度量(因此dotcloud主要是按內存收費)
- Docker對disk的管理比較有限
- container隨着用戶進程的中止而銷燬,container中的log等用戶數據不便收集
- Docker 隔離性沒有傳統虛擬化好,KVM等屬於徹底隔離
摘自:https://baike.baidu.com/item/Docker/13344470?fr=aladdin#1_4node
- 文件的層次結構,以及包含如何運行容器的元數據, Dockerfile中的每條命令都會在文件系統中建立一個新的層次結構,文件系統在這些層次上構建起來,鏡像就構建於這些聯合的文件系統之上。
- Docker 鏡像就是一個只讀的模板,鏡像能夠用來建立 Docker 容器。Docker 提供了一個很簡單的機制來建立鏡像或者更新現有的鏡像,用戶甚至能夠直接從其餘人那裏下載一個已經作好的鏡像來直接實現。
- 容器是從鏡像建立的運行實例。它能夠被啓動、開始、中止、刪除。每一個容器都是相互隔離的、保證安全的平臺。能夠把容器看作是一個簡易版的 Linux 環境,Docker 利用容器來運行應用。
- 倉庫是集中存放鏡像文件的場所,倉庫註冊服務器(Registry)上每每存放着多個倉庫,每一個倉庫中又包含了多個鏡像,每一個鏡像有不一樣的標籤(tag)。
- 倉庫分爲public registry和private registry
- 目前,最大的公開倉庫是 Docker Hub(docker公司運營),存放了數量龐大的鏡像供用戶下載。
- Docker倉庫用來保存咱們的images,當咱們建立了本身的image以後咱們就可使用push命令將它上傳到公有或者私有倉庫,這樣下次要在另一臺機器上使用這個image時候,只須要從倉庫上pull下來便可。
- 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
- linux 內核從Linux 2.4.19 版本開始引入namespace的概念。其目的是做系統資源隔離,經過特定的方法使得namespace中的進程看起來擁有本身的全局系統資源(global system resource)。
linux內核中共實現的六種隔離:linux
- mount namespaces :Linux 2.4.19版本內核引入;主要用於隔離文件系統掛載點;使每一個容器看上去都有整個文件系統
- UTS namespaces : LInux 2.6.19版本內核引入;主要用於隔離nodename和domainname兩個系統標識;使每一個容器都有本身的hostname和domainname
- IPC namespaces :Linux 2.6.19版本內核引入;主要用於隔離信號量,消息隊列,共享內存;使只有在同一個IPC namespace 的進程之間才能互相通訊; IPC(Inter-Process Communication,進程間通訊)
- PID namespaces :Linux2.6.24版本內核引入;主要用於隔離進程ID;使每一個PID namespace 中的進程能夠有其獨立的PID,每一個容器能夠有PID爲1的root進程;同一進程在不一樣PID namespace中有不一樣的PID;容器中每一個進程都有兩PID 容器中的PID和宿主機中的PID
- Network namespaces:Linux2.6.29版本內核引入;主要用於隔離系統網絡資源;使每一個容器都有其獨立的網絡設備,IP地址,端口號,IP路由表等
- User namespaces :Linux3.8版本內核引入;主要用於隔離用戶和用戶組ID;使每個進程的User ID 和Group ID 在User namespace 內外能夠是不一樣的;使得每個進程在User namespace裏面有root權限,可是在User namespace外面卻沒有root的權限
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
╭─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(原名文件保留)
╭─root@localhost.localdomain ~ ╰─➤ docker image pull busybox
# docker image pull --help Usage: docker image pull [OPTIONS] NAME[:TAG|@DIGEST] ##注意:若是在拉取鏡像的時候只指定了REPOSITORY的話,默認拉取的是tag爲latest的版本
╭─root@localhost.localdomain ~ ╰─➤ docker image list REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest db8ee88ad75f 3 weeks ago 1.22MB
╭─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
方法一:使用-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
方法一:使用-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
docker image rm busybox:latest
╭─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
╭─root@localhost.localdomain ~ ╰─➤ docker image prune -f Total reclaimed space: 0B
╭─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
-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
╭─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
╭─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
╭─root@localhost.localdomain ~ ╰─➤ docker inspect db206796c1a0 ...#詳細信息
方法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",
╭─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
╭─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
╭─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
╭─root@du-z ~ ╰─➤ docker stop 2ed61f50ef50 2ed61f50ef50
╭─root@du-z ~ ╰─➤ docker kill 2ed61f50ef50 2ed61f50ef50
- kill: 強硬退出,直接退出 -9
- stop: 優雅退出 -15 ,給10秒鐘退出準備,10秒後 kill -9
╭─root@du-z ~ ╰─➤ docker container logs nginx1
# 持續監聽日誌 ╭─root@du-z ~ ╰─➤ docker container logs nginx1 -f
╭─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
╭─root@du-z ~ ╰─➤ docker port b4b75dcb00cc 80/tcp -> 192.168.137.3:32768
- 端口映射使容器能夠外部訪問
注意:使用-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 :::*
注意: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 :::*
注意: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 :::*
╭─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 經過兩種方式爲容器公開鏈接信息:
- 環境變量
- 更新 /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
- 製做鏡像的兩種方法:1.Dockerfile構建鏡像 ,2.commit製做鏡像
- Dockerfile構建鏡像:http://www.javashuo.com/article/p-artyrdlm-cg.html
第一步:運行容器
╭─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鏡像(查看鏡像)
╭─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