关于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-ce的2种方法:
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的源
启用edge和testing镜像仓库
这些镜像仓库包含在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
使用DaoCloud的Docker安装脚本:
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 //将container的80端口映射到本机的3300端口
docker ps //-p标志将容器的端口绑定到特定端口。这里主机3300端口映射到container的80端口
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端口绑定到主机上的localhost或127.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是运行中image的names
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,因此命令提示符是一个#字符
/ # ifconfig
/ # 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
/ #
待续未完......