前言
官方文档:https://docs.docker.com ? 阿里云源:http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
一、docker 安装
- 关闭防火墙及selinux
systemctl stop firewalld
systemctl disable firewalld
sed -ri /^SELINUX=/cSELINUX=disabled /etc/selinux/config
setenforce 0
- remove掉旧docker包
yum list installed | grep docker
yum remove -y docker*
- 配置阿里云docker源并安装
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 配置yum源
yum install -y yum-utils device-mapper-persistent-data lvm2
yum install -y docker-ce
# 测试
docker version # 显示docker版本及基础信息(client端&server端)
docker info
- 配置docker配置文件(按需)
cat /etc/docker/daemon.json
{
"bip": "172.100.100.1/24", # 自定义docker ip
"registry-mirrors": ["https://pee6w651.mirror.aliyuncs.com"], # 阿里云镜像加速器
"insecure-registries": ["123.56.**.***:8088"], # docker harbor
"log-opts": {"max-size":"100m", "max-file":"10"} # 日志文件保留10份,每个100m
}
docker 配置文件详解
docker-daemon.json各配置详解
{
“api-cors-header”:"", ——————在引擎API中设置CORS标头
“authorization-plugins”:[], ——————要加载的授权插件
“bridge”:"", ————将容器附加到网桥
“cgroup-parent”:"", ——————为所有容器设置父cgroup
“cluster-store”:"", ——————分布式存储后端的URL
“cluster-store-opts”:{}, ————————设置集群存储选项(默认map [])
“cluster-advertise”:"", ————————要通告的地址或接口名称
“debug”: true, ————————启用调试模式,启用后,可以看到很多的启动信息。默认false
“default-gateway”:"", ——————容器默认网关IPv4地址
“default-gateway-v6”:"", ——————容器默认网关IPv6地址
“default-runtime”:“runc”, ————————容器的默认OCI运行时(默认为“ runc”)
“default-ulimits”:{}, ——————容器的默认ulimit(默认[])
“dns”: [“192.168.1.1”], ——————设定容器DNS的地址,在容器的 /etc/resolv.conf文件中可查看。
“dns-opts”: [], ————————容器 /etc/resolv.conf 文件,其他设置
“dns-search”: [], ————————设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的 主机时,DNS不仅搜索host,还会搜
索host.example.com 。 注意:如果不设置, Docker 会默认用主机上的 /etc/resolv.conf 来配置容器。
“exec-opts”: [], ————————运行时执行选项
“exec-root”:"", ————————执行状态文件的根目录(默认为’/var/run/docker‘)
“fixed-cidr”:"", ————————固定IP的IPv4子网
“fixed-cidr-v6”:"", ————————固定IP的IPv6子网
“data-root”:"/var/lib/docker", ————-Docker运行时使用的根路径,默认/var/lib/docker
“group”: “”, ——————UNIX套接字的组(默认为“docker”)
“hosts”: [], ——————设置容器hosts
“icc”: false, ——————启用容器间通信(默认为true)
“ip”:“0.0.0.0”, ————————绑定容器端口时的默认IP(默认0.0.0.0)
“iptables”: false, ———————启用iptables规则添加(默认为true)
“ipv6”: false, ——————启用IPv6网络
“ip-forward”: false, ————————默认true, 启用 net.ipv4.ip_forward ,进入容器后使用 sysctl -a | grepnet.ipv4.ip_forward 查看
“ip-masq”:false, ——————启用IP伪装(默认为true)
“labels”:[“nodeName=node-121”], ————————docker主机的标签,很实用的功能,例如定义:–label nodeName=host-121
“live-restore”: true, ——————在容器仍在运行时启用docker的实时还原
“log-driver”:"", ——————容器日志的默认驱动程序(默认为“ json-file”)
“log-level”:"", ——————设置日志记录级别(“调试”,“信息”,“警告”,“错误”,“致命”)(默认为“信息”)
“max-concurrent-downloads”:3, ——————设置每个请求的最大并发下载量(默认为3)
“max-concurrent-uploads”:5, ——————设置每次推送的最大同时上传数(默认为5)
“mtu”: 0, ——————设置容器网络MTU
“oom-score-adjust”:-500, ——————设置守护程序的oom_score_adj(默认值为-500)
“pidfile”: “”, ——————Docker守护进程的PID文件
“raw-logs”: false, ——————全时间戳机制
“selinux-enabled”: false, ——————默认 false,启用selinux支持
“storage-driver”:"", ——————要使用的存储驱动程序
“swarm-default-advertise-addr”:"", ——————设置默认地址或群集广告地址的接口
“tls”: true, ————————默认 false, 启动TLS认证开关
“tlscacert”: “”, ——————默认 ~/.docker/ca.pem,通过CA认证过的的certificate文件路径
“tlscert”: “”, ————————默认 ~/.docker/cert.pem ,TLS的certificate文件路径
“tlskey”: “”, ————————默认~/.docker/key.pem,TLS的key文件路径
“tlsverify”: true, ————————默认false,使用TLS并做后台进程与客户端通讯的验证
“userland-proxy”:false, ——————使用userland代理进行环回流量(默认为true)
“userns-remap”:"", ————————用户名称空间的用户/组设置
“bip”:“192.168.88.0/22”, ——————————指定网桥IP
“registry-mirrors”: [“https://192.498.89.232:89”], ————————设置镜像加速
“insecure-registries”: [“120.123.122.123:12312”], ———————设置私有仓库地址可以设为http
“storage-opts”: [
“overlay2.override_kernel_check=true”,
“overlay2.size=15G”
], ————————存储驱动程序选项
“log-opts”: {
“max-file”: “3”,
“max-size”: “10m”,
}, ————————容器默认日志驱动程序选项
“iptables”: false ————————启用iptables规则添加(默认为true)
}
二、常用 docker 命令
1、docker image 命令
docker image [COMMAND]
指令 描述
ls 列出镜像
build 构建镜像来自Dockerfile
history 查看镜像历史
inspect 显示一个或多个镜像详细信息
pull 从镜像仓库拉取镜像
push 推送一个镜像到镜像仓库
rm 移除一个或多个镜像
prune 移除没有被标记或者没有被任何容器引用的镜像
tag 创建一个引用源镜像标记目标镜像
save 保存一个或多个镜像到一个tar归档文件
load 加载镜像来自tar归档或标准输入
2、docker run 命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
选项 描述
-i, –interactive 交互式
-t, –tty 分配一个伪终端
-d, –detach 运行容器到后台
-e, –env 设置环境变量
-p, –publish list 发布容器端口到主机
-P, –publish-all 发布容器所有EXPOSE的端口到宿主机随机端口
--name string 指定容器名称
-h, –hostname 设置容器主机名
--ip string 指定容器IP,只能用于自定义网络
--network 连接容器到一个网络
-v, –volume list
--mount mount(新方式) 将文件系统附加到容器
--restart string 容器退出时重启策略,默认no,可选值:[always|on-failure]
-m,–memory 容器可以使用的最大内存量
–memory-swap 允许交换到磁盘的内存量
–memory-swappiness=<0-100> 容器使用SWAP分区交换的百分比(0-100,默认为-1)
–oom-kill-disable 禁用OOM Killer
--cpus 可以使用的CPU数量
–cpuset-cpus 限制容器使用特定的CPU核心,如(0-3, 0,1)
–cpu-shares CPU共享(相对权重)
3、常用命令
docker run -it daocloud.io/library/centos:latest /bin/bash # 运行一个容器
docker creat -it --name "LLLLLLLLLLLLLLLLL" daocloud.io/library/centos:latest /bin/bash # 创建一个容器
docker images -q # 查看镜像ID
docker ps # 查看运行状态容器
docker ps -a # 查看所有容器
docker ps -q # 查找已运行的docker容器的ID
docker ps -a -q # 查找所有的docker容器的ID
断开容器(关闭容器):exit
断开容器(不关闭容器):ctrl+p+q
docker start 容器名字 # 运行容器
docker stop 容器名字 # 停止容器
docker restart 容器名字 # 重启容器
docker exec -it 容器名字 /bin/bash # 连接已运行的容器
docker attach 容器名字
docker exec 容器名字 [shell cmd] # 无交互执行命令
eg:docker exec 容器名字 touch /a
docker rmi daocloud.io/library/centos:latest [--force] # 删除镜像
docker rm 容器名字 [-f] # 删除容器
容器打包成tar包&还原镜像:
docker export personal_docker >personal_docker.tar
docker import personal_docker.tar personal_docker:v1
镜像打包成tar包&还原镜像
docker save -o test.tar personal_docker:v1
docker load < test.tar
三、docker 网络
1、docker 修改默认网段
docker默认网段为172.17段,可修改为其它地址段
systemctl stop docker # 停止docker服务
ip link set dev docker0 down # 关闭docker0网卡
brctl delbr docker0 # 删除docker0网桥
brctl addbr docker0 # 新增docker0网桥
ip addr add 172.100.100.1/24 dev docker0 # 配置docker0网桥ip段
ip link set dev docker0 up # 启动docker0网卡
vim /etc/docker/daemon.json # 修改docker配置文件
{
"bip":"172.100.100.1/24"
}
systemctl start docker # 启动docker服务
2、不同宿主机下 docker 互通
1. 更改容器的默认ip段,Docker默认的内部ip为172.17.42.0网段,所以必须要修改其中一台的默认网段以免ip冲突
docker 128上:
vim /etc/sysconfig/docker-network
DOCKER_NETWORK_OPTIONS= --bip=172.18.42.1/16
reboot
2. 在宿主机添加路由(网络为对方容器网段 网关为对方宿主机ip)
docker 130上:
route add -net 172.18.0.0/16 gw 192.168.18.128
docker 128上:
route add -net 172.17.0.0/16 gw 192.168.18.130
四、docker 数据目录迁移
??docker默认存储目录为/var/lib/docker ,正常我们的主机在初始化的时候会创建数据目录,然后使用lvm挂在到数据目录下,/var 分区一般空间比较小。随着docker的运行时间增加,/var 分区空间不足以支撑docker数据存储,所以要迁移存储目录。
- 查看docker资源占用
docker system df
- 清理磁盘空间,包含无用容器、数据卷、网络、无tag镜像等
docker system prune
docker system prune -a # 会清理没有运行容器的镜像
- 迁移目录
1.停止docker服务
systemctl stop docker
2.创建新的docker目录
mkdir -p /data/docker/lib
3.拷贝源数据到新目录
cp -r /var/lib/docker /data/docker/lib
4.配置system文件,指定数据目录
mkdir -p /etc/systemd/system/docker.service.d
vim /etc/systemd/system/docker.service.d/devicemapper.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --graph=/data/docker/lib/docker
5.重新加载system
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
6.确认docker信息
docker info |grep 'Root Dir'
执行docker ps 、docker images 命令测试,无问题后删除/var/lib/docker
|