1. 简介
Docker是一个用于 构建(build),运行(run),传送(share)应用程序的平台
可以把各种运行环境配置在一起放在一个“集装箱”中,以便可以在任何环境都可以正确的运行。
为什么要使用docker: ex. 没有docker的情况下,如果要部署一个前端使用Vue,后端使用SpringBoot,DB使用Mysql的项目,需要先安装NodeJS环境,安装各种npm依赖,安装java运行时环境,再安装各种第三方依赖库,安装各种数据库,再使用环境变量,启动脚本,安装配置redis和配置nginx..... 运气不好的情况,这类事情要做一整天或者许多天 有了docker,就可以把这一个个打包成集装箱,开发环境运行成功了,测试环境一定也会成功的
2. Docker vs 虚拟机:
虚拟机是通过虚拟化(Hypervior)将物理资源虚拟为多个虚拟化设备的方法,一定程度上实现了资源的整合。虚拟机要启动一个完整的操作系统,其实我们只需要一个web引用程序。
Docker是容器的一种实现,是一个容器化的解决方案和平台,而容器是一种虚拟化技术,和虚拟机类似,也是一个独立的环境。与虚拟机不同的是,并不需要在容器中运行一个完整的操作系统,而是使用宿主机的操作系统,所以通常启动只需要几秒钟,因为资源需要少,可以运行多个容器,可以充分使用服务器的资源。
3. 基本原理和概念
镜像对应java中的类,容器是一个实例(可以有一个,可以有多个);镜像是食谱,容器是做出来的菜,这个适合食谱上的一模一样的,食谱可以分享
docker仓库(Registry)是可以存储docker镜像的地方,最常用的是dockerhub;如果你发明了一道菜肴,也可以上传到食谱中,这样其他人可以根据这个食谱,做出一模一样的菜肴了,这就是镜像的共享和复用
4. 安装和使用
直接官网下载对应版本即可,如果是windows需要额外开启Hyper-V功能,方法:控制面板搜 Hyper 找到 启动或关闭window功能勾选对应的重启电脑(自己的rog win11暂时没有找到这个,使用另一种下载wsl + 开启虚拟机和linux子系统)
具体看这个教程 www.bilibili.com/video/BV1vm…
# 在终端输入以下指令,如果有翻译,就是可以了,
# 如果发现server error(也就是只能看到client不能看到server),需要开启docker desktop
docker version
docker是使用Client-Server架构模式,Client和daemon可以使用Socket和RESTful API进行通信,docker daemon是服务端的守护进程 我们在终端中输入各种docker指令实际上都是通过docker客户端发送给docker daemon的
5. 容器化和Dockerfile
- 创建一个Dockerfile(一个文本文件,有一条条指令,告诉docker如何构建镜像,镜像包括我们应用程序使用的所有命令,各种依赖,各种配置文件,和运行程序需要的内容等)
- 使用Dockerfile构建镜像
- 使用镜像创建和运行容器
比如说我们想要运行一个名叫index.js的一个程序,我们其实是需要node.js这个工具的,实际上js和node.js的关系就相当于java和 jvm的关系 所以说我们可以配置一个dockerfile, 其中的第一步是安装一个操作系统,第二步是安装一个js运行环境(node.js),第三步是复制应用程序,依赖包,配置文件,第四步是启动命令应用程序
console.log("hello world")
建议在vscode中安装docker的扩展
alpine是一个轻量级的linux发行版,只有10几M,下载和部署都会特别快
FROM node:14-alpine
COPY index.js /index.js
CMD node /index.js
FROM node:14-alpine:
- 这是指定镜像的基础镜像,
node:14-alpine是一个轻量级的 Node.js 14 版本,基于 Alpine Linux 构建的。Alpine 是一个体积很小、资源占用低的 Linux 发行版,常用于需要精简体积的 Docker 镜像。
COPY index.js /index.js:
- 这一行是将本地的
index.js文件复制到镜像中的/index.js路径。COPY指令用于将文件从构建上下文中复制到镜像文件系统。
CMD node /index.js:
- 这一行定义了当容器启动时应该运行的命令。
CMD指令告诉 Docker 容器启动时执行node /index.js,即使用 Node.js 来运行复制到容器中的index.js文件。
docker build -t hellodocker .
docker image ls # 查看镜像文件
docker images # 查看镜像文件
docker run hellodocker(这里写镜像名字)# 运行镜像
如果想要在另一个环境运行这个应用程序,只需要把镜像文件复制过去,执行即可;也可以把镜像程序上传到dockerhub或者harbor镜像仓库中
可以使用一个在线网站
会给一个4小时的虚拟机,小扳手的地方选择 1 manager,设置的按钮地方会告诉全屏和放大的功能
docker pull geekhour/hellodocker 是一个命令,用于从 Docker Hub 上下载名为 geekhour/hellodocker 的镜像。
具体解释如下:
docker pull: 这是 Docker 的一个命令,用于从远程仓库(通常是 Docker Hub)中拉取(下载)一个指定的镜像。geekhour/hellodocker: 这是镜像的名称,其中geekhour是镜像的创建者或组织的名称,而hellodocker是镜像的具体名称。这个镜像会包含一个已经打包好的应用或服务。
pull下来后
docker pull geekhour/hellodocker # 从dockerhub上pull下来(此连接已经失效)
docker images # 查看镜像文件
docker run hellodocker(这里写镜像名字)# 运行镜像
6. 使用Docker Desktop
点击image就可以看到我们的镜像了,包括名字,创建时间等等 点击一下运行的按钮就可以运行这个程序了,相当于终端中的run命令
Containers是容器的意思
Volumes是逻辑卷的意思,逻辑卷是用来存储数据的,Docker中的容器是不会持久化的,容器停止后,容器中的数据会全部丢掉;如果要持久化,就需要逻辑卷