Install Docker on Ubuntu

摘要:
OptionalconfigurationsCreateADockergroupDocker守护程序绑定到Unixsocket而不是TCP端口。默认情况下,Unixsockt属于根用户,其他用户可以通过sudo命令访问它。因此,Docker守护进程始终以root用户身份运行。这样,当docker守护程序启动时,它将授予该组Unixsocket读写权限。当调整内存和wapaccounting运行docker时,您可能会收到以下警告:警告:Youkernel不支持cgroupswaplimit。警告:您的kernel不支持拆分功能。缺少模拟。要避免此类信息,您需要在系统上启用内存和备份计数。Docker默认不启用TLS。如果未启用TLS,则不会加密通信。

目前支持的 Ubuntu 版本:

  • Ubuntu Xenial 16.04 (LTS)
  • Ubuntu Wily 15.10
  • Ubuntu Trusty 14.04 (LTS)
  • Ubuntu Precise 12.04 (LTS)

Prerequisites

内核版本不能低于 3.10

$ uname -r
3.11.0-15-generic

如果之前使用 APT 安装过 Docker,需确保更新 APT 源至新的 Docker repository。

Update your apt sources

1、使用 sudo 权限或 root 用户登录

2、开启一个终端窗口

3、更新包信息,确保 APT 以 https 方式工作,安装 CA 证书

 $ sudo apt-get update
 $ sudo apt-get install apt-transport-https ca-certificates

4、添加新的 GPG key

$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

5、编辑 /etc/apt/sources.list.d/docker.list 文件,如果不存在就创建一个

6、删除所有已存在的条目

7、添加一条

# On Ubuntu Trusty 14.04 (LTS)
deb https://apt.dockerproject.org/repo ubuntu-trusty main

# On Ubuntu Xenial 16.04 (LTS)
deb https://apt.dockerproject.org/repo ubuntu-xenial main

8、保存并关闭 /etc/apt/sources.list.d/docker.list 文件

9、更新 APT 包索引

$ sudo apt-get update

10、清空旧的 repo(如果存在的话)

$ sudo apt-get purge lxc-docker

11、验证 repository 生效

$ apt-cache policy docker-engine

Prerequisites by Ubuntu Version

对于 Ubuntu 14.04、15.10、16.04,建议安装 linux-image-extra 内核包,linux-image-extra 包使你可以使用 aufs 存储驱动。

1、开启一个终端窗口

2、更新包管理器

$ sudo apt-get update

3、安装建议的包

$ sudo apt-get install linux-image-extra-$(uname -r)

4、继续安装 Docker

如果是 Ubuntu 14.04 或 12.04,需要安装 apparmor

apt-get install apparmor

Install

确保先决条件已经满足,然后开始安装 Docker

1、使用 sudo 权限用户登录

2、更新 APT 包索引

$ sudo apt-get update

3、安装 Docker

$ sudo apt-get install docker-engine

4、启动 Docker 守护进程

$ sudo service docker start

5、验证 Docker 是否正确安装

$ sudo docker run hello-world

这个命令会下载一个测试镜像并在容器内运行,它会输出一组信息到屏幕,然后退出。

Optional configurations

Create a Docker group

Docker 守护进程与 Unix socket 绑定,而不是 TCP 端口。默认情况下 Unix socket 属于 root 用户,其他用户可以通过 sudo 命令进行访问。因此,Docker 守护进程一直是以 root 用户的身份运行。

为了避免每次使用 docker 命令需要 sudo,可以创建一个名字是 docker 的 Unix 组,把用户加到这个组里。这样,当 docker 守护进程启动时,它会给这个组赋予 Unix socket 的读写权限。

警告:docker 组相当于 root 用户,这对于你的系统有哪些安全影响,详细细节请参照 Docker Daemon Attack Surface 文档。

创建 docker 组并添加用户:

1、使用 sudo 权限用户登录

2、创建 docker 组

$ sudo groupadd docker

3、将用户添加到 docker 组

$ sudo usermod -aG docker $USER

4、注销重新登陆

5、验证不需要 sudo 就可以执行 docker 命令

$ docker run hello-world

如果失败提示如下类似信息:

Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?

检查 DOCKER_HOST 环境变量是否已设置。

Adjust memory and swap accounting

运行 docker 时,可能会收到如下警告:

WARNING: Your kernel does not support cgroup swap limit. WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.

为避免出现此类信息,需要在你的系统上启用 memory and swap accounting。

启用后,会增加内存开销和性能下降,即时 docker 没在运行的时候。内存开销会增加约 1%,性能下降约 10%。

1、使用 sudo 权限用户登录

2、编辑 /etc/default/grub 文件

3、设置 GRUB_CMDLINE_LINUX 的值如下

GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

4、保存并关闭文件

5、更新 GRUB

$ sudo update-grub

6、重启系统

Enable UFW forwarding

如果有在使用 UFW 防火墙,还需要做些额外的配置。Docker 使用 bridge 来管理容器网络,默认情况下 UFW 会丢弃所有的转发流量,因此需要配置 UFW 的转发策略。

同样的,UFW 的默认规则会拒绝所有入站流量。远程连接 Docker,启用 TLS 时的默认端口是 2376,未启用时是 2375。Docker 默认不启用 TLS,未启用 TLS 时,通讯是不加密的。

配时 UFW 允许入站的连接:

1、使用 sudo 权限用户登录

