Docker 初探 (1) - 搭建 Docker 环境
参考资料:
Docker 继承自 Linux 系统的「容器化(Containerization)」,是一个为开发人员和系统管理员用于开发,部署和运行应用程序的容器系统,容器化的特点有:
- 灵活性: 任何复杂的应用都可以被容器化
- 轻量: 容器共享主机的内核
- 可互换: 可在运行过程中部署更新
- 便携性: 本地编译,云端部署,在任何地方都可以运行
- 伸缩性: 增加容器副本相当容易且自动化
- 可堆叠: 可在运行过程中纵向扩展
Docker
官方目前提供两个版本:Community Edition (CE) 和 Enterprise Edition (EE)。企业版是收费的。
搭建 Docker 环境
Image 和 Container
Image
是一个包含了运行应用程序所需所有东西的包——源代码,运行时,库,环境变量和配置文件Container
是 Image
的运行时实例,是 Image
在内存中的体现。
Containers 和虚拟机
Container 运行在 Linux 系统本地并与其他 Container 共享主机内核,它以「离散的进程」形式存在,不会占用比一般进程更多的资源。而虚拟机则运行整个客户机操作系统,并以虚拟化的方式访问主机资源,因此虚拟机会占用更多不必要的资源。
在 Ubuntu Xenial 16.04(LTS) 系统上安装 Docker CE
首先移除任何 Docker 旧版本:
1 | $ sudo apt-get remove docker docker-engine docker.io |
从 Repository 安装
搭建 Repository
- 从
apt
更新包:1
$ sudo apt-get update
- 允许
apt
使用https
来安装包1
2
3
4
5$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common - 添加 Docker 官方 GPG key:
1
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 验证 key 的最后 8 位字符:
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
1
2
3
4
5
6$ sudo apt-key fingerprint 0EBFCD88
pub 4096R/0EBFCD88 2017-02-22
Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid Docker Release (CE deb) <docker@docker.com>
sub 4096R/F273FCD8 2017-02-22 - 使用以下命令搭建稳定版的 repository:
1
2
3
4$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"lsb_release
返回 Ubuntu 发行版的名称,如 xenial。stable
为每季度发行一次的稳定版,edge
为每月发行一次的尝鲜版。
安装 Docker CE
- 更新包的索引:
1
$ sudo apt-get update
- 安装最新版的 Docker CE:
1
$ sudo apt-get install docker-ce
安装完成后,
Docker
守护进程将自动启动 - 通过运行一个
hello world
程序来验证Docker CE
已经正确安装该命令会从网络下载一个测试1
$ sudo docker run hello-world
image
,并以新的容器实例执行。执行以下命令查看已下载的image
:1
$ sudo docker image ls
- 检查正在运行的 container 实例: 该指令检查包含正在运行和过往运行的
1
$ sudo docker container ls --all
container
实例记录,如果有container
正在运行,则不需要--all
选项。
卸载 Docker CE
- 卸载 Docker CE 包:
1
$ sudo apt-get purge docker-ce
- image, container, volumns 或其他自定义的配置文件将不会自动删除,如果想要完全删除,则执行:
1
$ sudo rm -rf /var/lib/docker
以 non-root 用户管理 Docker
docker
守护进程绑定一个 Unix 套接字而非普通的 TCP 端口,默认情况下,Unix 套接字被 root
用户所有,其他用户只能通过 sudo
进行访问。docker
进程始终以 root
用户运行。
Docker CE 在安装完成后,会创建一个新的 docker
群组,但不会加入任何现有用户到该群组下,如果不想每次执行 docker
命令时加上 sudo
,可以将指定用户加入到群组下。当 docker
进程启动时,docker
群组对 docker
使用的 Unix 套接字具有读写权限。
由于
docker
群组与 root 权限一致,有关docker
的安全问题请参考 Docker Security
- 将当前用户添加至
docker
群组:1
$ sudo usermod -aG docker $USER
- 登出用户再登录以使群组重新评估
再次执行docker run hello-world
不再要求root
权限,如果在将用户添加到docker
群组之前已经执行过docker
的任何命令,那么~/.docker
文件夹的权限会以root
创建,为了解决这个问题,要么移除~/.docker
(它将会自行创建),要么更改其拥有者和权限:1
2$ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
$ sudo chmod g+rwx "/home/$USER/.docker" -R
将 docker 配置为开启启动
有许多 Linux 发行版使用 systemd
来管理自启动服务,要使 docker
开机启动,执行:
1 | $ sudo systemctl enable docker |
禁用开机启动:
1 | $ sudo systemctl disable docker |