首页 > 代码库 > docker学习笔记
docker学习笔记
什么是Docker
官网https://docs.docker.com/ 可参考http://blog.opskumu.com/docker.html Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口。LXC为Linux Container的简写
Docker组成(C/S)
? Docker Client
? Docker Server
Image镜像(只读加可写层)
Contaiiner容器(相对隔离)
Repository仓库
docker VS openstack
docker openstack
部署难度 非常简单 组件多,部署复杂
启动速度 秒级 分钟级
执行性能 近似物理系统 VM会暂用些资源
镜像体积 MB级 虚拟机镜像级
管理效率 管理简单 组件相互依赖,管理复杂
隔离性 隔离性高 彻底隔离
可管理性 单进程、不建议启动ssh 完整的系统管理
网络连接 比较弱 借助Neutron可以灵活组建各类网络架构
Docker提供了轻量级的虚拟化,它几乎没有额外开销,这个特性非常酷。
首先你可以在享有Docker带来的虚拟化层的时候却不用担心因此而带来的额外开销。
第二个优点是比之虚拟机,你能在单一机器上启动更多数量的容器。
另外一个强有力的影响是容器的启与停都能在几秒中完成。Docker公司的创始人, Solomon Hykes,曾经概括过Docker在单纯的LXC之上做了哪些事情。
下面这些Docker的使用场景,为你展示了如何借助Docker的强力,在非常低的额外开销的情况下,打造一个一致性的环境。
1. 简化配置 simplifying configuration 这是Docker公司宣传的Docker的主要使用场景。虚拟机的一个最大好处是能在你的硬件设施上运行各种配置不一样的平台。Docker在降低额外开销的情况下提供了同样的功能。它能让你将你的运行环境和配置放在代码里面然后部署。同一个Docker的配置可以使用在不同的环境里面。这样就降低了硬件要求和应用环境之间耦合度。 2. 代码流水线管理 code pipeline management 前一个场景对于管理代码的流水线起到了很大的作用。代码从开发者的机器到最终在生产环境上的部署,需要流过很多的中间环境。而每一个中间环境都有自己微小的差别,Docker给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得轻松不少。 3. 提升开发者效率 developer productivity 这就带来了一些额外的好处 - Docker能提升开发者的开发效率。如果你想看一个详细一点的例子,可以参考Aater在DevOpsDays Austin 2014 大会或者是DockerCon上的演讲。 不同开发者的环境中,我们想把两件事做好,但却各自差别不小。我们想让开发环境尽量贴近生产环境,我们想开发环境尽量的以便开发中的交互使用。 理想状态中,要达到第一个目标,我们需要将每一个服务跑在独自的虚拟机中以便显现生产环境中服务的运作状态。然而,我们却不想每次必须要需要网络连接,每次重新编译的时候远程连接上去干事情特别麻烦。这就是Docker做的特别好的地方,开发环境通常内存不足,没有像虚拟机那般贪婪的占用内存,Docker可以轻易的让几十个服务在Docker中跑起来。 4. 隔离应用 app isolation 有很多种原因会让你结果选择在一个机器上跑着不同的应用。一个场景便是早期描述的一个便于提高开发者开发效率,但是还有其他的场景。 有两个需要考虑的便是因为降低成本的需要而进行的服务器整合,和将一个一体化的应用渐进式的拆分成无耦合的单块的计划。如果你想了解为什么无耦合的应用十分重要,请参考这篇Steve Yege的论文。文中将Google和亚马逊做了比较。 5. 整合服务器 server consolidation 正如使用虚拟机来整合多个应用,Docker隔离应用的能力使Docker能整合多个服务器以达到降低成本的效果。由于没有多个操作系统的内存占用,以及能在多个实例之间共享没有使用的内存,Docker能比虚拟机方案提供更好的服务器整合。 6. 调试能力 debugging capabilities Docker提供了很多的工具,他们不一定只是只针对容器,但是他们针对容器这个概念却工作的十分好。他们同时也提供了十分有效的功能,这包括可以为容器设置检查点,设置版本,和查看两个容器之间的差别。这些特性在于查修bug的时候会十分有效。你可以在Docker拯救世界的文章里找到这一点的例证。 7. 多租户环境 Multi -tenancy 另外一个Docker有意思的使用场景是在多租户的应用中,可以避免关键应用的重写。我们一个特别的关于这个场景的例子是是为IoT的应用开发一个快速,易用的多租户环境。这种多租户的原代码库远超人想象的复杂,逻辑写死,接手太难。将一个应用重新架构不但消耗时间,也浪费金钱。 使用Docker,为每一个租户的应用层的多个实例创建隔离的环境简单且成本低廉。这之所以可能,跟Docker环境的启动速度和其高校的对比命令是有关的。 你可以在这里了解关于此场景的更多信息。 8. 快速开发 rapid deployment 在虚拟机之前,引入新的硬件资源需要耗费几天的时间。虚拟化技术将这个时间降到了几分钟,Docker通过只是为进程创建一个容器无需启动操作系统,将这个时间降到了几秒钟。这就是Google和Facebook都不得不用的黑科技。 你可以在你的数据中心创建销毁资源而无需担心重新启动的开销。通常数据中心的资源利用率为30%,依靠更加有效的资源分配将将这个数字提升不会很难。并且,创建一个新的实例能更加有效的实现资源分配。 还有更多的Docker的应用场景记录于各种文章里面。你可以在此发现更多的案例研究。 对于我们来说,使用Docker的动机永远是选择正确的工具应用到工作中。最有意思的部分是业务场景,然后我们在业务场景上发挥工具的最大效能。
dock安装配置
安装条件 You will need RHEL 6.5 or higher, with a RHEL 6 kernel version 2.6.32-431
or higher as this has specific kernel fixes to allow Docker to work.
eple源安装 #rpm -Uvh http://ftp.sjtu.edu.cn/fedora/epel/6/i386/epel-release-6-8.noarch.rpm #yum -y install docker-io #rpm -qa docker-io docker-io-1.7.1-2.el6.x86_64
修改镜像存放路径(按需,默认/var/lib/docker/)
#mkdir /dockerdata
#vi /etc/sysconfig/docker
other_args="--graph=/dockerdata"
# cp -r /var/lib/docker/* /dockerdata/
#/etc/init.d/docker start
镜像管理相关命令
#docker search centos 查找镜像
#docker pull centos 下载镜像
#docker rmi 删除镜像
#docker images 查看镜像
容器管理相关命令
docker run --name -h hostname 启动容器
docker stop CONTAINER ID 停止容器
docker ps [-a显示所有 ] [-l最近一个] 查看容器
docker rm 删除容器
docker exec /docker attach( 进不去导致容器停止) 进入容器
nsenter(unix-util包) 访问另外个进程名字空间
运行一个容器
# docker run centos /bin/echo "hello" #执行完命令后容器就退出
hello
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8a111bfc5490 centos "/bin/echo hello" 4 seconds ago Exited (0) 4 seconds ago stoic_noyce
运行一个容器并进入
#docker run -it --name mydocker1 centos /bin/bash
-t - 分配一个(伪)tty (link is external)
-i - 交互模式 (so we can interact with it)
centos - 使用 centos镜像
/bin/bash - 运行命令 bash shell
[root@eae3bf3b91e6 /]# exit #进入容器后退出
#docker ps -a #可以看到exit后容器也退出
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eae3bf3b91e6 centos "/bin/bash" 35 seconds ago Exited (0) 3 seconds ago mydocker1
8a111bfc5490 centos "/bin/echo hello" 2 minutes ago Exited (0) 2 minutes ago stoic_noyce
接下来玩一下nginx容器
# docker pull nginx
# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
nginx latest 61d205ea917c 9 days ago 182.5 MB
centos latest bac949ce964b 3 weeks ago 192.5 MB
#在nginx镜像上创建一个名为mynginx1的容器 -d daemon
# docker run -d --name mynginx1 nginx
7ffaad7d60b9b1a3b93276682d5b0e30126d9d7f80e8e26c67a84c3851bf071e
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7ffaad7d60b9 nginx "nginx -g ‘daemon of About a minute ago Up About a minute 80/tcp, 443/tcp mynginx1
eae3bf3b91e6 centos "/bin/bash" 11 minutes ago Exited (0) 10 minutes ago mydocker1
8a111bfc5490 centos "/bin/echo hello" 12 minutes ago Exited (0) 12 minutes ago stoic_noyce
进入容器
# docker attach 7ffaad7d60b9 无法进入,ctrl c后,容器也停止
#docker start 7ffaad7d60b9 将容器启动,换种方式
# docker inspect --format "{{.State.Pid}}" mynginx1
9301
===================================================================================
# ps -ef | grep nginx
root 9301 7947 0 11:17 ? 00:00:00 nginx: master process nginx -g
# docker inspect --format "{{.State.Pid}}" 7ffaad7d60b9
9301
===================================================================================
# nsenter --target 9301 --mount --uts --ipc --net --pid
root@7ffaad7d60b9:/# 已经进入到mynginx1容器,退出后容器不会退出
root@7ffaad7d60b9:/# ip ad
19: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:11:00:06 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.6/16 scope global eth0
inet6 fe80::42:acff:fe11:6/64 scope link
valid_lft forever preferred_lft forever
21: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
nsenter(unix-util包)访问另外个进程名字空间
Usage: nsenter [options] <program> [args...]
Options:
-t, --target <pid> target process to get namespaces from
-m, --mount [=<file>] enter mount namespace
-u, --uts [=<file>] enter UTS namespace (hostname etc)
-i, --ipc [=<file>] enter System V IPC namespace
-n, --net [=<file>] enter network namespace
-p, --pid [=<file>] enter pid namespace
-r, --root [=<dir>] set the root directory
-w, --wd [=<dir>] set the working directory
-F, --no-fork do not fork before exec‘ing <program>
docker网路访问
# iptables -L -t nat (默认做了nat,所以网络通)
# ifconfig docker0
docker0 Link encap:Ethernet HWaddr 5E:70:09:88:61:5B
inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::1819:93ff:fe59:28d1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:28 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1900 (1.8 KiB) TX bytes:468 (468.0 b)
root@7ffaad7d60b9:/# ip ro mynginx1容器
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.6
default via 172.17.42.1 dev eth0
主机与容器的端口映射
随机映射
docker run -P
指定映射
docker run -p hostPort:containerPort 主机端口:容器端口
docker run -p ip:hostPort:containerPort 主机多个ip时
docker run -p ip:: containerPort 随机
docker run -p hostPort:containerPort -p hostPort:containerPort 多个映射
# docker run -d -P --name mynginx2 nginx
8f016ed6d76f47a59565ded710f5862834ca23dd45e152763deda128e77aaafc
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8f016ed6d76f nginx "nginx -g ‘daemon of 4 seconds ago Up 3 seconds 0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp mynginx2
7ffaad7d60b9 nginx "nginx -g ‘daemon of 28 minutes ago Up 20 minutes 80/tcp, 443/tcp mynginx1
==访问宿主机的32768端口即容器的80端口
# docker run -d -p 8080:80 --name mynginx3 nginx
15799cec6c5ccaea185feb9482dd5e0873e330387f393a075871a0da2ec2ca80
[root@node87 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
15799cec6c5c nginx "nginx -g ‘daemon of 5 seconds ago Up 4 seconds 443/tcp, 0.0.0.0:8080->80/tcp mynginx3
8f016ed6d76f nginx "nginx -g ‘daemon of 3 minutes ago Up 3 minutes 0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp mynginx2
7ffaad7d60b9 nginx "nginx -g ‘daemon of 31 minutes ago Up 24 minutes 80/tcp, 443/tcp mynginx1
docker资源隔离 (LXC (容器技术)Kernel namespace)
LXC所实现的隔离性主要是来自kernel的namespace, 其中pid, net, ipc, mnt, uts 等namespace将container的进程, 网络, 消息, 文件系统和hostname 隔离开。 namespace pid net lpc(interprocess communication - IPC内部进程通信) mnt uts user 有了以上 6 种 namespace 从进程、网络、IPC、文件系统、UTS 和用户角度的隔离,一个 container 就可以对外展现出一个独立计算机的能力,
并且不同 container 从 OS 层面实现了隔离。 然而不同 namespace 之间资源还是相互竞争的,仍然需要类似 ulimit 来管理每个 container 所能使用的资源 - cgroup。 docker资源限制 (cgroup来实现容器资源限制) CPU、 内存 (磁盘还不行) # pwd /opt/docker-file/stress #ls Dockerfile epel-6.repo #cat Dockerfile FROM centos ADD epel-6.repo /etc/yum.repos.d/ RUN yum install stress -y ENTRYPOINT ["stress"] #docker build -t stress.iso /opt/docker-file/stress/ #docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE stress.iso latest f82a64466a80 12 seconds ago 211.2 MB #docker run --help | grep "CPU shares" -c, --cpu-shares=0 CPU shares (relative weight) #docker run -it --rm stress.iso --cpu 1 --rm容器执行完删除 stress: info: [1] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd (--cpu 1几个cpu) 之后查看主机cpu使用情况,再docker run一个,发现各占50% #docker run --help | grep "cpuset" --cpuset-cpus= CPUs in which to allow execution (0-3, 0,1)指定cpu root@test85 stress]# docker run -it --rm --cpuset-cpus=0 stress.iso --cpu 1 stress: info: [1] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd #docker run -it --help | grep "Memory limit" -m, --memory= Memory limit #docker run -it --rm -m 128m stress.iso --vm 1 --vm-bytes 256m --vm-hang 0 #设置256后自动压退
Usage: docker stats [OPTIONS] CONTAINER [CONTAINER...]
CONTAINER CPU % MEM USAGE/LIMIT MEM % NET I/O
fbb01c49d9c9 0.00% 155.5 MB/1.953 GB 7.96% 141.3 MB/141.3 MB
docker网络
docker网络 1. host模式 :(配置没这参数了) docker run 使用 --net=host指定 docker使用的网络实际上和宿主机一样 2. container模式:(配置没这参数了) 使用 --net=container:container_id/container_name 多个容器使用共同的网络,看到的ip是一样的。 3. none 模式(配置没这参数了) 使用 --net=none指定 这种模式下,不会配置任何网络。 4. bridge模式(一般都使用这种) 使用 --net=bridge指定 默认模式,不会指定 此模式会为每个容器分配一个独立的network namespace Docker使用Linux桥接,在主机虚拟一个docker0网络接口,在主机中运行命令查看: root@test85 stress]# brctl show bridge name bridge id STP enabled interfaces docker0 8000.000000000000 no [root@test85 stress]# ifconfig docker0 docker0 Link encap:Ethernet HWaddr 00:00:00:00:00:00 inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::6cc4:fff:fe53:1c12/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3319 errors:0 dropped:0 overruns:0 frame:0 TX packets:3467 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:168804 (164.8 KiB) TX bytes:14935069 (14.2 MiB) docker启动一个Container时会会根据docker0的网段划分container的IP,docker0是每个container的网关。
docker数据管理
dockfile中用不了,违背的一处构建,到处运行 数据卷 -v data -v src:dst 数据卷容器 --volumes-from
数据卷
#docker run -it --name mycentos1 --hostname test1 -v /data centos
[root@test1 /]# ls /data/
[root@test1 /]# touch /data/dockertest
[root@test1 /]# exit
# docker inspect -f {{.Volumes}} mycentos1
map[/data:/dockerdata/volumes/eac0da3c84975e989b6017a4bbf92076fd3b13af1e4f54981ee2bcce4290dc02/_data]
#ls -l /dockerdata/volumes/eac0da3c84975e989b6017a4bbf92076fd3b13af1e4f54981ee2bcce4290dc02/_data/
total 0
-rw-r--r-- 1 root root 0 Apr 6 12:02 dockertest
==>该目录不会因为容器删除而被删除,容器停止时也可以被其他容器使用
#mkdir /test2
#docker run -it --name mycentos2 --hostname test2 -v /test2:/data centos #容器上创建/data目录挂属主的/test2目录 可加:ro
[root@test2 /]# touch /data/dockertest2
[root@test2 /]# exit
#ls /test2/
dockertest2
数据卷容器
# docker run -it --name mycentos3 --hostname test3 --volumes-from mycentos2 centos
[root@test3 /]# ls /data
dockertest2
[root@test3 /]# touch /data/dockertest3volfrom
[root@test3 /]# exit
#ls /test2
dockertest2 dockertest3volfrom
docker镜像构建
手动构建
dockerfile构建
手动构建nginx镜像
#docker run -it --name nginx-self-build centos useradd nginx -s /sbin/nologin -M yum install wget gcc gcc-c++ make openssl-devel pcre-devel -y mkdir /home/tools cd /home/tools wget http://nginx.org/download/nginx-1.8.1.tar.gz tar -xf nginx-1.8.1.tar.gz cd nginx-1.8.1 ./configure --prefix=/usr/local/nginx-1.8.1 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module make make install ln -s /usr/local/nginx-1.8.1/ /usr/local/nginx sed -i ‘1i daemon off;‘ /usr/local/nginx/conf/nginx.conf head -2 /usr/local/nginx/conf/nginx.conf exit # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9b957ef5b4b4 centos "/bin/bash" 9 minutes ago Exited (0) 2 minutes ago nginx-self-build # docker commit -m "mynginx1.8" 9b957ef5b4b4 gtms/my-nginx1.8:v1 6b01aa3e1faba1d942349e5ced2e24f0a2a91944dbc3cc9b7f5b9aa5599a95b5 # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE gtms/my-nginx1.8 v1 6b01aa3e1fab 51 seconds ago 376.7 MB nginx latest 61d205ea917c 9 days ago 182.5 MB centos latest bac949ce964b 3 weeks ago 192.5 MB #docker run -d -p 8080:80 gtms/my-nginx1.8:v1 /usr/local/nginx/sbin/nginx 8c0892d2f7d5ce6f30abcff81e60e8372318700926ea515765fa7b328f578a97 #docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8c0892d2f7d5 gtms/my-nginx1.8:v1 "/usr/local/nginx/sb 5 seconds ago Up 4 seconds 0.0.0.0:8080->80/tcp ecstatic_turing
dockerfile构建
#mkdir -p /opt/docker-file/nginx && cd ps #cd /opt/docker-file/nginx/ #wget http://nginx.org/download/nginx-1.8.1.tar.gz #cat Dockerfile #This is my first Dockerfile #Version 1.0 #Author:gtms #Base images FROM centos #MAINTAINER MAINTAINER gtms #ADD ADD nginx-1.8.1.tar.gz /usr/local/src/ #RUN RUN yum install wget gcc gcc-c++ make openssl-devel pcre -y RUN useradd nginx -s /sbin/nologin -M #WORKDIR WORKDIR /usr/local/src/nginx-1.8.1 #RUN RUN ./configure --prefix=/usr/local/nginx-1.8.1 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module && make && make install RUN ln -s /usr/local/nginx-1.8.1 /usr/local/nginx RUN sed -i ‘1i daemon off;‘ /usr/local/nginx/conf/nginx.conf #ENV ENV PATH /usr/local/nginx/sbin:$PATH #EXPSOE EXPOSE 80 #CMD CMD ["nginx"] # docker build -t nginx-file.iso:v1 /opt/docker-file/nginx/ # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE nginx-file.iso v1 4f9bb1606062 2 minutes ago 375.9 MB gtms/my-nginx1.8 v1 6b01aa3e1fab 19 minutes ago 376.7 MB nginx latest 61d205ea917c 9 days ago 182.5 MB centos latest bac949ce964b 3 weeks ago 192.5 MB # docker run -d --name nginxfile --hostname nginxtest -p 1080:80 nginx-file.iso:v1 # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c613f636368e nginx-file.iso:v1 "nginx" 51 seconds ago Up 50 seconds 0.0.0.0:1080->80/tcp nginxfile 8c0892d2f7d5 gtms/my-nginx1.8:v1 "/usr/local/nginx/sb 17 minutes ago Up 17 minutes 0.0.0.0:8080->80/tcp ecstatic_turing
docker registry
# docker pull registry # docker run -d -p 5000:5000 registry # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 71d9460ab30d registry "/entrypoint.sh /etc 8 seconds ago Up 8 seconds 0.0.0.0:5000->5000/tcp cocky_mayer # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE nginx-file.iso v1 4f9bb1606062 36 minutes ago 375.9 MB gtms/my-nginx1.8 v1 6b01aa3e1fab 53 minutes ago 376.7 MB nginx latest 61d205ea917c 9 days ago 182.5 MB centos latest bac949ce964b 3 weeks ago 192.5 MB registry latest 569ff570cd47 4 weeks ago 33.17 MB # docker tag gtms/my-nginx1.8:v1 192.168.0.87:5000/gtms/my-nginx1.8:v1 # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE nginx-file.iso v1 4f9bb1606062 38 minutes ago 375.9 MB gtms/my-nginx1.8 v1 6b01aa3e1fab 55 minutes ago 376.7 MB 192.168.0.87:5000/gtms/my-nginx1.8 v1 6b01aa3e1fab 55 minutes ago 376.7 MB nginx latest 61d205ea917c 9 days ago 182.5 MB centos latest bac949ce964b 3 weeks ago 192.5 MB registry latest 569ff570cd47 4 weeks ago 33.17 MB
# docker push 192.168.0.84:5000/gtms/my-nginx1.8 Error response from daemon: invalid registry endpoint https://192.168.0.84:5000/v0/: unable to ping registry endpoint https://192.168.0.84:5000/v0/ v2 ping attempt failed with error: Get https://192.168.0.84:5000/v2/: dial tcp 192.168.0.84:5000: no route to host v1 ping attempt failed with error: Get https://192.168.0.84:5000/v1/_ping: dial tcp 192.168.0.84:5000: no route to host. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry 192.168.0.84:5000` to the daemon‘s arguments. In the case of HTTPS, if you have access to the registry‘s CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/192.168.0.84:5000/ca.crt #cat /etc/sysconfig/docker 修改后重启docker other_args="--graph=/dockerdata --insecure-registry 192.168.0.87:5000" #docker run -d -p 5000:5000 registry #docker push 192.168.0.87:5000/gtms/my-nginx1.8:v1 成功
其他机器上 #vi /etc/sysconfig/docker
other_args="--graph=/dockerdata --insecure-registry 192.168.0.87:5000" #/etc/init.d/docker start #docker pull 192.168.0.87:5000/gtms/my-nginx1.8:v1 #docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
192.168.0.87:5000/gtms/my-nginx1.8 v1 6b01aa3e1fab Less than a second ago 376.7 MB
docker学习笔记
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。