返回首页

Docker笔记

你好:

首先感谢你使用这份笔记手册,本学习笔记是我在自学过程(网课视频在下方链接)中的随手笔记,可能出现遗漏,顺序错误或语法,单词等错误,你可以在自己的学习过程中对这份笔记更正即可。

说明: 本笔记为本人学习过程中随手写的笔记,为复习使用,笔记中可能存在遗漏或错误,具体请以官方文档和权威书籍为准!谢谢! 笔记中的一些图片等元素因路径配置问题,可能会发生丢失。 笔记中展示的知识点仅为部分内容,完整内容请查阅官方开发文档内容!

----笔记参考资料----

黑马程序员Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+DockerCompose项目实战一套搞定哔哩哔哩bilibili

Docker: Accelerated Container Application Development

手册 | Docker 文档

Install | Docker Docs

一台Linux系统的虚拟机

 

注意:由于某些原因,部分网站/配置服务/镜像等可能出现无法打开获取等问题,请根据实际情况自行搜索解决。

Docker介绍

Docker Desktop 是一款适用于 Mac、Linux 或 Windows 环境的一键安装应用程序,可让您构建、分享和运行容器化应用程序和微服务。

它提供了一个简单的 GUI(图形用户界面),可让您直接在机器上管理容器、应用程序和镜像。

Docker Desktop 减少了在复杂设置上花费的时间,因此您可以专注于编写代码。它负责端口映射、文件系统问题及其他默认设置,并定期更新以包含错误修复和安全更新。

 

快速入门

Docker安装

以Debain12为例。使用存储库安装apt,其他版本的安装方式可以参考官网的安装教程

  1. 执行以下命令卸载所有冲突的软件包。

  2. 设置 Docker 的存储库

  3. 安装 Docker 软件包。

  4. 通过运行映像来验证安装是否成功:hello-world

  5. 安装成功image-20250525164646211

Docker启动与停止

 

卸载Docker

  1. 卸载 Docker Engine、CLI、containerd 和 Docker Compose 软件包

  2. 主机上的映像、容器、卷或自定义配置文件 不会自动删除。要删除所有镜像、容器和卷,请执行以下作:

  3. 删除源列表和密钥环

  4. 手动删除任何已编辑的配置文件。

 

Docker镜像加速

由于Docker服务器在国外,国内访问极其缓慢甚至无法打开。可以通过配置国内镜像的方法进行加速。

  1. 阿里云镜像加速器 容器镜像服务 ACR 控制台

  2. 其他镜像服务器

配置方法可参考服务商文档

 

Mysql部署

  1. 关闭虚拟机中运行的mysql

  2. 执行以下指令安装mysql

    指令解析

    镜像名称一般分两部分组成:[repository]:[tag]。

    • 其中repository就是镜像名

    • tag是镜像的版本

    例如:mysql:8.0

  3. 稍等片刻,安装成功 image-20250525173845272

  4. 测试效果,安装成功 image-20250525174908633

 

镜像与容器

当我们利用Docker安装应用时,Docker会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。Docker会在运行镜像时创建一个隔离环境,称为容器(container)。

Docker 镜像、容器、仓库是 Docker 技术中的三个重要概念。

通过使用 Docker 镜像、容器、仓库,可以实现应用程序的快速部署、运行和管理,提高了应用程序的可移植性和可伸缩性。

Docker 镜像、容器、仓库之间的关系如下:

48c7f8f982c54fd982543bae113b1b48.png

  1. Docker 镜像是一个只读的模板,包含了操作系统、应用程序、依赖库、配置文件等,用来创建 Docker 容器。

  2. Docker 容器是 Docker 镜像的一个运行实例,可以理解为一个轻量级的虚拟机。容器包含了运行应用程序所需的所有组件,包括操作系统、应用程序、依赖库等。

  3. Docker 仓库是用来存储和管理 Docker 镜像的地方,类似于代码仓库。Docker 镜像可以从仓库中拉取,也可以推送到仓库中进行存储和分享。Docker 官方提供了 Docker Hub 仓库,用户也可以自建私有仓库来存储和管理自己的 Docker 镜像。

