Docker
学习Docker主要是在学爬虫要用到Splash然后就按照网上的教程一顿操作发现最后把Docker下载下来了,然而对我来说完全不知道这是一个什么技术,以至于之后的一段时间甚至连借助Docker打开Splash都不会,所以决定简单的学习一下Docker相关的知识。
主要参考文章:
视频教程:
【狂神说Java】Docker最新超详细版教程通俗易懂_哔哩哔哩_bilibili
一、Docker概述
1.Docker简介
Docker是个什么东西?有什么作用?为什么要使用它?
Docker概念多出现在JAVA软件开发中,当开发人员开发好一个jar包之后,会利用Docker将jar包和相关运行环境打包在一起发布在Docker仓库上,运维人员只需要去仓库下载这个镜像即可运行,不需要再手动配置相关运行环境 —— 这个概念是不是很熟悉?Python中的Anaconda是一个Python发行版(内置安装有conda包管理工具),可以配置不同的虚拟环境来兼容不同的Python解释器以及Python包,便于我们使用不同的环境运行不同的项目;需要注意的是,两者的概念尽管相似,但是Docker涉及的范围实际更大,我们可以在Docker的仓库中找到Anaconda的镜像下载并运行Anaconda(因为Anaconda也是一个软件),可以参照基于Docker搭建Anaconda环境 - 知乎 (zhihu.com)进一步区分两者;
另外一点是,Docker使用容器技术(一种虚拟化技术),而VMware使用虚拟机技术(同样是一种虚拟化技术,本质上是一种环境解决方案),乍一看两者有些相似(的确,在Docker出来之前,程序员使用的都是虚拟机技术),但是Docker之所以火爆的原因就在于它的体积特别小巧,我们知道使用VM配置运行一个虚拟机需要占用很大的内存(因为虚拟机完全虚拟了一个完整的计算机,但实际上我们利用这个虚拟机只会做一些单一的工作),而使用Docker就只需要一些必备的核心以及运行环境我们就能启动运行需要的软件,体积最大也才几百M,非常的方便;
虚拟机技术:虚拟出一套硬件,运行一个完整的操作系统,在这个操作系统上安装和运行软件
容器技术:容器内的应用直接运行在宿主机(我的是Windows)的内容,容器是没有自己的内核的(用的是宿主机的内核),也没有虚拟化硬件,故极为轻便(可以在一个物理机上运行几十个MySQL,使用虚拟机技术是基本不可能的);且每个Docker容器互相隔离互不影响
两者横向对比:由下图可以看出Docker是比VM快速、小巧的
2.容器技术
前面介绍说了一堆容器技术,这里简单总结一下:
- 容器镜像是
轻量的、可执行的独立软件包
,包含软件运行所需的所有内容
:代码、运行时环境、系统工具、系统库和设置; - 容器化软件适用于基于 Linux 和 Windows 的应用,在
任何环境
中都能够始终如一地运行; - 容器赋予了
软件独立性
,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突;
3.Docker结构
Docker最重要的三个概念分别是:
- 镜像:可以将镜像看作C++中的模板,通过这一个镜像可以创建多个容器(使用run命令创建容器,注意镜像是不能提供服务的,容器才是提供服务的);
- 容器:可以将容器理解为简易版本的操作系统(相当于是VM的阉割版,只有一部分功能),可以独立运行一个或多个应用;
- 仓库:这里的仓库概念与GitHub的仓库概念是类似的,Docker仓库用于存放Docker镜像,分为私有仓库和公有仓库(国外有Docker Hub,国内有aliyun等);
4.Docker Desktop
Docker Desktop是可以部署在windows运行docker的应用服务,基于windos的Hyper-V服务和WSL2内核在windos上创建一个子系统(linux),从而实现其在windows上运行docker。
我们需要在Windows的环境下安装Docker可以参考下面的文章:
- 安装Docker需要更新WSL参考安装Docker Desktop报错WSL 2 installation is incomplete. - 简书 (jianshu.com)
- Windows安装Docker参考Windows Docker 安装 | 菜鸟教程 (runoob.com)
- Docker配置参考(18条消息) Dockerapp安装与使用_宠乖仪的博客-CSDN博客
关于Docker Desktop的简单使用参考:
- (22条消息) Docker-desktop(Docker桌面版)——入门篇_绿色恐龙GD的博客-CSDN博客_dockerdesktop使用入门
- (29条消息) Docker Desktop使用入门_xyc1211的博客-CSDN博客_dockerdesktop使用入门
二、Docker命令
1.帮助命令
1 |
|
1 |
|
1 |
|
2.镜像命令
2.1 查看镜像
1 |
|
2.2 搜索镜像
1 |
|
2.3 下载镜像
1 |
|
2.4 删除镜像
1 |
|
1 |
|
1 |
|
3.容器命令
3.1 列出容器
1 |
|
3.2 删除容器
因为在实际开发过程中我们经常会使用删除容器这个操作,不要担心删除了的影响,删除了再创建就行了
1 |
|
3.3 创建并运行容器
1 |
|
3.4 启动和重启容器
1 |
|
3.5 进入容器
run命令加了 -d 参数默认不会进入容器(即容器在启动后进入后台运行),想要进入容器需要使用指令:
- docker attach:进入容器正在执行的终端,不会启动新的进程,如果从这个容器退出,会导致容器的停止
- docker exec:进入容器后开启一个新的终端,可以在里面操作,如果从这个容器退出,容器不会停止,这就是为什么推荐使用 docker exec 的原因
3.6 退出容器
1 |
|
3.7 查看容器中进程
1 |
|