相信大家对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官网:
2 安装Docker
2.1 Windows安装方法
使用Docker需要Windows 10及以上版本。
具体步骤如下:
-
进入BIOS打开虚拟化(Virtualization),因每个品牌的BIOS界面不一样,请根据自己的电脑品牌自行在网上查找如何开启。(很多情况下是已经开启了虚拟化,可以先跳过此步骤,如果后续不成功,可以再来检查BIOS)。
-
在Windows 10/11上安装Hyber-V。
微软官方说明:在Windows 10上安装Hyper-V
-
从Docker官网下载Docker Desktop(www.docker.com/products/do...
-
全部默认安装。
- 安装完成后,需要退出登录Windows来完成最终安装。
- 重新登录Windows后,会自动启动Docker。首次启动需要同意它的协议。
- 启动中,有可能会提示需要更新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 子系统。
- 再次启动时,可能还会遇到以下报错:
以管理身份启动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版本,直接安装即可。
官方下载地址:
安装后运行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即可安装完成。
快捷安装脚本官方说明:
查看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安装方法请参阅官方说明:
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:可以理解成将"容器内的某个目录"映射到"宿主机上的某个目录",挂载后,容器上的这个目录就相当于一个指向宿主机某个目录的快捷方式。
【挂载的好处】
- 灵活的变更挂载目录里的内容,而不需要重新构建容器。
- 多个容器可挂载同一个目录,同步共享变更内容。
- 容器销毁后,挂载到容器外的文件不会随着丢失。
【挂载的适用场景】
- 配置文件。例如Nginx的配置文件,便于修改后,重启容器(主要是为了重启Nginx服务)就可以生效。
- 日志文件。例如Nginx的日志文件,否则容器销毁后,日志也会丢失。
- 开发环境的Web目录。开发环境的文件是经常变动的,挂载出来就可以即时生效,不用重新创建容器,也不用重启容器。
- 其他需要持久化保存或实时加载新变动文件的场景。
"挂载"在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 教程源码及镜像源
结束语
阅读完整版
📖 完整教程可订阅我的公众号【卧梅又闻花】
教程源码及镜像源
本教程用于生产环境的镜像已上传Dockerhub。
教程中涉及的dockerfile、配置文件、项目代码也上传至Gitee和Github,方便大家使用。
Dockerhub:
hub.docker.com/u/betaq
Gitee:gitee.com/betaq/docke...
Github: