2024新春版:零基础Docker全栈开发部署速通攻略

相信大家对Docker早就不陌生了,网上也有很多Docker教程。有很多同学已经使用Docker大幅提高了开发和部署效率,但也有很多同学还没接触过,或者正在摸索Docker的学习阶段。Docker的初心就是让项目部署更加容易,确保一致的运行环境,解放开发者在环境部署上的大量时间,将精力专注于项目开发。就像本教程的初心一样,把Docker的使用方法,结合实战项目,手把手详实地讲解给大家,让大家少走弯路,节省自己摸索的时间。相信跟着本教程一步步操作下来,一定可以速成为基本功扎实的Docker高手。

先睹为快

先看下目录了解本教程都有哪些内容。

章节目录

sql 复制代码
1 Docker通俗解释
2 安装Docker
• 2.1 Windows安装方法
• 2.2 macOS安装方法
• 2.3 Linux(Ubuntu)安装方法
3 Docker初识篇
• 3.1 Docker基础环境相关命令
• 3.2 初识镜像(Image)和容器(Container)
• 3.3 开篇实战:搭建本地开发环境的Nginx Web服务(docker container)
• 3.3.1 创建并启动Nginx容器
• 3.3.2 容器的查看、停止、运行与删除
• 3.3.3 构建挂载(volume)宿主机Web目录的Nginx容器
• 3.3.4 小技巧:容器批量操作
• 3.3.5 查看容器的输出日志
• 3.3.6 本章知识点小结
4 Docker基础命令
• 4.1 Docker镜像操作(docker image)
• 4.1.1 拉取镜像
• 4.1.2 列出镜像和删除镜像
• 4.1.3 镜像的导出与导入(给离线机器安装)
• 4.2 挂载数据持久化(docker volume)
• 4.3 进入容器内部运行命令(docker container exec)
• 4.4 将容器打包成镜像(docker container commit)
• 4.5 显示容器正在运行的进程(docker container top)
• 4.6 懒人常用Docker命令
• 4.6.1 批量删除未使用的资源
• 4.6.2 容器运行结束后自动销毁该容器
• 4.7 使用--help查看全部docker命令
• 4.8 本章小结
5 Dockerfile
• 5.1 初识Dockerfile(FROM与RUN,docker image build)
• 5.2 ADD与COPY
• 5.3 WORKDIR
• 5.4 ARG与ENV
• 5.5 CMD
• 5.6 ENTRYPOINT
• 5.7 HEALTHCHECK
• 5.8 EXPOSE
• 5.9 VOLUME
• 5.10 更多Dockerfile命令
• 5.11 Dockerfile实战:使用Dockerfile构建静态网站Nginx镜像
• 5.12 本章小结
6 Docker Network
• 6.1 初识Docker Network
• 6.2 查看容器的网络配置(docker container inspect)
• 6.3 常用docker network命令
• 6.4 设置容器的网络
• 6.5 为什么不推荐使用默认名称为bridge的网络
• 6.6 host驱动模式网络
• 6.7 本章小节
7 Docker Compose
• 7.1 初识Docker Compose
• 7.2 安装Docker Compose
• 7.3 compose文件
• 7.4 docker compose常用命令
• 7.5 本章小结
8 全栈综合实战:搭建Nginx+PHP+Nodejs+MySQL全栈工程(开发环境+生产环境)
• 8.1 创建项目专用网络
• 8.2 搭建MySQL数据库
• 8.3 使用Docker版phpmyadmin可视化管理数据库
• 8.4 使用MySQL Workbench可视化管理数据库
• 8.5 搭建Nodejs API服务
• 8.5.1 基于express构建Nodejs项目
• 8.5.2 制作Nodejs服务的Docker镜像
• 8.5.3 运行Nodejs服务容器
• 8.6 搭建PHP API服务
• 8.6.1 安装ThinkPHP
• 8.6.2 实现PHP API业务逻辑
• 8.6.3 配置php.ini
• 8.6.4 基于php-apache制作开发环境的PHP镜像
• 8.6.5 基于php-fpm制作生产环境的PHP镜像
• 8.7 开发前端网站项目
• 8.7.1 基于Vite5初始化React网站项目
• 8.7.2 精简项目
• 8.7.3 支持Sass/Scss/Less/Stylus
• 8.7.4 重构页面
• 8.7.5 配置开发环境反向代理
• 8.7.6 在开发环境运行项目
• 8.7.7 build前端静态化网站项目
• 8.8 搭建生产环境Nginx Web服务
• 8.8.1 配置生产环境Nginx
• 8.8.2 编写dockerfile
• 8.8.3 创建生产环境的Nginx镜像
• 8.9 使用docker compose一气呵成开发环境全栈部署
• 8.10 上传Docker镜像
• 8.11 在生产环境使用docker compose部署全栈项目
• 8.12 其他说明
• 8.12.1 在多个服务器(宿主机)上部署
• 8.12.2 设置服务器开机自动启动项目容器
• 8.12.3 容器日志目录的挂载
• 8.12.4 选择安全的Dockerhub镜像
• 8.12.5 Python/Java/Go/C#/Rust等开发语言的Docker官方指南
9 教程源码及镜像源
结束语