2、确认 UFW 是否安装并启用

$ sudo ufw status

3、编辑 /etc/default/ufw 文件

$ sudo nano /etc/default/ufw

4、设置 DEFAULT_FORWARD_POLICY 为:

DEFAULT_FORWARD_POLICY="ACCEPT"

5、保存并关闭文件

6、重新加载 UFW

$ sudo ufw reload

7、允许 Docker 端口的入站访问

$ sudo ufw allow 2375/tcp

Configure a DNS server for use by Docker

Ubuntu 系统一般都使用 127.0.0.1 作为默认的 nameserver,在 /etc/resolv.conf 中配置。

这样启动容器时会有警告:

WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers can't use it. Using default external servers : [8.8.8.8 8.8.4.4]

原因是 Docker 容器无法使用本地的 DNS 服务器,默认是使用外部的 DNS。

为避警告,可以指定一个 DNS 服务器或者在 NetworkManager 中禁用 dnsmasq,禁用 dnsmasq 会导致某些网络下 DNS 解析变慢。

Ubuntu 15.10 及以上版本是使用 systemd 作为启动和服务管理器,参照 control and configure Docker with systemd 文档

Ubuntu 14.10 及以下版本配置方法:

1、使用 sudo 权限用户登录

2、编辑 /etc/default/docker 文件

$ sudo nano /etc/default/docker

3、添加一条设置

DOCKER_OPTS="--dns 8.8.8.8"

也可以设置多个 dns 服务器

--dns 8.8.8.8 --dns 192.168.1.1

4、保存并关闭文件

5、重启 Docker 守护进程

$ sudo service docker restart

或者通过禁用 dnsmasq 的方法:

1、编辑 /etc/NetworkManager/NetworkManager.conf 文件

$ sudo nano /etc/NetworkManager/NetworkManager.conf

2、注释掉 dns=dnsmasq 行:

dns=dnsmasq

3、保存并关闭文件

4、重启 NetworkManager 和 Docker

$ sudo restart network-manager
$ sudo restart docker

Configure Docker to start on boot

Ubuntu 15.04 版本以上使用 systemd 作为启动和服务管理器,14.10 版本以下使用 upstart。

15.04 以上版本,配置 docker 开机启动

$ sudo systemctl enable docker

14.10 以下版本,通过上述的安装过程会自动配置开机启动

Upgrade Docker

使用 apt-get 安装 Docker 最新版本:

$ sudo apt-get upgrade docker-engine

Uninstallation

卸载 Docker 包:

$ sudo apt-get purge docker-engine

卸载 Docker 及其依赖包:

$ sudo apt-get autoremove --purge docker-engine

上诉命令不会移除镜像、容器、卷和用户创建的配置文件,使用如下命令可删除所有的镜像、容器和卷:

$ rm -rf /var/lib/docker

必须手动删除用户创建的配置文件。

免责声明:文章转载自《Install Docker on Ubuntu》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇饿了么vue-cli3.0+cube-ui笔记WEB打印大全下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

kali下docker安装教程

前言 原本用的win下的docker,但是发现启用hyper-v服务后vmware会用不了,很是头疼。win10家庭版还没有hyper-v,折腾了好一会,结果vmware和docker还不能同时运行。我的vmware版本是15.5.0,有大神知道如何解决win下docker和vmware兼容问题请在下方留言,万分感谢! 安装教程 好家伙,步入正文,直接快进...

keepalived配置日志

1.编辑配置文件/etc/sysconfig/keepalived,将第14行的KEEPALIVED_OPTIONS="-D"修改为KEEPALIVED_OPTIONS="-D -d -S 0" sudo sed -i '14 s#KEEPALIVED_OPTIONS="-D"#KEEPALIVED_OPTIONS="-D -d -S 0"#g' /etc...

docker 环境下通过ocelot和consul 实现服务发现与自治

Ocelot介绍 Ocelot的目标对象是使用.NET运行面向微服务/服务的架构,需要统一的入口点进入他们的系统。 特别是我希望与IdentityServer引用和承载令牌轻松集成。 Ocelot是一组按特定顺序排列的中间件。 Ocelot将HttpRequest对象操作到其配置指定的状态,直到它到达请求构建器中间件,在该中间件中,它创建一个HttpReq...

shell 常用脚本维护笔记

Centos7.5 IP地址维护 #!/usr/bin/bash IPADDR=$(ifconfig|grep inet|sed '2,$d'|awk '{print $2}') GATEWAY=$(ifconfig|grep inet|sed '2,$d'|awk '{print $2}'|awk -F "." '{print $1"."$2"."$3"...

API文档管理平台

一、应用场景 在公司中,有很多开发,每个人维护的api接口是不一样的。如果有一个统一的api文档管理平台,每个开发,把自己维护的接口录入进去。 之后再开发别的功能时,不需要重复造轮子,直接调用就可以了。有新员工入职时,也可以快速上手! 关于api文档管理,网上有很多。有在线收费的,也有开源的。基于节省成本考虑,这里主要介绍2个开源工具:ShowDoc和YA...

053、overlay是如何隔离的?(2019-03-20周三)

参考https://www.cnblogs.com/CloudMan6/p/7341487.html   不同的overlay网络是相互隔离的,我们创建第二个overlay网络 ov_net2 并运行容器bbox3.   root@host1:~# docker network create -d overlay ov_net1 25bfa583a0...