关于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

/ # 

 

 

待续未完......

 

posted @ 2017-09-15 08:21  Linux大魔王  阅读(490)  评论(0编辑  收藏  举报