教程使用的系统环境及软件版本

yaml 复制代码
【操作系统】
Windows 11
macOS Sonoma 14
Ubuntu 22.04 64位 UEFI版

【Docker软件】
Docker Engine: 24.0.7
Docker Desktop: 4.26.1
Docker Compose: v2.23.3-desktop.2

【Docker镜像】
mysql: 8.2.0
phpmyadmin: 5.2.1
node: 20.10.0
composer: 2.6.6
php: 8.3.0-apache
php: 8.3.0-fpm

【主要框架包】
express: 4.18.2
mysql2: 3.6.5
topthink/framework (ThinkPHP): 8.0.3
vite: 5.0.8
react: 18.2.0
antd: 5.12.5

看了学习目录,是不是已经开始摩拳擦掌迫不及待想要学起来了呢?放心,本教程把知识点与实战相结合,只要你跟着教程一步步操作下来,一定可以扎实掌握Docker的。

1 Docker通俗解释

Docker是什么?网上的解释已经很多了。打个通俗的比喻,Docker就是技术系统的"预制菜",把运行环境、项目代码、各种配置都打包在轻量级的虚拟机里。

Docker最关键的两个概念:镜像和容器。

打包而成的东西就是镜像,通过镜像来创建容器,容器就是实际提供服务的东西。再打个通俗的比喻,大家都知道面向对象编程,Docker镜像(Image)就相当于把一个项目的运行环境、项目代码、各种配置封装成一个类(Class)。Docker容器(Container)就是基于Class,new出来的一个对象(Object)。所以说,最终提供业务服务的是Docker容器(Container),Docker镜像(Image)是用来创建容器的。

Docker容器就像是一只麻雀,虽小,但五脏俱全。操作系统、网络、运行环境、项目代码...都在容器里。

Docker官网:

www.docker.com/

2 安装Docker

2.1 Windows安装方法

使用Docker需要Windows 10及以上版本。

具体步骤如下:

  1. 进入BIOS打开虚拟化(Virtualization),因每个品牌的BIOS界面不一样,请根据自己的电脑品牌自行在网上查找如何开启。(很多情况下是已经开启了虚拟化,可以先跳过此步骤,如果后续不成功,可以再来检查BIOS)。

  2. 在Windows 10/11上安装Hyber-V。

微软官方说明:在Windows 10上安装Hyper-V

