Docker
一、简介
·官方文档地址:https://www.docker.com/get-started |
---|
·中文参考手册:https://docker_practice.gitee.io/zh-cn/ |
1.1 什么是Docker
Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,
主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI) 。
帮助开发人员以及开发团队构建和发布应用。
Docker就是容器技术 ---- 应用容器技术
Docker 使用 Google 公司推出的 Go 语言进行开发实现,基于 Linux 内核的 cgroup,namespace ,以及 OverlayFS 类的 Union FS等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。
由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。
1.2 为什么是Docker
更快速的启动时间
一致的运行环境,更轻松的迁移
持续交付和部署
更轻松的维护和扩展
对进程进行封装隔离,容器与容器之间互不影响,更高效的利用系统资源
通过镜像复制N多个环境一致容器
1.3 Docker与传统虚拟机的对比
虚拟机缺点:
a.虚拟机运行软件环境之前必须自身携带操作系统,本身很小的应用程序却因为携带了操作系统而变得非常大,很笨重
b.通过虚拟机在资源调度上经过很多步骤;另外在调用宿主机的cpu,磁盘等这些资源的时候,拿内存举例,虚拟机是利用Hypervisor去虚拟化内存,整个调用过程是虚拟内存-虚拟物理内存-真正物理内存
Docker优点:
a.Docker是不携带操作系统的,所以Docker的应用就非常轻巧。
b.docker引擎分配资源直接是 虚拟内存 - 真正物理内存
传统虚拟机 | Docker容器 | |
---|---|---|
磁盘占用 | 几个GB到几十个GB左右 | 几十MB到几百MB左右 |
CPU内存占用 | 虚拟操作系统非常占用CPU和内存 | Docker引擎占用极低 |
启动速度 | (从开机到运行项目)几分钟 | (从开启容器到运行项目)几秒 |
安装管理 | 需要专门的运维技术 | 安装,管理方便 |
应用部署 | 每次部署都耗时耗力 | 从第二次部署开始轻松简捷 |
耦合性 | 多个应用服务安装到一起,容易相互影响 | 每个应用服务一个容器,达成隔离 |
系统依赖 | 无 | 需求相同或相似的内核,目前推荐Linux |
1.4 Docker安装
docker引擎支持主流操作系统 window macos linux unix
a.docker在linux上安装
通用所有平台:bash脚本安装
在测试或开发环境中Dockers官方为了简化安装流程,提供了一套边界的安装脚本,centOS系统上可以使用这套脚本安装,另外可以通过–mirror轩轩使用国内源进行安装:执行这个命令后,脚本就会自动 的将一切准备工作做好,并且把Docker的稳定版本安装在系统中。
·安装Docker
$curl -fsSL get .docker.com -o get-docker.sh
$sudo sh get-docker.sh --mirror Aliyun
·启动Docker
$sudo sytemctl enable docker
$sudo systemctl start docker
·创建docker用户组
$sudo groupadd docker
·将当前用户加入docker组
$sudo usermod -aG docker $USER
·测试docker安装是否正确
$docker run hello-world
b.docker在windows系统上安装
下载:https://www.docker.com/products/docker-desktop
安装:直接点击.exe安装
注意:
win10必须开启Hyper-V
常用命令 (linux中)
sytemctl status | start | stop | restart docker
·检测docker是否启动
docker info 查看安装dockers引擎版本号
·配置docker开机自启动
sytemctl enable docker
1.5 docker的核心概念和核心架构
1.镜像 images
定义:一个镜像就代表一个软件 如:mysql镜像,redix镜像···
特点:只读
2.容器 container
定义:基于某个镜像运行一次就会生成一个程序实例,一个程序实例称之为一个容器
特点:可读可写
3.仓库 repository
定义:用来存储docker中所有镜像具体位置
分类:
远程仓库:docker在全世界范围维护一个唯一远程仓库
存放全世界开发者镜像以及官方发布镜像
本地仓库:当前自己机器中下载镜像存储位置
用来存放docker镜像位置
只保存当前自己使用过的镜像以及自己定义镜像
1.run命令可以将镜像—容器,每运行一次就生成一个容器
2.docker hub:远程仓库web界面
搜索相关镜像
offical Images:代表官方镜像
案例:安装mysql
docker pull mysql:5.7.32
1.6 docker下载镜像的加速设置
阿里云有一个国内仓库的复制版本
阿里云加速服务设置
1.安装完成docker之后设置docker下载时加速服务器
2.注册阿里云服务
3.登录账号
4.管理控制台—搜索容器
5.在产品服务中搜索镜像/容器找到容器镜像服务
a.在打开页面中找到镜像加速器
b.切换使用系统
6.使用docker info查看设置
二、Docker
2.1 docker的helloWorld应用
docker run hello-world
总结:
1.docker run 镜像名 根据run后面镜像运行一个容器
2.在运行之前先在自己本地仓库中查找对应的镜像找到直接使用找不到自动去远程仓库下载
2.2 docker中镜像的相关操作
常用命令:
格式:
docker 【options】 command(具体命令)
2.2.1 安装完成辅助命令
命令 | 说明 | |
---|---|---|
1 | docker version | 查看docker的信息 |
2 | docker info | 查看更详细信息 |
3 | docker --help | 查看帮助信息 |
2.2.2 Images镜像命令
①查看本机中所有镜像
docker images --列出本地所有镜像
-a --列出所有镜像(包含中间镜像层)
-q --只显示镜像ID
**②搜索镜像
docker search [options] 镜像名 --去dockerhub上查询当前镜像
-s 指定值 --列出收藏数不少于指定值的镜像
--no-trunc --显示完整的镜像信息
**③从仓库下载镜像
docker pull 镜像名[:TAG|@DIGEST]
④删除镜像
docker image rm 镜像名:tag | 镜像ID
docker rmi 镜像名 --删除镜像
-f --强制删除
docker rmi -f $(docker images -q) 全部删除
2.2.3 container容器命令
将打包好的tar镜像文件导入到自己的docker仓库中
docker load -i 导入的tar的镜像文件名 | 镜像id
①运行容器
docker run 镜像名 --镜像名新建并启动容器
–name --别名:为容器新起一个名字
-d --启动守护式容器(在后台启动容器)
-p --映射端口号:原始端口号 指定端口号启动;可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。支持的格式有 ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort。-P --容器内部端口随机映射到主机的高端口。
示例:
docker run -d -name myTomcat tomcat
docker run -it -name myTomcat -p 8080(系统上外部端口):8080(容器内服务器监听端口 tomcat
直接启动tomcat,无法访问
宿主机端口与容器中端口进行映射
②查看运行的容器
docker ps --列出所有正在运行的容器
-a --正在运行的和历史运行过的容器
-q --静默模式,只显示容器编号
打印信息:
CONTAINER ID(容器ID)
IMAGE(镜像名)
COMMAND(容器内执行命令)
CREATED(创建时间)
STATUS(当前状态)
PORTS(容器服务监听的端口)
NAMES(容器名称)
③停止|关闭 | 重启容器
docker start 容器名字或容器ID
docker restart 容器名或容器ID
docker stop 容器名或容器ID
docker kill 容器名或容器ID
④删除容器
docker rm -f 容器id和容器名;
docker rm -f $(docker ps -aq)
⑤查看容器内进程
docker top 容器ID或容器名
⑥查看容器内部细节
docker inspect 容器ID
⑦查看容器运行日志
docker logs [OPTIONS] 容器ID或容器名--只是展示日志,并不会实时监听
docker logs -f 容器ID | 容器名称 --实时监听
docker logs -tf 容器ID | 容器名称 --实时监听的同时加入时间戳
docker logs --tail 5 容器ID | 容器名称 --查看容器日志的最后5行
⑧与容器内部进行交互
进入容器
docker exec -it 容器ID | 容器名 bash(命令行)
退出容器
exit
部署 操作系统与容器内的文件传输
从容器复制文件到操作系统
docker cp 容器ID | 容器名:容器内资源路路径 操作系统中的路径
从操作系统复制文件到容器
docker cp 操作系统中的路径 容器ID | 容器名:容器内资源路路径
2.3 Docker中的网络通信以及网桥的使用
2.3.1 为什么提供网络功能?
Docker允许通过外部访问容器或容器互联的方式提供网络服务。
2.3.2 外部访问容器
容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。
当使用 -P 标记时,Docker 会随机映射一个端口到内部容器开放的网络端口。
2.4 数据卷 volume
https://docs.docker.com/docker-for-windows/wsl/#develop-with-docker-and-wsl-2
作用:实现宿主机系统和容器之间的文件共享
数据卷的使用:
启动容器的时候绑定数据卷
docker run -d -p 8081:8080 --name tomcat01 -v 宿主机目录:容器内目录 tomcat
1.自定义数据卷目录
docker run -d -p 8082:8080 --name tomcat01 -v D:\IFA\apache-tomcat-7.0.100\webapps:/usr/local/tomcat/webapps tomcat
2.自动数据卷目录
docker run -d -p 8082:8080 --name tomcat01 -v aa:/usr/local/tomcat/webapps tomcat
aa代表一个数据卷名字,名称可以随便写;
docker 在不存在时自动创建这个数据卷同时自动映射宿主机中某个目录
同时在启动容器时会将aa对应容器目录中全部内容复制到映射目录中
应用:
为了对数据进行保护,可以使用数据卷
三、Docker挂载异常
3.1 Docker下挂载的文件夹的内容之前还可以正常使用,突然间就看不到文件夹下的东西了,挂载的本地文件夹的东西还在
解决1:万能重启
解决2:更改文件夹目录为777