zoukankan      html  css  js  c++  java
  • 关于docker

    声明下都是怎么称呼docker的:

        RHEL/CentOS 软件源中的 Docker 包名为 docker

        Ubuntu 软件源中的 Docker 包名为 docker.io

        而很古老的 Docker 源中 Docker 也曾叫做 lxc-docker。这些都是非常老旧的 Docker 版本,并且基本不会更新到最新的版本,而对于使用 Docker 而言,使用最新版本非常重要。

        另外,17.04 以后,包名从 docker-engine 改为 docker-ce,因此从现在开始安装,应该都使用 docker-ce 这个包

     

    本地运行 Docker 官方文档的网站,以docker 的方式:

    $ docker run -d -p 80:4000 docs/docker.github.io

    访问 Docker 宿主的 80 端口,如 http://localhost,就会看到官网文档

    或者

    $ docker run -d -p 80:80 twang2218/blog.lab99.org

    [root@localhost ~]# cat /etc/centos-release
    CentOS Linux release 7.3.1611 (Core) 
    [root@localhost ~]# uname -a
    Linux localhost.localdomain 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

    安装docker-ce2种方法: 

    1、yum安装docker-ce

    首先安装所需的软件包:

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

    命令设置 stable 镜像仓库,始终需要使用 stable 镜像仓库,即使还需要通过 edge 或 testing 镜像仓库安装构建也是如此。

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

    //此时会在/etc/yum.repos.d/目录中多个docker-ce.repo的源

    启用edgetesting镜像仓库

    这些镜像仓库包含在docker.repo 文件中(/etc/yum.repos.d/),但默认情况下处于禁用状态,将它们和stable 镜像仓库一起启用。

    $ yum-config-manager --enable docker-ce-edge          //关闭是 disabled

    $ yum-config-manager --enable docker-ce-testing       //关闭是 disabled

    $ yum makecache fast           //更新 yum 软件包索引

    $ yum -y install docker-ce     //默认安装最新的版本

    在生产系统中,应该安装特定版本的 Docker CE,而不是始终使用最新版本。

    列出可用版本。此示例使用 sort -r 命令按版本号(从最高到最低)对结果进行排序,并且已被截断。

    注:此 yum list 命令仅显示二进制软件包。如果还需要显示 源软件包,请从软件包名称中省略 .x86_64

    $ yum list docker-ce.x86_64  --showduplicates | sort -r

    docker-ce.x86_64            17.07.0.ce-1.el7.centos             docker-ce-edge  

    docker-ce.x86_64            17.06.2.ce-1.el7.centos             docker-ce-stable

    docker-ce.x86_64            17.06.2.ce-1.el7.centos             docker-ce-edge  

    docker-ce.x86_64            17.06.1.ce-1.el7.centos             docker-ce-stable

    docker-ce.x86_64            17.06.1.ce-1.el7.centos             docker-ce-edge  

    docker-ce.x86_64            17.06.0.ce-1.el7.centos             docker-ce-stable

    docker-ce.x86_64            17.06.0.ce-1.el7.centos             docker-ce-edge  

    docker-ce.x86_64            17.05.0.ce-1.el7.centos             docker-ce-edge  

    docker-ce.x86_64            17.04.0.ce-1.el7.centos             docker-ce-edge  

    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

    //此列表的内容取决于启用了哪些镜像仓库,并且将特定于你 CentOS 版本(.el7 后缀表示版本)

    选择一个特定版本进行安装。

    第二列为版本字符串。

    第三列为镜像仓库名称,它表示软件包来自哪个镜像仓库并按扩展其稳定性级别列出。

    如需安装特定版本,就将版本字符串附加到软件包名称,并使用连字符 (-) 分隔它们:

    格式:yum -y install docker-ce-<VERSION>

    :yum install docker-ce-17.07.0.ce-1.el7.centos


    $ systemctl start docker          //启动 Docker

    $ docker run hello-world          //验证是否正确安装了docker

    升级 DOCKER-CE

    运行 sudo yum makecache fast,返回到上面即可接着执行即可


    2、通过脚本安装docker-ce

    使用DaoCloudDocker安装脚本:

    curl -sSL https://get.daocloud.io/docker | sh

    17.03及以前的版本使用阿里云的安装脚本:

    curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

    17.04 及以后的版本:

    export CHANNEL=stable //环境变量指定安装通道为 stable

    curl -fsSL https://test.docker.com/ | sh -s -- --mirror Aliyun //指定使用阿里云的源(apt/yum)

    CentOS 7 配置docker加速器(或其它使用 Systemd 的系统)

    $ systemctl enable docker

    $ vi /usr/lib/systemd/system/docker.service

    保存退出后,重新加载配置并启动服务:

    $ systemctl daemon-reload

    $ systemctl restart docker

    确认一下配置是否已经生效:

    $ ps -ef | grep dockerd

    如果配置成功,生效后就会在这里看到自己所配置的加速器。

     1.13 版本以后,可以直接 docker info 查看,如果配置成功,加速器 Registry Mirror 会在最下面列出来。

    如果重启后发现无法启动 docker 服务,检查一下服务日志,看看是不是之前执行过那些加速器网站的脚本,如果有做过类似的事情,检查一下是不是被建立了 /etc/docker/daemon.json 以配置加速器,如果是的话,删掉这个文件,然后在重启服务。

    使用配置文件是件好事,比如修改配置不必重启服务,只需发送 SIGHUP 信号即可。但需要注意,目前在 dockerd 中使用配置文件时,无法输出当前生效配置,并且当 dockerd 的参数和 daemon.json 文件中的配置有所重复时,并不是一个优先级覆盖另一个,而是会直接导致引擎启动失败.

    很多人发现配了加速器后 Docker 启动不起来了就是这个原因。解决办法很简单,去掉重复项。不过在这些问题解决前,建议使用修改docker.service 这类做法来实现配置,而不是使用配置文件 daemon.json。方便 ps -ef | grep dockerd 一眼看到实际配置情况。

    固定容器 IP 地址:

    一般情况是不需要指定容器 IP 地址的。这不是虚拟主机,而是容器。其地址是供容器间通讯的,容器间则不用 IP 直接通讯,而使用容器名、服务名、网络别名。

    为了保持向后兼容,docker run 在不指定 --network 时,所在的网络是 default bridge,在这个网络下,需要使用 --link 参数才可以让两个容器找到对方。

    这是有局限性的,因为这个时候使用的是 /etc/hosts 静态文件来进行的解析,比如一个主机挂了后,重新启动IP可能会改变。

    虽然说这种改变Docker是可能更新/etc/hosts文件,但是这有诸多问题,可能会因为竞争冒险导致 /etc/hosts 文件损毁,也可能还在运行的容器在取得 /etc/hosts 的解析结果后,不再去监视该文件是否变动。种种原因都可能会导致旧的主机无法通过容器名访问到新的主机。

    使用网络端口映射连接:

    docker pull centos     //比如先pull一个centos来具体说明

    docker images                   //查看镜像

    docker run -itd -p 3300:80 centos      //container80端口映射到本机的3300端口

    docker ps                     //-p标志将容器的端口绑定到特定端口。这里主机3300端口映射到container80端口

    CONTAINER ID    IMAGE       COMMAND         CREATED         STATUS          PORTS                   NAMES

    6a067f52adf1    centos     "/bin/bash"     3 seconds ago    Up 2 seconds   0.0.0.0:3300->80/tcp    mystifying_lamarr

    注:docker run -itd -p 8000-9000:5000 centos 是将container中的5000端口绑定到主机删的8000-9000之间的随机可用端口

           docker run -itd -p 127.0.0.1:80:5000 centos  是将5000端口绑定到主机上的localhost127.0.0.1接口上的80端口

           docker run -d -p 127.0.0.1:80:5000/udp centos 是绑定UDP端口

    查看docer port快捷的方法:

    docker port mystifying_lamarr      //mystifying_lamarr是运行中imagenames

    80/tcp -> 0.0.0.0:3300                 //显示的结果

    //-p可以多次使用该标志来配置多个端口,例如:-p 8001-8010:8001-8010

    系统方面命令:

    $ docker search <images_name>   //搜索可用docker镜像

    例:docker pull CentOS         //从docker hub上拉取一个centos镜像

    $ docker images              //列出images

    $ docker images -a             //列出所有的images(包含历史)

    $ docker images --tree            //显示镜像的所有层(layer)

    $ docker rmi  <image ID>           //删除一个或多个image,逗号隔开

    $ docker info  //查看系统(docker)层面信息,包括管理的images, containers数等

    $ docker ps -a -q                //查看正在运行的镜像

    $ docker rm `docker ps -a -q`     //删除所有的容器

    $ docker run -it centos /bin/bash      //前台运行centos镜像,这里能看到镜像的ID,这个很重要,exit后centos将随着关闭  或者  启动一个container并进入交互模式

    或者  

    $ docker start -it <容器ID>             // -i开启输入终端,-t表示使用终端

    或者:

    $ docker run -itd centos /bin/bash              //-d后台运行centos

    $ docker start|stop|restart <容器ID>                            //启动、停止、重启容器

    $ docker attach <容器ID>                  //连接一个正在运行的container实例(即实例必须为start状态,可以多个窗口同时attach一个container实例)

    $ docker run -it -p <host_port:contain_port> <container>   //映射 HOST 端口到容器,方便外部访问容器内服务,host_port 可以省略,省略表示把 container_port 映射到一个动态端口。

    注:使用start是启动已经创建过得container,使用run则通过image开启一个新的container。

    网络方面命令:

    $ docker network ls                             //查看所有网络容器

    $ brctl show        //查看主机网桥信息,如果提示没有此命令请安装yum install bridge-utils

    $ root@999b9f189f40:/# ip ro li               //在容器中查看路由表

    $ docker network inspect bridge              //检查docker桥接网络信息

    $ docker network disconnect bridge networktest //可以通过提供网络名称和容器名称或使用容器ID断开容器来从网络中移除容器。

    注:所谓的网络bridge是一个特殊的网络。除非你另有“说明”,否则Docker会始终加入到此网络中启动你的容器。

    运行以下两个命令启动两个busybox容器,来解释每个容器都连接到默认bridge网络

    $ docker run -itd --name=container001 busybox

    $ docker run -itd --name=container002 busybox

    $ docker network inspect bridge      //查看bridge网络的细节

    连接到默认bridge网络的容器可以通过IP地址进行通信。Docker不支持在默认网桥上自动发现服务。

    如果你希望容器能够通过容器名称解析的IP地址,应该使用用户定义的网络代替。可以使用legacy docker run --link选项将两个容器链接在一起,但在大多数情况下不推荐使用。

    可以attach运行,container以查看网络从容器内部的外观。因为你连接的为root,因此命令提示符是一个#字符

    $ docker attach container001 
     / # ifconfig 
    eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00
              inet addr:172.17.0.3  Bcast:0.0.0.0  Mask:
              UP BROADCAST RUNNING MULTICAST  MTU:1500  
              RX packets:8 errors:0 dropped:0 overruns:0
              TX packets:0 errors:0 dropped:0 overruns:0
              collisions:0 txqueuelen:0 
              RX bytes:648 (648.0 B)  TX bytes:0 (0.0 B)
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0
              TX packets:0 errors:0 dropped:0 overruns:0
              collisions:0 txqueuelen:1 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    / # 
     
     
    $ docker attach container002        

    / # ifconfig 

    eth0      Link encap:Ethernet  HWaddr 02:42

              inet addr:172.17.0.4  Bcast:0.0.0

              UP BROADCAST RUNNING MULTICAST  M

              RX packets:8 errors:0 dropped:0 o

              TX packets:0 errors:0 dropped:0 o

              collisions:0 txqueuelen:0 

              RX bytes:648 (648.0 B)  TX bytes:

    lo        Link encap:Local Loopback  

              inet addr:127.0.0.1  Mask:255.0.0

              UP LOOPBACK RUNNING  MTU:65536  M

              RX packets:0 errors:0 dropped:0 o

              TX packets:0 errors:0 dropped:0 o

              collisions:0 txqueuelen:1 

              RX bytes:0 (0.0 B)  TX bytes:0 (0

    / # 

    待续未完......

  • 相关阅读:
    POJ 1026 Cipher(置换群)
    POJ 1691 Painting A Board(DFS)
    URAL 1073 Square Country(DP)
    Spring Boot系列教程三:使用devtools实现热部署
    Spring Boot系列教程二:创建第一个web工程 hello world
    Spring Boot系列教程一:Eclipse安装spring-tool-suite插件
    java实现二叉树的构建以及3种遍历方法
    二叉树的java实现
    各种数据库的分页查询语句
    sql语句查询各门课程平均分的最大值
  • 原文地址:https://www.cnblogs.com/smlile-you-me/p/7524378.html
Copyright © 2011-2022 走看看