@zzy0471
2019-12-27T16:24:12.000000Z
字数 2970
阅读 857
赵忠印 2019-11-4
Docker
Docker通过一种被称为“容器”的技术对进程进行封装隔离,和虚拟机不同,Docker不需要虚拟硬件,被隔离的进程实际上运行在宿主上,相比虚拟机来说,更加轻便。
Docker分为企业版和社区版(Docker CE),以下内容以社区版为例。
和传统的虚拟机相比,Docker容器更高效,因为不需要虚拟硬件,节约了CPU、内存等资源,同样的宿主,能运行的Docker容器数量远大于虚拟机数量(不过一般一个Docker容器中只运行一个进程)
传统虚拟机启动需要数分钟,Docker启动需要数秒钟,因为Docker容器内的进程实际上运行在宿主上
Docker通过“镜像”来解决有时候发生的开发环境和生产环境不一致的问题,开发环境、测试环境和生产环境可以使用相同的镜像,避免了应用在开发环境没问题而在生产环境出问题的情况
镜像(image)可以理解为由一系列文件组成,可以提供容器运行时需要的程序和资源
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
容器内的进程和其它容器内的进程以及宿主进程相隔离
仓库(Docker Registry)用来管理镜像,可以从公共的镜像中pull镜像,也可以自己搭建私有仓储
本文将在Ubuntu16.4上安装Docker
这个步骤不是必须的,但是从Ubuntu自带的源安装应用在国内会非常慢,此处可以使用阿里提供的源:
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse
将文件/etc/apt/sources.list
中的内容替换为上述内容即可,替换完毕后执行命令apt-get update
使之生效。
$ sudo apt-get remove docker \
docker-engine \
docker.io
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
前两个是使用apt下载应用时需要用到的(可能系统已经安装了),curl
是后面发送http请求用的,software-properties-common
是修改apt源用的,用此工具就不用手动修改/etc/apt/sources.list
文件了。
$ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
获取一个用来下载Docker时用的密钥,此处用的是国内的镜像。
$ sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"
向/etc/apt/sources.list
添加docker的源,并执行apt-get update
。
sudo apt-get install docker-ce
$ sudo usermod -aG docker $USER
如果缺少了这个步骤,使用当前用户运行一个镜像(在镜像的基础上开启一个容器)时会报权限错误。
$ sudo usermod -aG docker $USER
$ sudo systemctl enable docker
$ sudo systemctl start docker
Systemd
是一系列管理守护进程(类似于Widnows的服务)的命令合集,systemctl
命令就是其中之一。
$ docker run hello-world
这个命令会创建一个镜像并启动容器,如果没有报错,说明Docker安装无误。可以运行命令$ docker image ls
和$ docker container ls
来查看已经存在的镜像和容器。