首页 > 代码库 > 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的动机永远是选择正确的工具应用到工作中。最有意思的部分是业务场景,然后我们在业务场景上发挥工具的最大效能。
View Code
 

 

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

nsenterunix-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学习笔记