综上所述,Docker 镜像是创建 Docker 容器的基础,Docker 容器是 Docker 镜像的运行实例,Docker 仓库是存储和管理 Docker 镜像的地方。通过使用 Docker 镜像、容器、仓库,可以实现应用程序的快速部署、运行和管理,提高了应用程序的可移植性和可伸缩性。

 

Docker基础

常见命令

image-20250525223639710

更多指令参考官方文档: 入门 | Docker 文档

Docker Docs

docker | Docker Docs

数据卷

数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。

image-20250525230131519

数据卷相关指令

指令说明
docker volume create创建数据卷
docker volume ls查看所有数据卷
docker volume rm删除指定数据卷
docker volume imspect查看某个数据卷的详情
docker volume prune清除数据卷

注意:

 

案例1-利用Nginx容器部署静态资源 需求:

  1. 创建容器,同时挂载数据卷

  2. 查看数据卷信息

    image-20250526132304388

  3. 进入数据卷目录,修改文件内容即可

 

案例2-mysgl容器的数据挂载 需求:

image-20250526141947818

注意:

 

自定义镜像

镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。

构建一个Java镜像的步骤:

  1. 准备一个Linux运行环境

  2. 安装JRE并配置环境变量

  3. 拷贝Jar包

  4. 编写运行脚本

image-20250526201705393

 

Dockerfile

Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。将来Docker可以根据Dockerfile帮我们构建镜像。常见指令如下:

指令说明示例
FROM指定基础镜像FROM centos:6
ENV设置环境变量,可在后面指令使用ENV key value
COPY拷贝本地文件到镜像的指定目录COPY ./jre11.tar.gz /tmp
RUN执行Linux的shell命令,一般是安装过程的命令RUN tar -zxvf /tmp/jre11.tar.gz && EXPORTS path=/tmp/jre11:$path
EXPOSE指定容器运行时监听的端口,是给镜像使用者看的EXP0SE 8080
ENTRYPOINT镜像中应用的启动命令,容器运行时调用ENTRYPOINT java -jar xx.jar

 

基于Ubuntu基础镜像,利用Dockerfile描述镜像结构

image-20250526203644293

当编写好了Dockerfile,可以利用下面命令来构建镜像:

-t:是给镜像起名,格式依然是repository:tag的格式,不指定tag时,默认为latest ·:是指定Dockerfile所在目录,如果就在当前目录,则指定为"."

 

容器网络

默认情况下,所有容器都是以bridge方式连接到Docker的一个虚拟网桥上:

image-20250526205030504

默认下,docker会给每个容器分配一个IP,但这个默认的IP可能会随着容器的启停等操作发生改变,非常不利于项目部署,因此可以利用加入自定义网络来解决。

加入自定义网络的容器才可以通过容器名互相访问,Docker的网络操作命令如下:

命令说明
docker network create创建一个网络
docker network ls查看所有网络
docker network rm删除指定网络
docker network prune清除未使用网络
docker network connect使指定容器连接加入某网络
docker network disconnect使指定容器连接移出某网络
docker network inspect查看网络详细信息

 

项目部署

准备:先将资料中mysql数据库导入

image-20250528112642150

部署前端

需求:创建一个新的nginx容器,将课前资料提供的nginx.conf、html目录与容器挂载

  1. 构建一个新的nginx容器,映射18080和18081端口,以及目录映射

  2. 将项目和配置文件上传到映射的目录

部署后端(Java)

  1. 在IDEA中打开资料中提供的后端项目 image-20250528112729864

  2. 项目打包 image-20250528114338713

  3. 将Dockerfile和打包好的jar包上传到服务器

  4. 构建镜像

    image-20250528120215370

  5. 新建一个容器网络,将mysql加入到该网络

  6. 创建,启动后端镜像容器,并将其加入创建的容器网络

    image-20250528120710035

  7. 测试访问 image-20250528120814385

 

DockerCompose

DockerCompose通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署。

image-20250528125207688

Docker Compose | Docker Docs

示例配置写法

DockerCompose指令

类型参数/指令说明
OPTIONS-f指定compose文件的路径和名称
 -p指定project名称
COMMANDSup创建并启动所有service容器
 down停止并移除所有容器、网络
 ps列出所有启动的容器
 logs查看指定容器的日志
 stop停止容器
 start启动容器
 restart重启容器
 top查看运行的进程
 exec在指定的运行中容器中执行命令