什么是 Docker
Docker 是一个开源的平台,用于自动化应用程序的部署、扩展和管理。它通过将应用程序及其依赖项打包到容器中,让应用可以在任何支持 Docker 的环境中运行。Docker 提供了一种隔离的环境来运行应用程序,确保应用程序在不同的计算机上具有一致的运行环境。
虚拟机的最大好处是能在你的硬件设施上运行各种配置不一样的平台(软件、系统),Docker在降低额外开销的情况下提供了同样的功能。它能让你将运行环境和配置放在代码中然后部署,同一个Docker的配置可以在不同的环境中使用,这样就降低了硬件要求和应用环境之间耦合度。
为什么需要 Docker
在虚拟机之前,引入新的硬件资源需要消耗几天的时间。Docker的虚拟化技术将这个时间降到了几分钟,Docker只是创建一个容器进程而无需启动操作系统,这个过程只需要秒级的时间。
前置环境
购置服务器
话不多说,我们直接进入正题
我们需要购置一台服务器,这里我使用的是阿里云服务器(不是广告)
如果你是高校学生,可以免费获取一张300元的优惠券,接着再去购置服务器相当于一年免费使用权
阿里云高校计划_云工开物_助力高校科研与教育加速-阿里云 (aliyun.com)
大家可以参考一下我的配置
CPU内存我们就用最低的2核2G就够了,然后操作系统选择 CentOS。
远程连接服务器
这里我使用 WindTerm 来远程连接我们的服务器,其他终端软件都是可以的,大家自行选择并下载。
我们新建一个会话,将刚刚购买的服务器公网IP填到这里,然后点击连接
这样我们就连接成功了
如果出现断开连接的情况,我们输入购买服务器时的用户名密码即可
Docker安装
做完准备工作,我们开始步入正题
CentOS 中如何安装 Docker,可以参考官方文档 CentOS | Docker Docs
卸载docker
如果你的服务器已经安装过 Docker,我们需要先删除旧版本 Docker,避免产生冲突
直接在控制台中运行以下命令
bash代码解读复制代码sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
安装工具包
安装一个方便管理 Yum 仓库和软件包的工具
bash代码解读复制代码sudo yum install -y yum-utils
配置阿里云镜像
为加快软件包的下载速度,我们可以使用国内的镜像源,这里选择阿里云镜像仓库
bash代码解读复制代码sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装 Docker 引擎
bash代码解读复制代码sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
启动 Docker
安装完成后,启动 Docker 服务并确保其运行
bash代码解读复制代码sudo systemctl start docker
验证Docker是否启动
查看运行中的应用
bash代码解读复制代码docker ps
如果在控制台运行看到以下表格,说明启动成功,当然如果你还没有应用,看到的当然是空表格
开机自启
为了避免每次重启服务器后手动启动 Docker,我们可以设置 Docker 开机自动启动
bash 代码解读复制代码sudo systemctl enable docker
配置镜像加速器
由于国内访问 Docker 官方镜像库速度较慢,我们可以配置加速器来提高镜像的拉取速度。这里使用腾讯云的加速器
bash 代码解读复制代码sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ccr.ccs.tencentyun.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker 基本使用
至此 Docker 已经安装配置完毕,我们介绍一下 Docker 的基本命令
搜索镜像
Docker 镜像是运行容器的基础,首先我们需要通过 DockerHub 搜索所需的镜像。以 nginx 为例,运行以下命令进行镜像搜索
bash代码解读复制代码docker search nginx
或者我们可以直接去到 DockerHub 官网 dockerhub 进行查询
拉取镜像
当找到所需镜像后,可以通过pull
命令拉取特定版本的镜像
bash代码解读复制代码docker pull nginx:1.21.6
如果不接:
默认拉取 latest 最新版本
bash代码解读复制代码docker pull nginx
查看本地镜像
bash代码解读复制代码docker images
这里将会展示pull
下来的所有镜像
运行镜像
bash 代码解读复制代码docker run nginx # 直接运行 nginx
docker run -d nginx # 后台运行 nginx
docker run -p 88:80 nginx # 将本机 88 端口映射到容器的 80 端口
docker run -d --name mynginx nginx # 后台运行并指定容器名称
Dockerfile
如果你想将自己的项目部署上线,那么你一定要知道 Dockerfile
Dockerfile 可以帮助我们构建一个自定义的 Docker 镜像
我们可以查看官方文档 Dockerfile reference | Docker Docs
Dockerfile
提供了一系列配置,每条指令定义了构建镜像的一个步骤,以下是常用指令
FROM
: 指定基础镜像。RUN
: 执行命令,例如安装软件包。COPY
: 将文件从主机复制到容器。WORKDIR
: 设置工作目录。CMD
或ENTRYPOINT
: 定义容器启动时执行的命令。EXPOSE
: 指定容器监听的端口。ENV
: 设置环境变量。
开始部署项目
了解了 Docker 的常用操作,我们开始部署我们的前后端项目,首先我们需要为前后端分别打造成为 Docker 镜像,这时候就需要用到 Dockerfile 了
部署前端
首先我们得知道,前端不就是静态资源嘛,我们要做的部署不就是把资源挂到我们服务器域名下吗,所以我们需要 nginx 帮我们进行代理。
我们新建一个文件夹,将dist
复制进来,同级下创建一个 Dockerfile 文件
Dockerfile代码解读复制代码FROM nginx:latest # nginx作为基础镜像 EXPOSE 80 # 暴露容器端口80 WORKDIR /app # 工作目录为 /app COPY dist/ /usr/share/nginx/html #将前端打包的资源 dist目录复制到 nginx 的默认静态资源目录 COPY nginx.conf /etc/nginx/conf.d/default.conf # 自定义 nginx 配置文件覆盖默认配置 CMD ["nginx","-g","daemon off;"] # 启动 nginx
Dockerfile 同级下再创建 nginx.conf 文件
conf代码解读复制代码server { listen 80; server_name localhost; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log error; location / { root /usr/share/nginx/html; index index.html index.htm; # 浏览器请求的资源不存在时,返回404 try_files $uri $uri/ /index.html; } # error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
于是我们得到了这样的目录
我们将这个目录打成tar
包
使用rz
命令将tar
包上传到服务器
等待tar
包上传完毕
ls
查看文件目录,如果上传成功可以看到我们的tar
包
接着使用tar -xvf xxx.tar
命令解压tar
文件
我们进入解压后文件目录
将前端文件目录打包成镜像,执行以下命令
bash代码解读复制代码docker build -f Dockerfile -t my-back-system-react:1.0.0 .
这行命令将会把本目录下的 Dockerfile 作为构建文件,构建一个名为 my-back-system-react:1.0.0
的 Docker 镜像。不要拉下后面的.
,否则不能成功构建
构建成功后,通过以下命令查看本地的 Docker 镜像
bash代码解读复制代码docker images
接下来可以运行这个镜像来启动容器
bash代码解读复制代码docker run -d -p 2222:80 my-back-system-react:1.0.0
这个命令会在后台运行容器,并将容器的 80 端口映射到主机的 2222 端口
这样我们的前端项目就成功部署上线了
我们可以查看运行中的容器
bash代码解读复制代码docker ps
我们可以在浏览器进行访问,服务器的公网ip 接上刚刚映射到主机上的 2222 端口,如果你看到了你的网站内容,恭喜你已经部署成功~
后端部署
同理,我们在项目根目录下新建 Dockerfile ,以 node 项目为例
这是一个以 node 为基础镜像构建文件
bash 代码解读复制代码FROM node
EXPOSE 3001
WORKDIR /app
COPY . . # 将项目的所有文件复制到容器的 /app 目录下
RUN npm install # 安装依赖
CMD ["node","index.js"] # 启动项目
接下来的工作就跟上面差不多了
- 打成tar包
- 上传至服务器
- 解包,进入目录
- 打包成镜像
- 启动容器
这样服务就部署好了,需要注意的就是理清各个端口,将前端请求的接口地址修改成部署后的地址就行。
最后
码字不易,感谢三连!
已将学习代码上传至 github,欢迎大家学习指正!
技术小白记录学习过程,有错误或不解的地方还请评论区留言,如果这篇文章对你有所帮助请 “点赞 收藏+关注” ,感谢支持!!
评论记录:
回复评论: