一、docker概述
1.1docker为什么会出现
各种环境配置十分繁琐,每一个机器都需要配置环境,难免出现各种问题。
发布一个项目jar需要配置(MySQL、redis、jdk、…),项目不能都带上环境安装打包:
传统:开发jar,运维来做 现在:开发打包部署上线,一套流程做完
Docker针对以上问题,提出了解决方案
1.2docker可以做什么?
虚拟机技术:(通过 软件 模拟的具有完整 硬件 系统功能的、运行在一个完全 隔离 环境中的完整 计算机系统)
缺点:资源占用多、冗余步骤多、启动慢
容器化技术:(容器化技术不是模拟的一个完整的操作系统)
Docker和虚拟机技术的区别:
传统的虚拟机,可以虚拟出一条硬件,运行一个完整的操作系统,在这个操作系统上安装和运行所需的软件
容器内的应用可以直接运行在宿主 主机的内核中,容器没有自己的内核,也不用虚拟硬件 (轻便)
每个容器是相互隔离的,每个容器内都有属于自己的文件系统,之间互不影响。
1.3docker的优点
应用于更快速的交付和部署
传统:通过大量的帮助文档,安装程序
Docker:打包镜像发布测试,一键运行
更便捷的升级和扩缩容
通过使用Docker,部署应用 如同搭积木一样!
更简单的系统运维
使用容器化之后,开发和测试环境是高度一致的
更高效的计算资源利用
Docker是内核级别的虚拟化,可以在一个物理机上运行很多的容器,让服务器的性能可以压榨到极致
1.4docker官网
官网:Docker官网 http://www.docker.com
仓库:
DockerHub官网 http://hub.docker.com
1.5docker三要素
镜像(image):模板(类),通过一个镜像可以创建多个容器(对象) 容器(container):独立运行一个或一组应用,通过镜像创建 仓库(repository):存放镜像的地方,分为公有仓库和私有仓库
1.6docker架构图
1.6.1 基本工作流程图
1.6.2 架构
Docker是一个C/S模式的架构,后端是一个松耦合架构,众多模块各司其职。运行的基本流程为:
用户是使用Docker Client与Docker Daemon建立通信,并发送请求给后者。
Docker Daemon作为 Docker架构中的主体部分,首先提供 Docker Server的功能使其可以接受 Docker Client 的请求。
Docker Engine 执行 Docker 内部的一系列工作,每一项工作都是以一个 Job 的形式的存在。
Job 的运行过程中,当需要容器镜像时,则从 Docker Registry中下载镜像,并通过镜像管理驱动 Graph driver将下载镜像以Graph的形式存储
当需要为 Docker创建网络环境时,通过网络管理驱动 Network driver 创建并配置 Docker 容器网络环境。
当需要限制 Docker容器运行资源或执行用户指令等操作时,则通过 Exec driver 来完成。
Libcontainer是一项独立的容器管理包,Network driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作。
二、 docker安装
查看环境,是否centos7及以上
卸载旧版本
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
安装所需的软件包:yum install -y yum-utils
设置镜像仓库(阿里云)
yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker相关的内容
# 更新yum软件包索引 yum makecache fast # 安装docker docker-ce 社区 yum install docker-ce docker-ce-cli containerd.io
启动docker:systemctl start docker
使用docker version查看是否安装成功
启动hello-world镜像:docker run hello-world
卸载docker
# 卸载依赖 yum remove docker-ce docker-ce-cli containerd.io # 删除资源 rm -rf /var/lib/docker # /var/lib/docker docker的默认工作路径
设置docker镜像加速器:参考
三、 docker常用命令
3.1 帮助命令
启动docker:systemctl start docker
停止docker:systemctl stop docker
重启docker:systemctl restart docker
查看docker状态:systemctl status docker
开机启动:systemctl enable docker
查看docker概要信息:docker info
查看docker总体帮助文档:docker --help
查看docker命令帮助文档:docker 具体命令 --help
3.2 镜像命令
docker images #查看所有本地的主机上的镜像
docker search xxx #搜索镜像
docker pull xxx #下载镜像
docker rmi xxx #删除镜像
组合使用 ,删除全部:docker rmi -f $(docker images -qa)
docker system df #查看镜像、容器、数据卷所占用的空间
QA:
docker虚悬镜像是什么?
repository、tag都是<none>的镜像
3.3 容器命令
说明:有了镜像才可以创建容器,Linux,下载一个centos/ubuntu镜像进行测试
docker pull centos/ubuntu
新建容器并启动
docker run [可选参数] image #参数说明 --name="Name" 容器名字,用来区分容器 -d 后台方式运行 -i 使用交互方式运行,通常与-t同时使用 -t 为容器重新分配一个伪输入终端,通常与-i同时使用 -p 指定容器的端口 -p 8080:8080 -p 主机端口:容器端口 -P 随机指定端口 #测试,启动并进入容器 [root@iZ8vbisqeqec8qgypcxvyqZ /]# docker run -it centos /bin/bash [root@dbb48fe6c0c6 /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
查询所有的运行的容器
docker ps 命令 #列出当前正在运行的容器 -a # 列出当前正在运行的容器+历史运行过的容器 -l #显示最近创建的容器 -n 2 #显示最近创建的2个容器 -q #静默模式,只显示容器的编号
退出容器
exit #直接容器停止并退出 Ctrl+P+Q #容器不停止退出
启动和停止容器
docker start 容器id/name #启动容器 docker restart 容器id/name #重启容器 docker stop 容器id/name #停止当前正在运行的容器 docker kill 容器id/name #强制停止当前容器
删除容器
docker rm 容器id/name #删除指定的容器,不能删除正在运行的容器;-f选项强制删除 docker rm -f $(docker ps -aq) #删除所有的容器
查看日志
docker logs -f -t --tail 容器id
查看容器中的进程信息
#使用top命令 docker top 容器id
查看镜像元数据
docker inspect 容器id
进入当前正在运行的容器
#方式一 是在容器中打开新的终端,并且可以启动新的进程,用exit退出不会导致容器的停止 docker exec -it 容器id /bin/bash #方式二 重新进入容器启动命令的终端,不会启动新的进程,用exit退出,会导致容器停止 docker attach 容器id
从容器内拷贝文件到主机上
docker cp 容器id:容器内文件路径 容器外文件路径
导出容器
docker export 容器id > 文件名.tar #导出容器的内容为tar包 cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号 #从tar包中的内容创建一个新的文件系统再导入为镜像