learn.microsoft.com/zh-cn/virtu...

  1. 从Docker官网下载Docker Desktop(www.docker.com/products/do...

  2. 全部默认安装。

  1. 安装完成后,需要退出登录Windows来完成最终安装。
  1. 重新登录Windows后,会自动启动Docker。首次启动需要同意它的协议。
  1. 启动中,有可能会提示需要更新WSL,按照提示操作即可。不升级WSL是无法继续使用Docker的。
arduino 复制代码
Docker Desktop requires a newer WSL kernel version.

Update the WSL kernel by running "wsl --update" or follow instructions at https://docs.microsoft.com/windows/wsl/wsl2-kernel.

以管理身份启动PowerShell,执行:

css 复制代码
wsl --update

等待片刻,看到以下提示,即说明WSL安装完成。

已安装 适用于 Linux 的 Windows 子系统。
  1. 再次启动时,可能还会遇到以下报错:

以管理身份启动PowerShell,执行:

perl 复制代码
netsh winsock reset

执行完成后,不用重启电脑。再次启动Docker应该就可以正常运行了。

可以查看Docker相关的版本号,在PowerShell或CMD中,执行:

docker version

本教程演示输出的信息如下:

yaml 复制代码
Client:
 Cloud integration: v1.0.35+desktop.5
 Version:           24.0.7
 API version:       1.43
 Go version:        go1.20.10
 ...(略)
 
Server: Docker Desktop 4.26.1 (131620)
 Engine:
  Version:          24.0.7
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.10
  ...(略)

如果没有启动Docker Desktop,以上命令将不会输出Server: Docker Desktop的信息。

2.2 macOS安装方法

官网下载Docker Desktop的mac版本,直接安装即可。

官方下载地址:

www.docker.com/products/do...

安装后运行Docker Desktop。

2.3 Linux(Ubuntu)安装方法

在有UI界面的系统上,推荐安装Docker官方主推的Docker Desktop。

但是通常是在非UI界面的服务器上通过终端命令部署项目。

因此本教程以Ubuntu为例,介绍下适合在Linux系统上使用终端命令的Docker Engine。

本教程使用的Ubuntu版本为22.04 64位 UEFI版。

推荐使用官方提供的快捷脚本来安装,省心。

执行:

arduino 复制代码
curl -fsSL get.docker.com -o get-docker.sh

命令相关参数说明:

-f 连接失败时不显示http错误。

-s 即使发生错误,也不输出错误和进度信息。

-S 只输出错误信息,不输出其他结果,通常与-s一起使用。

-sS 组合起来则表示不输出任何信息。

-L 让 HTTP 请求跟随服务器的重定向。curl 默认不跟随重定向。

-o 表示将远程位置的文件进行重命名保存。

-o get-docker.sh 则表示以get-docker.sh的文件名保存。

-O 表示将远程位置的文件直接保存(不改变文件名)。

然后运行这个脚本。执行:

arduino 复制代码
sh get-docker.sh

稍等片刻,Docker即可安装完成。

快捷安装脚本官方说明:

docs.docker.com/engine/inst...

查看Docker版本,执行:

docker version

本教程演示输出的信息如下:

yaml 复制代码
Client: Docker Engine - Community
 Version:           24.0.7
 API version:       1.43
 Go version:        go1.20.10
 ...(略)

Server: Docker Engine - Community
 Engine:
  Version:          24.0.7
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.10
  ...(略)

如果看不到Server:版本号,并提示:

arduino 复制代码
Cannot connect to the Docker daemon at unix://xxxxxxx. Is the docker daemon running?

这是因为Docker的Server没有启动,执行:

sql 复制代码
sudo systemctl start docker

然后再执行:

docker version

看到Client和Server的版本,即说明完成了Docker的启动。

除了使用快捷脚本安装Docker外,还有比较繁琐的一步步安装方式,这里不再演示,有兴趣可以去官网了解。

更多Linux系统的Docker Engine安装方法请参阅官方说明:

docs.docker.com/engine/inst...

3 Docker初识篇

3.1 Docker基础环境相关命令

查看Docker版本:

docker version

查看Docker环境信息:

docker info

列出Docker所有命令:

docker

在使用过程中,如果不知道命令后面加什么参数,可在命令后面添加--help来查看该命令支持的参数:

bash 复制代码
docker 某个命令 --help

3.2 初识镜像(Image)和容器(Container)

Docker镜像(Image)是一个只读文件,它包括运行项目应用所需的文件系统、源代码等等,并且具有分层的概念。

Docker容器(Container)可以形象地比喻为一个由Docker镜像创建的微型的虚拟机,它提供了项目应用的基础系统环境。但它跟虚拟机在原理上还是不同的,这里就不深入说明了。

创建Docker容器实际上是复制Docker镜像,并这个镜像上加上一层可读写的层,叫做Container Layer。

基于同一个镜像可以创建多个容器。比如,基于Nginx镜像创建两个Nginx容器,一个容器挂载宿主机的D:/web1目录作为网站目录,运行在80端口上;另一个容器挂载宿主机的D:/web2目录作为网站目录,运行在81端口上。

上述提到的宿主机是什么?简单来说就是运行Docker的机器。

比如,在公司发的办公电脑(宿主机)上安装Docker,通过Docker镜像创建了Docker容器(虚拟机),这里的宿主机就是办公电脑这台物理机器。

再比如,租了一台云主机ECS(宿主机,虽然它本质上也是虚拟机),在这台ECS上安装了Docker并创建了Docker容器(虚拟机),这里的ECS云主机就是Docker容器的宿主机。

比喻再多,不如直接上案例理解得快。

3.3 开篇实战:搭建本地开发环境的Nginx Web服务(docker container)

直接就介绍Docker命令的话,会显得太枯燥。结合实战案例,带着目的来学习会更容易理解。

第一个小目标:使用Docker搭建本地Nginx Web服务。

3.3.1 创建并启动Nginx容器

执行:

arduino 复制代码
docker container run -d -p:81:80 nginx

命令解释:

docker container run 这是创建并启动容器的主体命令。

-d 以detached模式运行Docker容器。detached模式就是将容器运行在后台,不会随着终端控制台(CMD、PowerShell、Terminal等)的退出而终止。

-p:81:80 将容器的80端口映射到宿主机的81端口。访问宿主机的81端口就是访问该容器的80端口。

nginx 镜像名称。完整的形式应该是nginx:latest,冒号(:)后面是镜像的Tag标识(可以理解为版本号),可以拉取指定Tag标识的镜像。默认是latest。

Q:为什么把容器的80端口映射到宿主机的81端口?

A:当然你可以设置为都是80端口。教程之所以这么设置,一是考虑到很多开发同学的电脑已经占用了80端口(比如已经搭建了Nginx、Apache服务),二是便于初学者区分冒号(:)前表示宿主机端口,冒号(:)前表示容器端口。

docker container run的逻辑是,先在宿主机上寻找是否已存在此镜像,如果不存在,则从Dockerhub上拉取对应Tag的镜像。

Q:Dockerhub是什么?

A:Dockerhub(hub.docker.com/)是Docker官方维...

初次运行时,由于本地并不存在nginx镜像,因此会显示:

arduino 复制代码
Unable to find image 'nginx:latest' locally

不用慌,Docker紧接着就会自动从Dockerhub拉取Nginx镜像,然后创建容器并运行起来。

以上命令运行结束后,浏览器打开http://localhost:81/,Nginx欢迎页面正常打开。

虽然Nginx服务成功启动了,但只展示个欢迎页并没有什么实际意义。下面就结合基础命令的学习介绍下如何让它加载指定的Web服务目录。

3.3.2 容器的查看、停止、运行与删除

刚刚创建的容器没有实际意义,现在来删除它。

列出当前正在运行的容器,执行:

bash 复制代码
docker container ls

输出信息如下:

bash 复制代码
CONTAINER ID   IMAGE     COMMAND                   CREATED          STATUS          PORTS                NAMES
7475450126e7   nginx     "/docker-entrypoint...."   25 minutes ago   Up 25 minutes   0.0.0.0:81->80/tcp   vibrant_wu

以上有些信息是随机生成的(例如CONTAINER ID、NAMES),会与你那边的输出不一致。

各列所表示的意义如下:

CONTAINER ID 容器的唯一ID,随机生成。

IMAGE 镜像名称。

COMMAND 执行的命令(一般不用关注)。

CREATED 容器的创建的时间。

STATUS 容器的状态,UP表示正在运行。

PORTS 容器运行的端口,格式为:宿主机端口->容器端口。

NAMES 容器名称,如果未设定,则由系统随机生成。

停止容器,执行:

arduino 复制代码
docker container stop 容器ID或者容器名称

结合本次运行的示例,实际执行的应该是:

arduino 复制代码
docker container stop vibrant_wu
或者
docker container stop 7475450126e7

容器ID比较长,不用全部输入,可以只输入前几位,例如:

arduino 复制代码
docker container stop 747

这时执行docker container ls是看不到刚刚停止的容器的,如果要列出所有容器(包括已经停止的容器),执行的命令如下:

bash 复制代码
docker container ls -a

输出信息如下:

java 复制代码
CONTAINER ID   IMAGE     COMMAND                   CREATED          STATUS                          PORTS     NAMES
7475450126e7   nginx     "/docker-entrypoint...."   44 minutes ago   Exited (0) About a minute ago             vibrant_wu

可以看到容器的STATUS变为了Exited。

也可以在Docker Desktop的Containers页面查看所有容器。

切换到Images页面可以查看宿主机上拉取的所有镜像。

恢复运行已停止的容器,执行:

sql 复制代码
docker container start 容器ID或者容器名称
本示例实际执行的是:
docker container start vibrant_wu

※注:不要误用成了docker container run,这个命令是新创建并运行容器,而不是再次启动容器。

删除已停止运行的容器,执行:

bash 复制代码
docker container rm 容器ID或者容器名称

对于正在运行的容器,以上命令是无法删除的,需要加-f参数来强制删除,执行:

bash 复制代码
docker container rm -f 容器ID或者容器名称
本示例实际执行的是:
docker container rm -f vibrant_wu

3.3.3 构建挂载(volume)宿主机Web目录的Nginx容器

Q:什么是挂载宿主机目录?

A:可以理解成将"容器内的某个目录"映射到"宿主机上的某个目录",挂载后,容器上的这个目录就相当于一个指向宿主机某个目录的快捷方式。

【挂载的好处】

  1. 灵活的变更挂载目录里的内容,而不需要重新构建容器。
  2. 多个容器可挂载同一个目录,同步共享变更内容。
  3. 容器销毁后,挂载到容器外的文件不会随着丢失。

【挂载的适用场景】

  1. 配置文件。例如Nginx的配置文件,便于修改后,重启容器(主要是为了重启Nginx服务)就可以生效。
  2. 日志文件。例如Nginx的日志文件,否则容器销毁后,日志也会丢失。
  3. 开发环境的Web目录。开发环境的文件是经常变动的,挂载出来就可以即时生效,不用重新创建容器,也不用重启容器。
  4. 其他需要持久化保存或实时加载新变动文件的场景。

"挂载"在Docker中的关键词就是volume,意义就是对数据卷的持久化。

理论知识介绍完了,下面开始实际操作吧。

新建用于挂载的Web目录,本教程以D:/docker-www为例。你也可以根据操作系统选择自己喜欢的目录。

新建D:/docker-www/index.html:

xml 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Hello Docker</title>
</head>
<body>
	<h1>Hello Docker!</h1>
</body>
<style type="text/css">
html{ background: #7adbcb }
h1{ margin-top: 100px; text-align:center; color: #fff; font-size:60px; }
</style>
</html>

创建以D:/docker-www目录为Web挂载目录的Nginx容器,执行:

bash 复制代码
docker container run -d --name docker-demo-www-dev -p 81:80 -v D:/docker-www:/usr/share/nginx/html nginx

命令解释:

-d 在后台运行Docker容器。

--name docker-demo-www-dev 设置容器名称为docker-demo-www-dev。不推荐使用随机名称,后续很难找到对应的容器。

-p:81:80 将容器的80端口映射到宿主机的81端口。

-v D:/docker-www:/usr/share/nginx/html 将指定的容器目录挂载到宿主机目录,冒号(:)前面是宿主机目录,后面是容器目录。

nginx 镜像名称。完整的形式应该是nginx:latest,冒号(:)后面是镜像的Tag标识,可以拉取指定Tag的镜像。默认是latest。

浏览器打开http://localhost:81/,页面变成了刚刚制作的页面。改变D:/docker-www/index.html代码,刷新页面就生效了,无需重启容器。

如果不使用Docker,采用传统的部署方式,我们需要一步步安装Nginx,然后配置规则。使用Docker直接省略了繁琐的部署步骤,这就是Docker的魅力!

Q:怎么知道Nginx容器的Web目录是/usr/share/nginx/html?

A:在使用某个镜像前,非常建议先阅读镜像的官方说明。在Nginx镜像的官方说明(hub.docker.com/_/nginx)中,就...

3.3.4 小技巧:容器批量操作

当容器多了的时候,要停止/启动/删除多个容器,一遍遍的输入命令非常麻烦。

以停止容器为例,命令后面可以直接添加多个容器ID或容器名称,例如:

arduino 复制代码
docker container stop 容器ID1 容器ID2 容器ID3

如果要停止全部容器,可以执行以下命令:

arduino 复制代码
docker container stop $(docker container ls -aq)

命令解释:

docker container ls -aq 返回的是全部容器ID。-a 表示全部,-q 表示只返回容器ID。

3.3.5 查看容器的输出日志

某些情况下,需要查看容器的访问日志来排查问题。

如果想查看刚刚Nginx容器的输出日志,可以执行:

docker container logs 容器ID或者容器名称
本示例实际执行的是:
docker container logs docker-demo-www-dev

以上命令只是输出最近的日志信息,输出完后就结束了。如果要实时动态输出最新访问日志,可以执行:

docker container logs -f 容器ID或者容器名称
本示例实际执行的是:
docker logs -f docker-demo-www-dev

其实就是多加了-f 参数而已。

浏览器打开http://localhost:81/,每次刷新页面,终端控制台都会实时输出新的访问日志。

3.3.6 本章知识点小结

本章通过搭建本地开发环境Nginx服务,重点介绍了以下Docker命令:

arduino 复制代码
docker container ls
docker container run
docker container start
docker container stop
docker container rm
docker container logs

还有重要且常用的参数:

-d 表示在后台运行Docker容器。

--name xxx 设置容器名称为xxx。

-p:81:80 将容器的80端口映射到宿主机的81端口。

-v D:/docker-www:/usr/share/nginx/html 将容器的/usr/share/nginx/html目录挂载到宿主机D:/docker-www目录。

相信通过本章节的微型实战项目,你已经对Docker镜像和容器的概念不陌生了,也感受到了Docker的实际意义。

4 Docker基础命令

在上一章节中,通过实战案例,学习了docker container命令,这也是Docker操作中最经常使用的。接下来,再继续学习其他常用的基础命令。

❤️❤️❤️------试读结束------❤️❤️❤️

后续精彩章节

sql 复制代码
• 4.1 Docker镜像操作(docker image)
• 4.1.1 拉取镜像
• 4.1.2 列出镜像和删除镜像
• 4.1.3 镜像的导出与导入(给离线机器安装)
• 4.2 挂载数据持久化(docker volume)
• 4.3 进入容器内部运行命令(docker container exec)
• 4.4 将容器打包成镜像(docker container commit)
• 4.5 显示容器正在运行的进程(docker container top)
• 4.6 懒人常用Docker命令
• 4.6.1 批量删除未使用的资源
• 4.6.2 容器运行结束后自动销毁该容器
• 4.7 使用--help查看全部docker命令
• 4.8 本章小结
5 Dockerfile
• 5.1 初识Dockerfile(FROM与RUN,docker image build)
• 5.2 ADD与COPY
• 5.3 WORKDIR
• 5.4 ARG与ENV
• 5.5 CMD
• 5.6 ENTRYPOINT
• 5.7 HEALTHCHECK
• 5.8 EXPOSE
• 5.9 VOLUME
• 5.10 更多Dockerfile命令
• 5.11 Dockerfile实战:使用Dockerfile构建静态网站Nginx镜像
• 5.12 本章小结
6 Docker Network
• 6.1 初识Docker Network
• 6.2 查看容器的网络配置(docker container inspect)
• 6.3 常用docker network命令
• 6.4 设置容器的网络
• 6.5 为什么不推荐使用默认名称为bridge的网络
• 6.6 host驱动模式网络
• 6.7 本章小节
7 Docker Compose
• 7.1 初识Docker Compose
• 7.2 安装Docker Compose
• 7.3 compose文件
• 7.4 docker compose常用命令
• 7.5 本章小结
8 全栈综合实战:搭建Nginx+PHP+Nodejs+MySQL全栈工程(开发环境+生产环境)
• 8.1 创建项目专用网络
• 8.2 搭建MySQL数据库
• 8.3 使用Docker版phpmyadmin可视化管理数据库
• 8.4 使用MySQL Workbench可视化管理数据库
• 8.5 搭建Nodejs API服务
• 8.5.1 基于express构建Nodejs项目
• 8.5.2 制作Nodejs服务的Docker镜像
• 8.5.3 运行Nodejs服务容器
• 8.6 搭建PHP API服务
• 8.6.1 安装ThinkPHP
• 8.6.2 实现PHP API业务逻辑
• 8.6.3 配置php.ini
• 8.6.4 基于php-apache制作开发环境的PHP镜像
• 8.6.5 基于php-fpm制作生产环境的PHP镜像
• 8.7 开发前端网站项目
• 8.7.1 基于Vite5初始化React网站项目
• 8.7.2 精简项目
• 8.7.3 支持Sass/Scss/Less/Stylus
• 8.7.4 重构页面
• 8.7.5 配置开发环境反向代理
• 8.7.6 在开发环境运行项目
• 8.7.7 build前端静态化网站项目
• 8.8 搭建生产环境Nginx Web服务
• 8.8.1 配置生产环境Nginx
• 8.8.2 编写dockerfile
• 8.8.3 创建生产环境的Nginx镜像
• 8.9 使用docker compose一气呵成开发环境全栈部署
• 8.10 上传Docker镜像
• 8.11 在生产环境使用docker compose部署全栈项目
• 8.12 其他说明
• 8.12.1 在多个服务器(宿主机)上部署
• 8.12.2 设置服务器开机自动启动项目容器
• 8.12.3 容器日志目录的挂载
• 8.12.4 选择安全的Dockerhub镜像
• 8.12.5 Python/Java/Go/C#/Rust等开发语言的Docker官方指南
9 教程源码及镜像源
结束语

阅读完整版

📖 完整教程可订阅我的公众号【卧梅又闻花】

《2024新春版:零基础Docker全栈开发部署速通攻略》

教程源码及镜像源

本教程用于生产环境的镜像已上传Dockerhub。

教程中涉及的dockerfile、配置文件、项目代码也上传至Gitee和Github,方便大家使用。

Dockerhub:

hub.docker.com/u/betaq
Gitee:

gitee.com/betaq/docke...
Github:

github.com/Yuezi32/doc...

相关推荐
正小安18 分钟前
如何在微信小程序中实现分包加载和预下载
前端·微信小程序·小程序
_.Switch2 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
雪域迷影2 小时前
PostgreSQL Docker Error – 5432: 地址已被占用
数据库·docker·postgresql
一路向前的月光2 小时前
Vue2中的监听和计算属性的区别
前端·javascript·vue.js
长路 ㅤ   2 小时前
vite学习教程06、vite.config.js配置
前端·vite配置·端口设置·本地开发
长路 ㅤ   2 小时前
vue-live2d看板娘集成方案设计使用教程
前端·javascript·vue.js·live2d
Fan_web2 小时前
jQuery——事件委托
开发语言·前端·javascript·css·jquery
安冬的码畜日常2 小时前
【CSS in Depth 2 精译_044】第七章 响应式设计概述
前端·css·css3·html5·响应式设计·响应式
莹雨潇潇3 小时前
Docker 快速入门(Ubuntu版)
java·前端·docker·容器
Jiaberrr3 小时前
Element UI教程:如何将Radio单选框的圆框改为方框
前端·javascript·vue.js·ui·elementui