关于docker那点事儿——docker基础命令

Posted 偷学技术的梁胖胖yo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于docker那点事儿——docker基础命令相关的知识,希望对你有一定的参考价值。

前言

官方文档:https://docs.docker.com
 
阿里云源:http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

一、docker 安装

  1. 关闭防火墙及selinux
systemctl stop firewalld
  
systemctl disable firewalld

sed -ri /^SELINUX=/cSELINUX=disabled /etc/selinux/config

setenforce 0
  1. remove掉旧docker包
yum list installed | grep docker

yum remove -y docker*
  1. 配置阿里云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

  1. 配置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 格式为:主机(宿主)端口:容器端口
-P, –publish-all    发布容器所有EXPOSE的端口到宿主机随机端口
--name string      指定容器名称
-h, –hostname      设置容器主机名
--ip string        指定容器IP,只能用于自定义网络
--network        连接容器到一个网络
-v, –volume list 文件系统挂载,多个挂载多个-v  格式为:主机目录:容器目录
--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数据存储,所以要迁移存储目录。

  1. 查看docker资源占用
docker system df
  1. 清理磁盘空间,包含无用容器、数据卷、网络、无tag镜像等
docker system prune

docker system prune -a # 会清理没有运行容器的镜像

  1. 迁移目录
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

以上是关于关于docker那点事儿——docker基础命令的主要内容,如果未能解决你的问题,请参考以下文章

关于docker那点事儿——docker网络模式

关于docker那点事儿——Dockerfile编写

Docker日志那点事

关于数据传输中加密解密那点事儿

关于清除arp 缓存的那点事儿

Docker那些事儿之编排工具docker-compose