参考课程https://www.bilibili.com/video/BV1VC4y177re/?vd_source=b15169a302bee35f484245aecc69d4dd
参考书籍Docker 实践 - 面向 AI 开发人员的 Docker 实践 (dockerpractice.readthedocs.io)
1. 什么是Docker
1.1. Docker起源
随着计算机的发展,计算机上已经可以运行多个操作系统,每个系统上可以跑不同的应用,实现不同的功能。由此,虚拟机诞生,可以让我们在一个系统上跑多个系统。
虽然可以独立产生多个系统,但对系统性能有极大消耗,会消耗很多硬件资源。
那么如何让硬件资源不被OS消耗掉呢?
答:使用容器技术
Docker就是其中一种容器技术,目前比较流行。
1.2. Docker可以用来干什么
没有用OS,所以体积很小
当开发把项目交给测试的时候,直接交三个容器,测试就不用再配置一遍环境了
Docker Image 即 Docker 镜像,是一个特殊的文件系统,它包含了运行一个特定软件所需的所有内容,包括代码、运行时环境、库、配置文件等。可以将其理解为软件的一个 “快照”,它提供了一种可重复、可移植的方式来打包和分发软件。
Image是什么? 包含了你容器里面所需要运行的所有信息都在Image里面
Image可以干嘛? 可以利用Image来产生一个或无数个Container(容器),也就是说,当你希望在你的系统上运行一个Container的时候,我得在系统上指明我要运行哪个Image的Container以及基于哪个Image给我生成一个Container。Image和Container的关系类似于类和对象,用Image去产生一个又一个的Container去跑起来。
所以我们要做的就是把Image给准备好,之后可以直接用Image去跑一个Container。
Image放在哪里? 可以把Image放在DockerHub/Public Docker Register(公共的Docker注册表)或Private Docker Register里面,需要的时候可以把Image取出来生成Container。
总结:以后我做一个项目,写一个Image,把它存储在仓库中,需要时可以从任意一台连网的电脑中取出生成Container,运行项目。
1.3. 一些预备知识
Nginx 是一款轻量级的高性能 Web 服务器、反向代理服务器以及电子邮件(IMAP/POP3)代理服务器。
Web 服务器是一种专门用于存储、处理和向客户端(通常是 Web 浏览器)提供 Web 内容的软件或硬件设备。
1.4. 一些预备工作
- 打开“Docker Desktop”
- 通过代理访问外部资源(翻墙)
2. Docker的安装
Linux 是一个开源的操作系统内核
Ubuntu 是基于 Linux 内核开发的操作系统发行版。它采用了 Linux 内核,并在其基础上添加了各种软件包、图形界面、工具和应用程序,以提供一个完整的操作系统环境。
例如 Ubuntu、Fedora、CentOS 等都是常见的 Linux 操作系统发行版。这些发行版在 Linux 内核的基础上,添加了不同的软件和功能,以满足不同用户的需求。
我使用的是Windows系统,所以下载了
Docker Desktop 发行说明 |Docker 文档
WSL(Windows Subsystem for Linux)是适用于 Windows 的 Linux 子系统。
安装后遇到了“Docker Desktop - WSL update failed An error occurred while updating WSL. You can manually update using wsl --update.”的报错,解决方法是打开cmd,进行以下操作
C:\Users\Winky>wsl --update
正在安装: 适用于 Linux 的 Windows 子系统
已安装 适用于 Linux 的 Windows 子系统。
成功安装
3. 基础命令
3.1. 拉取镜像
docker pull [选项] [docker镜像地址:标签]
3.1.1. 拉取 “hello-world” 镜像
“hello-world” 镜像主要是用于验证 Docker 安装是否正确以及展示 Docker 的基本工作流程。它的功能非常简单,就是输出一段欢迎信息。
C:\Users\吴伊晴>docker pull hello-world:latest
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:53cc4d415d839c98be39331c948609b659ed725170ad2ca8eb36951288f81b75
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
What's next:
View a summary of image vulnerabilities and recommendations → docker scout quickview hello-world:latest
3.1.2. 拉取 “nginx” 镜像
“nginx” 镜像则是一个功能强大的 Web 服务器。当运行 “nginx” 镜像时,它会启动一个 Nginx 服务器实例,并进行一系列的配置和初始化操作,以准备处理传入的 HTTP 请求。
C:\Users\吴伊晴>docker pull nginx:latest
latest: Pulling from library/nginx
Digest: sha256:447a8665cc1dab95b1ca778e162215839ccbb9189104c79d7ec3a81e14577add
Status: Image is up to date for nginx:latest
docker.io/library/nginx:latest
3.2. 运行镜像/启动容器
“docker run” 这个命令实际上包含了两个主要的动作:
首先,它会根据指定的镜像创建一个新的容器;
然后,它会启动这个容器。
3.2.1. 运行“hello-world” 镜像
“hello-world”:输出的内容主要是一段欢迎信息和对 Docker 工作流程的简要说明,旨在向用户表明 Docker 安装正常,并提供一些进一步探索的建议和链接。
docker run hello-world:latest
C:\Users\吴伊晴>docker run hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
3.2.2. 运行 “nginx” 镜像
“nginx”:输出的内容主要是 Nginx 服务器的启动日志,包括服务器的版本、构建信息、操作系统信息、使用的事件方法以及启动的 worker 进程信息等。这些信息对于调试和监控 Nginx 服务器的运行状态非常有用。
不指定版本
如果不指定版本,则默认是最新版本
docker run nginx
C:\Users\吴伊晴>docker run nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
e4fff0779e6d: Pull complete
2a0cb278fd9f: Pull complete
7045d6c32ae2: Pull complete
03de31afb035: Pull complete
0f17be8dcff2: Pull complete
14b7e5e8f394: Pull complete
23fa5a7b99a6: Pull complete
Digest: sha256:447a8665cc1dab95b1ca778e162215839ccbb9189104c79d7ec3a81e14577add
Status: Downlo