Docker优势:
1.交付物标准化:标准化设计大大提高了物流体系的运行效率。传统的软件交付物包括:应 用程序、依赖软件安装包、配置说明文档、安装文档、上线文档等非标准 化组件。
2.一次构建,多次交付:类似于集装箱的"一次装箱,多次运输",Docker镜像可以做到"一次 构建,多次交付"
3.应用隔离:Docker可以隔离不同应用程序之间的相互影响,但是比虚拟机开销更小
总之容器技术部署速度快,开发,测试更敏捷,提高系统利用率,降低资源成本。
Docker的度量:Docker是利用容器来实现的一种轻量级的虚拟技术,从而在保证隔离性的 同时达到节省资源的目的。Docker的可移植性可以让它一次建立,到处运行。Docker的度量可以从以下四个方面进行:
1.隔离性:Docker采用libcontainer作为默认容器,代替了以前的LXC。libcontainer的隔离性主要是通过内核的命名空间来实现的,有pid、net、ipc、mnt、uts命令空间,将容器的进程、网络、消息、文件系统和主机名进行隔离。
2.可度量性: Docker主要通过cgroups控制组来控制资源的度量和分配。
3.移植性:Docker利用AUFS来实现对容器的快速更新。AUFS是一种支持将不同目录挂载到同一个虚拟文件系统下的文件系统,支持对每个目录的读写权限管理。
4.安全性:安全性可以分为容器内部之间的安全性;容器与托管主机之间的安全性。容器内部之间的安全性主要是通过命名空间和cgroups来保证的。容器与托管主机之间的安全性主要是通过内核能力机制的控制,可以防止Docker非法入侵托管主机。
一、安装配置docker
1.国内源安装新版docker
配置阿里云Docker Yum源# yum install -y yum-utils device-mapper-persistent-data lvm2 git# yum-config-manager --add-repo http://mirrors.aliyun.com/docker- ce/linux/centos/docker-ce.repo
安装最新版本# yum install docker-ce -y
查看docker版本# yum list docker-ce --showduplicates
启动docker服务# systemctl enable docker# systemctl start docker
查看docker版本状态# docker -v
查看docker运行状态# docker info
2.生成docker的环境配置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://pilvpemn.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
#注意:一定注意编码问题,出现错误---查看命令:journalctl -amu docker 即可发现错误
3.docker数据存储位置
查看存储路径
[root@yixuan ~]# docker info | grep Root
修改默认存储位置:
在dockerd的启动命令后面追加--data-root参数指定新的位置
[root@yixuan ~]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --data-root=/data
[root@yixuan ~]# systemctl daemon-reload
[root@yixuan ~]# systemctl restart docker
查看是否生效:
[root@yixuan ~]# docker info | grep Root
二、Doctor的基础命令
镜像管理
# 搜索镜像 -f 指定star数量
docker search iname [-f starts=100]
# 拉取镜像
docker pull iname
#查看本地镜像 -q 只显示id
docker image list
docker images
docker image ls
#查看镜像的详细信息
docker image inspect iname
#删除镜像
docker rmi iname
#删除所有镜像 -f 强制删除,但是实际镜像不会删除,如果镜像删除不掉,说明可能有容器正在运行
docker rmi $(docker images -q) [-f]
#查看镜像的制作过程
docker history iname
容器管理
#创建容器 -i 标准的输入输出 -t 分配一个虚拟终端 -d 后台运行 --name 指定容器的名字 -p 指定端口映射 -e 指定环境变量
docker run -itd iname #运行回启动容器
docker create -it iname #创建容器,但是不启动
#查看运行中容器,-a 可以查看所有状态
docker ps
#删除容器 -f 强制删除
docker rm [-f] cname
#查看容器的详细信息
docker inspect cname
#启动
docker start
#关闭
docker stop
#重启
docker restart
#挂起
docker pause
#恢复
docker unpause
#强制关闭
docker kill
#进入容器
docker attach cname #通过命令进入容器 command,不常用
docker exec -it cname command #进入容器,在退出时无需执行ctrl+p+q,不会影响容器运行,command可以直接写为 /bin/bash
#复制
docker cp cname:path hostpath
#查看容器内的进程
docker top cname
#容器使用宿主机资源情况
docker stats [cname]
#查看容器日志
docker logs cname
#等待容器关闭返回值
docker wait
#docker 服务日志
docker events
#展示已经映射的端口
docker port cname
#查看容器内部的变化
docker diff
容器打包
docker export -o cname.tar cname
或
docker export cname > iname.tar (cname为容器名,iname为镜像名)
#导入镜像归档文件到其他宿主机:
docker import cname.tar cname:v1
镜像迁移
#保存一台宿主机上的镜像为tar文件,然后可以导入到其他宿主机上:save
讲镜像打包,与下面的load命令相对应
docker save -o nginx.tar nginx:tag
load
#与上面的save命令相对应,将上面save命令打包的镜像通过load命令导入
docker load < nginx.tar
#容器的迁移
docker export b25f3c | gzip > mynginx123.tar
zcat mynginx123.tar | docker import - mynginx123
镜像,容器深度操作
#显示镜像摘要
docker images --digests
#过滤镜像
docker images [-f|--filter] "key=value"
dangling:显示标记为空的镜像,值只有true和false
label:这个是根据标签进行过滤,其中lable的值,是docker在编译的时候配置的或者在Dockerfile中配置的
before:这个是根据时间来进行过滤,其中before的value表示某个镜像构建时间之前的镜像列表
since:跟before正好相反,表示的是在某个镜像构建之后构建的镜像
reference:添加正则进行匹配#镜像格式化输出
docker images --format "{{.ID}}\t{{.Repository}}"
.ID 镜像ID
.Repository 镜像仓库
.Tag 镜像标签[版本]
.Digest 镜像hash值
.CreatedSince 创建镜像后的时间
.CreatedAt 创建镜像的时间
.Size 镜像大小#容器格式化输出
docker ps --format "{{.ID}}\t{{.Command}}"
.ID 容器ID
.Image 镜像ID
.Command 执行的命令
.CreatedAt 容器创建时间
.RunningFor 运行时长
.Ports 暴露的端口
.Status 容器状态
.Names 容器名称
.Label 分配给容器的所有标签
.Mounts 容器挂载的卷
.Networks 容器所用的网络名称