升级 Docker 其实并不复杂,主要有两种常见方式:一种是利用软件包管理器(如 apt-get)自动更新,另一种是手动替换二进制文件。首先介绍第一种,也是大多数用户最熟悉的方法——apt-get。
1、使用 apt-get 自动升级
首先,导入 Docker 官方的 GPG 密钥,确保软件包来源的可信度:
复制命令
代码如下:sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9接着,将 Docker 的仓库地址添加到 apt 源列表中:
复制命令
代码如下:sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"然后,刷新本地源缓存:
复制命令
代码如下:sudo apt-get update最后,直接安装最新版本的 Docker:
复制命令
代码如下:sudo apt-get install lxc-docker整个过程会自动处理依赖关系,省心省力。如果你想尝鲜最新版本,或者需要绕过仓库限制进行安装,可以尝试手动替换二进制的方式。
2、手工安装 Docker 最新版
首先,停止正在运行的 Docker 守护进程:
复制命令
代码如下:killall docker接下来,下载最新的 Docker 二进制文件:
复制命令
代码如下:wget https://get.docker.io/builds/Linux/x86_64/docker-latest -O docker赋予该文件可执行权限:
复制命令
代码如下:chmod +x docker最后,以守护进程模式启动新版 Docker:
复制命令
代码如下:sudo ./docker -d &请注意,-d 表示守护进程模式,& 则让它在后台运行。
升级的一次实际操作记录
下面是一套完整的升级流程,从检查容器状态到验证新版本。首先,让我们查看当前正在运行的容器有哪些:
复制代码
代码如下:[root@AY140716133600881bf5Z ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS S
2901c1a54ec1 csphere/registry-v2:latest "/bin/registry-start 2 days ago Up 37 hours 0.0.0.0:4
e6b677c7ea75 csphere/csphere:0.11.2 "/bin/csphere-init - 2 weeks ago Up 37 hours 8086/tcp,
ac72d59f36e1 csphere/csphere:0.11.2 "/bin/csphere-init - 2 weeks ago Up 37 hours
a12cf20d6e65 registry.wpython.com:5000/library/nginx:1.4.7 "/usr/bin/supervisor 2 weeks ago Up 37 hours 22/tcp, 0
1b926cc81862 registry.wpython.com:5000/library/php:5.6.9 "/usr/bin/supervisor 2 weeks ago Up 37 hours 22/tcp, 9
8e44f1761417 registry.wpython.com:5000/library/mysql:5.5.37 "/usr/bin/supervisor 2 weeks ago Up 37 hours 22/tcp, 3
看到多个容器在运行,需要先逐个停止(这里仅展示第一个容器的停止命令,其余操作类似):
复制命令
代码如下:docker stop 2901c1a54ec1......
......
......
所有容器停止后,再停止 Docker 服务本身:
复制命令
代码如下:/etc/init.d/docker stop接下来,下载最新的二进制文件并替换到系统路径:
复制命令
代码如下:sudo wget https://get.docker.com/builds/Linux/x86_64/docker-latest -O /usr/bin/docker && chmod +x /usr/bin/docker替换完成后,启动 Docker 服务:
复制命令
代码如下:/etc/init.d/docker start最后,通过版本命令确认升级是否成功:
复制代码
代码如下:# docker versionClient version: 1.7.0
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 0baf609
OS/Arch (client): linux/amd64
Server version: 1.7.0
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 0baf609
OS/Arch (server): linux/amd64
从输出可以看出,客户端和服务端均已升级到 1.7.0,整个过程没有遇到意外。当然,如果你的生产环境中运行的容器较多,建议提前做好备份或进行灰度测试,以确保升级稳妥。
