摘要
本文部分内容来源于网络,个人收集整理,请勿传播
重新整理docker的基础知识。
- docker的安装
- 被弃用的功能
Docker版本区别
- docker CE:社区版本
- docker EE:企业版本
Docker环境准备
https://www.cnblogs.com/sparkdev/p/9129334.html
OS 版本要求
系统 | 要求 | 备注 |
---|---|---|
centos | 需要开启centos-extras,默认开启 | |
Ubuntu | Cosmic 18.10 、Bionic 18.04 (LTS) 、Xenial 16.04 (LTS) |
关闭防火墙和selinux
1 | systemctl disable --now firewalld NetworkManager |
关闭dnsmasq
linux 系统开启了 dnsmasq 后(如 GUI 环境),将系统 DNS Server 设置为 127.0.0.1,这会导致 docker 容器无法解析域名,需要关闭它
1 | systemctl disable --now dnsmasq |
关闭swap
1 | swapoff -a && sysctl -w vm.swappiness=0 |
升级系统软件包
1 | yum install epel-release -y |
开启ipvs以及overlay等
1 | lsmod | grep over |
升级内核
docker在低版本内核下(包括4.15内核),会存在以下bug
1 | kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1 |
所以为了安全起见,需要升级内核
1 | # 内核依赖perl |
创建docker用户
1 | groupadd -g 1001 docker |
内核参数优化
1 | cat <<EOF > /etc/sysctl.d/docker.conf |
参数备用
1 | net.ipv4.ip_forward = 1 |
环境检查
1 | curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > check-config.sh |
Docker安装
使用脚本安装
需要使用root用户或者sudo权限执行脚本。
1 | $ curl -fsSL https://get.docker.com -o get-docker.sh |
Centos安装
1 | yum install -y yum-utils \ |
Ubuntu安装
1 | # 更新apt包索引: |
二进制安装
1 |
|
版本
1 | export VERSION="18.06.3-ce" |
升级runc
由于runc近期爆发严重漏洞,需要进行升级,建议下载docker18.09以上升级包,替换当前版本的runc即可。
二进制启动文件
1 |
|
配置文件
1 | cat daemon.json |
systemd启动文件
1 | cat > /usr/lib/systemd/system/docker.service <<"EOF" |
1 | nohup dockerd --config-file conf/daemon.json &> logs/dockerd.log & |
开启docker命令补全
1 | # yum安装,二进制安装的命令补全待有空补充 |
后续配置
详细配置可参考 docker基础-dockerd守护进程
1 | { |
设置非root用户管理docker
Docker守护进程监听默认绑定到Unix socket上而不是绑定到tcp端口。而socket默认只有root用户权限,其他用户只能通过sudo权限来使用socket,因此Docker守护进程只能以root用户身份来运行。
如果您不想在docker命令前加上sudo,可以创建一个docker用户组,并向其添加用户。当Docker守护程序启动时,它会创建一个可由该docker组成员访问的Unix socket。
1 | groupadd docker |
镜像加速
从国内访问国外的docker镜像仓库有时候网络是个很严重的问题,因此我们可以采用一些国内的镜像仓库来进行加速
- 阿里云提供的镜像加速
- docker官方国内镜像加速
1 | { |
存储驱动选型
配置lvm
lvm配置主要用于devicemapper存储驱动,也可以用于其他的存储驱动
1 | yum -y install lvm2 |
已经废弃的docker功能
以下功能已经不推荐在docker中使用,并且一些功能已经在版本迭代中删除,由于docker近几年发展迅速,这部分内容最好有一些了解
存储驱动的选择
- overlay将在
v18.09.0
版本中弃用,可以使用overlay2来取代overlay- overlay可以在
4.x
之前的内核上使用overlayFS文件系统。而现在所有的发行版都能够运行overlay2 (因为它们在内核4.x
上,或者支持多个后向后移) - overlay2解决了overlay会导致inode占用过多的问题
- overlay可以在
- devicemapper将在
v18.09.0
版本中弃用,可以使用overlay2取代devicemapper
引擎标签中保留的namespace
- 保留的namespace:
com.docker.*
,io.docker.*
, andorg.dockerproject.*
- 现在个人使用这些标签会在log中提示warn
- 18.12 版本会开始报错
异步service create
and service update
- v17.05.0版本添加新的选项
--detach=false
,默认让service create
andservice update
同步工作 - v17.10版本将改为使用
--detach
选项让service create
andservice update
异步工作- 这个选项也会影响
docker service rollback
anddocker service scale
- 这个选项也会影响
Top-level network properties in NetworkSettings
- v1.13.0版本中弃用,v17.12版本中删除
1 | Deprecated In Release: v1.13.0 |
filter param for /images/json endpoint
- v1.13.0版本中弃用,v17.12版本中删除
1 | Deprecated In Release: v1.13.0 |
overlay2
在xfs
系统中的d_type
- v1.13.0版本中弃用,v17.12版本中删除
- 如果支持文件系统不支持
d_type
,那么overlay
和overlay2
存储驱动程序就不能正常工作。例如,如果XFS使用ftype=0
选项格式化,则不支持d_type。
通过api启动容器时的HostConfig
- v1.10.0版本中弃用,v1.12.0版本中删除
- 不推荐
POST /containers/{name}/start
- 推荐
POST /containers/create
docker ps
的选项--before
,--since
- v1.10.0版本中弃用,v1.12.0版本中删除
- 使用
docker ps --filter=before=...
,docker ps --filter=since=...
替代这两个参数
docker search
的选项--automated
,--stars
- v1.12.0版本中弃用,v17.09版本中删除
- 使用
docker search --filter=is-automated=...
,docker search --filter=stars=...
替代这两个参数
命令行参数
- v1.8.0版本中弃用, v1.10.0版本中删除
- 用
daemon
取代-d
,--daemon
- 用
--help
取代-help
- 帮助信息使用
--help
,不要使用-h
- 用
--opt
替代-opt
选项,涉及到的命令行参数如下
1 | docker attach -nostdin |
以下参数已弃用
1 | docker run --cpuset |
ENV中的密码环境变量
DOCKER_CONTENT_TRUST_OFFLINE_PASSPHRASE
重命名为DOCKER_CONTENT_TRUST_ROOT_PASSPHRASE
DOCKER_CONTENT_TRUST_TAGGING_PASSPHRASE
重命名为DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE
其他
docker commit
的参数用--changes
替换--run
- 弃用v1版本仓库接口
--disable-legacy-registry=false
- 标签的key冲突将导致报错,当设置重复的标签时,护进程将无法启动。
DOCKERFILE
中的MAINTAINER
弃用- 弃用不带版本号的api调用
repository:shortid
弃用- docker守护进程功能移动到独立的二进制文件dockerd中
-g
和--graph
选项在v17.05.0版本不推荐使用,推荐使用--data-root
替代这个选项- 这个选项暂时不会移除,只是会隐藏,有可能在后续版本充移除
docker import
的参数格式file|URL|- [REPOSITORY [TAG]]
已经移除- 移除
docker login
的--email
和-e
参数 docker run
的参数--security-opt
的分隔符从:
统一为=
- 使用
/containers/(id or name)/archive
替代/containers/(id or name)/copy
- api中的
ID
,Statu
,From
字段弃用,用更加丰富的参数取代这些字段 - 弃用
docker tag
的-f
参数 - 弃用日志标签
syslog-tag
,gelf-tag
,fluentd-tag
- 用通用的tag标签来替代
1 | docker --log-driver=syslog --log-opt tag="{{.ImageName}}/{{.Name}}/{{.ID}}" |
- 移除内置的LXC-exec驱动、 lxc-conf 以及api
--api-cors-header
替换--api-enable-cors
--disable-legacy-registry
已删除