- 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