docker简单理解和使用

316 阅读5分钟

1. 简介

Docker是一个用于 构建(build),运行(run),传送(share)应用程序的平台

可以把各种运行环境配置在一起放在一个“集装箱”中,以便可以在任何环境都可以正确的运行。

为什么要使用docker: ex. 没有docker的情况下,如果要部署一个前端使用Vue,后端使用SpringBoot,DB使用Mysql的项目,需要先安装NodeJS环境,安装各种npm依赖,安装java运行时环境,再安装各种第三方依赖库,安装各种数据库,再使用环境变量,启动脚本,安装配置redis和配置nginx..... 运气不好的情况,这类事情要做一整天或者许多天 有了docker,就可以把这一个个打包成集装箱,开发环境运行成功了,测试环境一定也会成功的

2. Docker vs 虚拟机:

虚拟机是通过虚拟化(Hypervior)将物理资源虚拟为多个虚拟化设备的方法,一定程度上实现了资源的整合。虚拟机要启动一个完整的操作系统,其实我们只需要一个web引用程序。

Docker是容器的一种实现,是一个容器化的解决方案和平台,而容器是一种虚拟化技术,和虚拟机类似,也是一个独立的环境。与虚拟机不同的是,并不需要在容器中运行一个完整的操作系统,而是使用宿主机的操作系统,所以通常启动只需要几秒钟,因为资源需要少,可以运行多个容器,可以充分使用服务器的资源。

541b5f619bffd6bd2c9fb656af2ae09.png

3. 基本原理和概念

镜像对应java中的类,容器是一个实例(可以有一个,可以有多个);镜像是食谱,容器是做出来的菜,这个适合食谱上的一模一样的,食谱可以分享

docker仓库(Registry)是可以存储docker镜像的地方,最常用的是dockerhub;如果你发明了一道菜肴,也可以上传到食谱中,这样其他人可以根据这个食谱,做出一模一样的菜肴了,这就是镜像的共享和复用

966bfac744ae0b48040193f5f047cb9.png

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

  1. 创建一个Dockerfile(一个文本文件,有一条条指令,告诉docker如何构建镜像,镜像包括我们应用程序使用的所有命令,各种依赖,各种配置文件,和运行程序需要的内容等)
  2. 使用Dockerfile构建镜像
  3. 使用镜像创建和运行容器

比如说我们想要运行一个名叫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镜像仓库中

可以使用一个在线网站

labs.play-with-docker.com/

会给一个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(这里写镜像名字)# 运行镜像

78896d2ef01cf3c2787fb64adcaeb9f.png

6. 使用Docker Desktop

点击image就可以看到我们的镜像了,包括名字,创建时间等等 点击一下运行的按钮就可以运行这个程序了,相当于终端中的run命令

Containers是容器的意思

Volumes是逻辑卷的意思,逻辑卷是用来存储数据的,Docker中的容器是不会持久化的,容器停止后,容器中的数据会全部丢掉;如果要持久化,就需要逻辑卷