Ubuntu下Docker的常见安装方式

Ubuntu下Docker的常见安装方式-我的技术分享

简介

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。

Docker通常用于如下场景:

  • web应用的自动化打包和发布;
  • 自动化测试和持续集成、发布;
  • 在服务型环境中部署和调整数据库或其他的后台应用;
  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

 

使用自动化脚本安装

官方提供了针对不同平台的shell安装脚本,我们只需要把他下载到本地运行即可完成自动安装。

curl https://get.docker.com >/tmp/install.sh
chmod +x /tmp/install.sh
/tmp/install.sh

执行后的输出如下:

coderstory@Myserver:~$ curl https://get.docker.com >/tmp/install.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 19090  100 19090    0     0  23803      0 --:--:-- --:--:-- --:--:-- 23802
coderstory@Myserver:~$ chmod +x /tmp/install.sh
coderstory@Myserver:~$ /tmp/install.sh
+ sudo -E sh -c apt-get update
[sudo] password for coderstory: 
Hit:1 http://cn.archive.ubuntu.com/ubuntu xenial InRelease
Hit:2 http://cn.archive.ubuntu.com/ubuntu xenial-updates InRelease 

...省略....

 OS/Arch:      linux/amd64
 Experimental: false

If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:

  sudo usermod -aG docker coderstory

Remember that you will have to log out and back in for this to take effect!

WARNING: Adding a user to the "docker" group will grant the ability to run
         containers which can be used to obtain root privileges on the
         docker host.
         Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
         for more information.

这个时候,docker就已经安装了最新的CE版本(社区版本,对应还有个付费的版本)

你可以尝试执行命令,下载个ubuntu的基础镜像

docker pull hub.c.163.com/library/ubuntu

输出如下:

coderstory@Myserver:~$ docker pull hub.c.163.com/library/ubuntu
Using default tag: latest
Warning: failed to get default registry endpoint from daemon (Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.30/info: dial unix /var/run/docker.sock: connect: permission denied). Using system default: https://index.docker.io/v1/
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.30/images/create?fromImage=ubuntu&tag=latest: dial unix /var/run/docker.sock: connect: permission denied

很明显镜像下载失败了,这是为什么呢? 其实报错信息里已经很明确错误原因了:permission denied,没有执行权限
这个时候命令上加一个 sudo前缀提权运行就好了

coderstory@Myserver:~$ sudo docker pull hub.c.163.com/library/ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
23a6960fe4a9: Pull complete 
e9e104b0e69d: Pull complete 
cd33d2ea7970: Pull complete 
534ff7b7d120: Pull complete 
7d352ac0c7f5: Pull complete 
Digest: sha256:951b9b6a22f7d7fc98854bcda15c2bc950788c2846c25ffa740d3efd86ec132e
Status: Downloaded newer image for hub.c.163.com/library/ubuntu:latest

在这里你可以看到下载命令中有hub.c.163.com这个163的域名,是因为docker官方服务器都是在国外的。默认也是从国外的服务器上下载资源,但是这样太慢了,所以我在命令中明确是从网易的服务器上下载系统镜像。

现在镜像下载好了,我们要怎么运行它呢?

sudo docker run --rm hub.c.163.com/library/ubuntu echo hello world 

输出如下:

coderstory@Myserver:~$ sudo docker run --rm hub.c.163.com/library/ubuntu echo hello world 
hello world

这个命令只是暂时docker的运行方式,暂时不解释这个命令具体的含义。但命令末尾的echo hello world你应该明白,镜像生成的实例(也就是容器)在运行起来后执行了这个命令,输出了hello world。
并在输出这句话后自动退出了。

纯手动安装方式

如果你觉得,上面那种自动化脚本安装的方式太过于笼统,你想自己装一遍,也OK。
官方的手册地址如下:https://docs.docker.com/
通过对官方手册的学习,你将会学到更多,理解的更彻底。

ok,说正文。这种安装方式我将以翻译官方手册为主,解释更多的概念和注意点。

1.安装前提(安装条件)
你需要一个ubuntu 16.04或者ubuntu14.04的系统,这是官方直接支持的系统,其他的版本比如17.04 16.10应该都是支持的,只不过这2个版本不是LTS的。

2.卸载旧版本
如果你以前安装过docker,那么需要先写在哪旧版本然后再安装最新版本

sudo apt-get remove docker docker-engine docker-ce docker.io

如果你安装过 大概还需要删除/var/lib/docker/这个目录,遗留的临时文件,数据卷之类的都保存在这里。

3.安装内核
这个步骤需要安装几个扩展内核,因为docker所必须的aufs文件系统要使用(ubuntu只能使用docker所支持多个文件系统中的aufs)。
这些文件系统都属于Union File System,所谓UnionFS就是把不同物理位置的目录合并mount到同一个目录中

sudo apt-get install -y --no-install-recommends \
    linux-image-extra-$(uname -r) \
    linux-image-extra-virtual

4.先更新安装源

sudo apt-get update

5.安装https支持组件

 sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

6.获取GPG签名

curl -fsSL 'https://sks-keyservers.net/pks/lookup?op=get&search=0xee6d536cf7dc86e2d7d56f59a178ac6c6238f52e' | sudo apt-key add -

输出如下:

coderstory@Myserver:~$ curl -fsSL 'https://sks-keyservers.net/pks/lookup?op=get&search=0xee6d536cf7dc86e2d7d56f59a178ac6c6238f52e' | sudo apt-key add -
OK

7.添加docker官方的源

 sudo add-apt-repository \
   "deb https://packages.docker.com/1.13/apt/repo/ \
   ubuntu-$(lsb_release -cs) \
   main"

8.再次更新 更新源

sudo apt-get update

9.执行Docker安装

  sudo apt-get -y install docker-engine

10.备选 安装指定版本的docker
本步骤是替换步骤9的,因为步骤9是安装最新版的docker。如果你想安装某个非最新版本的话,请往下看。
执行命令查看可安装的版本

sudo apt-get update
apt-cache madison docker-engine

输出如下:

coderstory@Myserver:~$ apt-cache madison docker-engine
docker-engine | 1.13.1~cs4-0~ubuntu-xenial | https://packages.docker.com/1.13/apt/repo ubuntu-xenial/main amd64 Packages
docker-engine | 1.13.1~cs3-0~ubuntu-xenial | https://packages.docker.com/1.13/apt/repo ubuntu-xenial/main amd64 Packages
docker-engine | 1.13.1~cs2-0~ubuntu-xenial | https://packages.docker.com/1.13/apt/repo ubuntu-xenial/main amd64 Packages
docker-engine | 1.13.1~cs1-0~ubuntu-xenial | https://packages.docker.com/1.13/apt/repo ubuntu-xenial/main amd64 Packages
coderstory@Myserver:~$ 

执行安装指定的版本 VERSION改成你需要的版本号

 sudo apt-get install docker-engine=<version>