一、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包中的内容创建一个新的文件系统再导入为镜像