前端切图仔入门Docker,三分钟上线自己的博客平台

news2024/12/22 20:46:52

依稀记得2022年趁某平台优惠买了台云服务器,周未准备安装MySQL数据库,两天时间卡在MySQL环境配置上,实在是折磨一气之下把服务器给退了。

要是我早一点学会Docker,我的博客估计已上线一年啦!前端切图仔学会Docker,我真的能让你三分钟上线自己博客平台。

不骗人,先把我的博客平台秀出来给xdm瞅瞅。

网址:https://www.linglan01.cn

Docker能做什么?

举个🌰,大家有没有体验过在服务器上安装MySQL、Node.js等经历,安装它们并是不像手机应用商店、macOS中的App Store那样点击下载即可,我们还需要为它们手动配置环境变量、路径,更甚者要设置权限。像我整理的linux安装Node.js文档,为了安装它我需要手敲好几个命令:

Node.js安装是相对简单的,为搭建一个后台可能我们需要使用到MySQL、Nginx、Redis等等。如果搭建这些服务能像我们前端开发熟悉的Npm包管理器那样一个命令下载安装别人已经配置好的该多好,我只想做个伸手党,而Docker正好圆了我这个想法。

简言之,Docker是帮助开发者快速简单搭建、部署、安装应用服务的一个工具。当然Docker功能不仅仅局限于这些,其他功能我暂时没有使用到,xdm自行研究吧。

Docker中的三个重要概念

镜像:

镜像概念等价于Npm包的概念,直接理解成Npm第三方包即可。例如:我们下载vue开源的包npm i vue ,下载Node.js镜像docekr pull node

容器

容器就有点难理解,Docker 容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。Docker 容器可以运行、开始、停止、移动和删除。每一个 Docker 容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行部分。

前端xd可以将其理解成npm run dev命令执行后产生的结果。

仓库:

这个概念最容易理解了,直接将它理解与Npm仓库一样的东西。像使用命令npm i vue下载vue,npm其实是先在npm官网地址https://www.npmjs.com/search?q=vue查找,查找有对应包名后再下载。

同样的,当docker下载Node.js镜像docker pull node,它也是通过Docker仓库链接https://hub.docker.com/_/node查找后再下载。

Docker的使用

默认xdm已经是合格的开发人员,面向bing搜索安装Docker是小菜一碟,所以我不想写Dokcer的安装,直接跳到Docker的使用。

没有玩过Docker,xdm肯定玩过Npm,特别是前端开发人员。Npm 常用命令,我默写都能默写出来。这里我用表格将Docker常用命令与Npm常用命令列出来,其实它们很多命令是某几个英语单词换掉了,含意是一样的。

Dockernpm作用
docker pull Docker镜像名npm i npm包名下载npm包/Docker镜像
docker rmi Docker镜像Idnpm uninstall npm包名删除npm包/Docker镜像
docker imagesnpm list查看当前已下载的npm包/Docker镜像

现在我们在服务器环境使用上列命令下载Node.js镜像来耍耍。

我服务器Docker版本是v19.03.9:

咱先查看当前有哪些Docker镜像:

已存在Node.js镜像,并且TAG是latest,说明当前的镜像是最新版本。

那我们下载另一个版本的Node.js镜像,下载其他版本的镜像仅需要在镜像名后加上tag,如下载https://hub.docker.com/_/node/tags页面中第一列tag为lts-buster的Node.js镜像。

下载lts-buster的Node.js镜像,然后再查看当前所有镜像:

//下载node tag为lts-buster的Docker镜像
docker pull node:lts-buster
//查看当前所有Docker镜像
docker images

删除镜像:

docerk rmi 镜像Id

这里需要注意,删除是根据ID删除可不要搞错了,镜像ID是镜像下载后自动生成的,我们不需要做其他的操作。

以上是关于Docker操作镜像常用的几个命令,是不是非常容易。

然后是关于Docker容器的常用命令:

Docker命令作用
docker ps查看当前的容器(运行、暂停状态)
docker ps -a查看当前所有的容器(所有状态)
docker logs 容器ID查看容器日志
docker rm 容器ID删除容器
docker rm 容器ID -f强制删除容器
docker stop 容器ID暂停容器运行

如:查看我服务器当前的容器,其中docker ps命令仅展示STATUS(状态)为非Exited(停止)的,docker ps -a将展示所有。因为图中红框框起来的容器STATUS(状态)为Exited(停止),所以想见到它应使用docker ps -a命令。它是我故意停止的,但在部署中,停止的原因可能是某个参数错误或容器内部报错导致,这时需要我们去排查原因,docker ps -a肯定会用上,docker logs 容器ID查看容器错误日志也不要忘记了。

删除、暂停容器不贴图啦,运行中的容器不能直接删除,需要先暂停容器运行。当然使用强制删除命令docker logs 容器ID -f就没有这个限制了。

最后是docker run ... 它较特殊重点写,它的作用是创建一个新的容器。

语法:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS常用配置有:

Options作用
-d后台运行容器,并返回容器ID
-p指定端口映射,格式为:主机(宿主)端口:容器端口
–name=“nginx-lb”为容器指定一个名称
–volume , -v绑定一个数据卷

现在创建Nginx容器来演示下,先使用docker pull nginx下载Nginx镜像。

创建一个指定名称为mynginx的容器:

这里添加了-d,它的作用是使容器在后台运行,一般都会把它加上。

删除指定名为“mynginx”的容器,然后再次创建指定名称为mynginx的容器,这次去掉-d看下效果:

去除-d,创建容器运行后,终端面板不能再有其他操作,关闭当前终端面板也会导致容器停止运行。无特殊要求记得带上-d

容器是独立的,容器启动一个服务,外界如果想访问,则需要暴露出一个端口,让我们能访问到容器内部的服务,像nginx默认监听端口为80,当我们去访问一个nginx容器服务时,需要使用-p将容器内的80端口映射出来。

由于我的服务器80端口已被其他应用占用,所以改用3000端口演示:

这个时候,外网就可以直接访问Nginx。我的服务器IP已绑定域名,即域名+ 3000端口即可成功访问到Nginx。

绑定数据卷听着非常牛逼的名词,但其实它非常好理解。举个🌰,创建Nginx容器服务后,容器内会存在nginx.conf文件。如果我们想自定义Nginx配置,就需要对nginx.conf进行修改,容器是无状态的,Nginx容器删除重新创建,它的nginx.conf文件内容将会被重置。我们需要将nginx.conf文件的修改持久化保留,需要使用-v进行数据卷绑定。
如:现在服务器存在nginx.conf文件,并内容已修改成我们想要的配置

docker run --name "myNiginx" -v /nginx:/var/nginx -d nginx

其中/nginx:/var/nginx:左边是我们修改的nginx.conf,右边是Nginx容器内的默认配置文件nginx.conf,左边文件映射到右边文件,这样就能做到持久化保留nginx.conf文件的修改。

Docker Compose是什么

Docker Compose是Docker官方的开源项目,实现对Docker容器集群快速编排。

举个🌰,像公司中实际项目里,后端这边不单单仅起一个java服务,他可能需要通过java操作MySQL或Radis一类的数据库,可能还会使用到Nginx进行负载均衡一类的服务等等。

因此,可能需要创建管理2个或2个以上的容器,运行的容器变多又分散不方便管理,比如:我想把后端服务相关的容器都停了,难道让我反复执行docker stop 容器ID命令?

Docker Compose出于上述问题出现,它允许我们通过创建一个xxx.yaml文件统一配置管理多个容器,然后只要一个命令,就能同时启动/关闭这些容器

Docker Compose使用

Docker的使用一样,Docker Compose也跳过安装,xdm面向bing搜索进行安装吧。

Docker Compose常用命令:

Docker Compose命令描述
docker-compose up -d启动服务
docker-compose down停止服务

再使用Docker Compose命令之前,先准备一个.yaml文件。

这里不再逐一粘贴Docker Compose命令执行结果图,后面一节有实例。

搭建博客平台

有了上述Docker、Docker Compose入门知识后,我们可以开始搭建个人博客平台的操作啦!

我的个人博客平台https://www.linglan01.cn是部署Github社区的开源项目vanblog,它是一个个人博客系统,移动端自适应,具体的介绍xdm请移动它的官方文档。

我们直接看到部署方式这节:

把邮箱修改成自己的,如果没有其他要求,其他位置的配置不需要改动。

在服务器创建docker-compose.yaml文件,复制官方文档的配置到docker-compose.yaml文件中。由于我想把mongoDb数据库服务开放出来,docker-compose.yaml文件中额外添加了其他的配置语句,xdm可以忽略掉它。直接复制官网贴的配置,再将邮箱地址修改成自己的即可。

最后运行docker-compose up -d命令。

总结

从一年前尝试安装配置MySQL数据库失败为开头,向前端开发人员讲述Docker、Docker Composep是什么,它能帮助咱们开发人员能做什么。

利用Npm包管理器相关概念,帮助前端人员更好的理解镜像、容器、仓库Docker中三个重要概念。也讲述了Docker、Docker Compose简单的入门知识以及基础的使用,且实战部署一个博客平台体验一波Docker技术带来的好处。

B站视频:
Docker部署博客平台_哔哩哔哩_bilibili

参考

Get Docker | Docker Documentation

Docker Compose overview | Docker Documentation

全网最详细的Docker-Compose详细教程

Docker 学习笔记:Docker简介和安装

Docker 入门教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/455430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI魔法秀:D-ID助你打造视频虚拟数字人

随着ChatGPT的各种玩法,写文章、做PPT、编程、修bug等,大家都玩的不亦说乎,可以说真的给家人们提升的效率很高,最近个人尝试着制作一个虚拟数字人,也是一个玩法,可以帮助很多中小企业做企业文化宣讲或者是产…

闲谈【Stable-Diffusion WEBUI】的插件:美不美?交给AI打分

文章目录 (零)前言(一)咖啡店艺术评价(Cafe Aesthetic) (零)前言 本篇主要提到了WEBUI的Cafe Aesthetic插件,这是一个相对独立的插件,单独标签页,…

周杰伦代言的蕉下,3年半广告宣传费超10亿,全靠营销?

五一假期将至,各地即将迎来旅游小热潮,不少游客也开始为自己的出行准备攻略。随着露营、徒步等城市户外运动的兴起,防晒理念“再度升温”,靠卖小黑伞起家的蕉下瞄准年轻世代消费者,又在疯狂收割“防晒焦虑”。 去年4月…

【JavaWeb】JavaScript

1、JavaScript 介绍 Javascript 语言诞生主要是完成页面的数据验证。因此它运行在客户端,需要运行浏览器来解析执行 JavaScript 代码。 JS 是 Netscape 网景公司的产品,最早取名为 LiveScript;为了吸引更多 java 程序员。更名为 JavaScript。 JS 是弱…

排序 - 冒泡排序(Bubble Sort)

文章目录 冒泡排序介绍冒泡排序实现复杂度和稳定性冒泡排序时间复杂度冒泡排序稳定性 代码实现核心&注意结尾 每日一道算法提高脑力,今天是第一天,来个最简单的算法–冒泡排序。 冒泡排序介绍 它是一种较简单的排序算法。它会遍历若干次要排序的数列…

对话庄表伟老师-文字实录

我内心有一套价值观,有一套世界观,它是一个完整的整体,无论我做任何的事情,工作也好、生活也好、学习也好、去做社区也好、或者是结识朋友也好、去聊天也好,背后的价值观在内心都是一整套的,互相之间是不会…

Python学习之简易图片浏览器

俗话说实践是学习最有效的方法。最近在学习python,于是就参考着各类文章,也倒腾了一个简易图片浏览器,效果图如下: 整个浏览器分为左右两侧,左侧是地址栏图片文件列表;右侧则是图片显示区域。 左侧地址栏有…

数据结构,二叉搜索树的详解

🧑‍💻作者:程序猿爱打拳,Java领域新星创作者,阿里云社区博客专家。 🗃️文章收录于:数据结构与算法 🗂️JavaSE的学习:JavaSE 🗂️MySQL数据库的学习: MySQL…

Python基础之类

一:什么是类 类即类别/种类,是面向对象分析和设计的基石,如果多个对象有相似的数据与功能,那么该多个对象就属于同一种类。有了类的好处是:我们可以把同一类对象相同的数据与功能存放到类里,而无需每个对象…

【AI绘画】Midjourney的使用及程序示例

Midjourney 1.背景2.Midjourney的原理3.Midjourney的使用方法4.Midjourney的示例代码 1.背景 Midjourney 是一款基于深度学习的图像转换工具,其可以将一张图像转换成具有不同风格的图像,例如将一张照片转换成卡通风格的图像。Midjourney 基于 TensorFlow…

Jetson Nano一步到位打开USB摄像头(Rosmaster小车)

背景:我用的rosmaster r2小车配的摄像头是Astra pro,也就是下图这款: 1. 支持的摄像头 Jetson开发包有多个用于连接相机的接口,包括USB、以太网和MIPI CSI-2。流行的相机是现成的支持,而Jetson生态系统合作伙伴支持广…

基于树莓派的OpenEuler基础实验二

文章目录 基于树莓派的OpenEuler基础实验二一、ROS中间件介绍1. ROS话题通信与服务通信2. 常见的ROS终端命令 二、中间件基础实验1. ROS的移植2. ROS的安装和环境配置3. 第一个ROS实践之开启小海龟4. ROS话题实践1)ROS工作区与软件包的创建2)ROS的话题通…

可能是最强的Python可视化神器,建议一试

数据分析离不开数据可视化,我们最常用的就是Pandas,Matplotlib,Pyecharts当然还有Tableau,看到一篇文章介绍Plotly制图后我也跃跃欲试,查看了相关资料开始尝试用它制图。 Plotly Plotly是一款用来做数据分析和可视化的…

《商用密码应用与安全性评估》第二章政策法规2.4商用密码应用安全性评估工作

商用密码应用安全性评估体系发展历程 第一阶段:制度奠基期(2007年11月至2016年8月) 第二阶段:再次集结期(2016年9月至2017年4月) 第三阶段:体系建设期(2017年5月至2017年9月&…

【Vue3】vue3中的watchEffect使用及其他的API

目录 一,watchEffect 二,生命周期 三,什么是hooks? 四,toRef 五,其他组合式API 5.1shallowReactive&shallowRef 5.2readonly&shallowReadonly 5.3.toRaw&markRaw 5.4自定义Ref-customRef ​5.5pr…

SSM框架整合之单表操作

1、Spring和Spring MVC父子容器 概念介绍 1.在Spring与SpringMVC进行整合的时候,一般情况下我们会使用不同的配置文件来配置Spring和SpringMVC,因此我们的应用中会存在至少2个ApplicationContext的实例,由于是在Web应用中,因此最…

基于Html+Css的图片展示26

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

AlgoC++第五课:基于矩阵的算法实现

目录 基于矩阵的算法实现前言1. 矩阵2. 矩阵求导推导3. 矩阵示例代码3.1 Matrix.hpp3.2 Matrix.cpp3.3 main.cpp3.4 拓展-cblas_sgemm3.5 拓展-LU分解 4. 多元线性回归5. 多元逻辑回归6. 最小二乘法7. 岭回归(L2)8. 多元牛顿法9. 高斯牛顿法10. Levenberg-Marquardt(修正牛顿法…

[Platforimio] LVGL +TFT_eSPI实现触摸功能

💥💥💞💞欢迎来到本博客❤️❤️💥💥 本人持续分享更多关于电子通信专业内容以及嵌入式和单片机的知识,如果大家喜欢,别忘点个赞加个关注哦,让我们一起共同进步~ &#x…

Centos下环境变量

文章内容如下: 1)什么是环境变量; 2)如何通过程序获取环境变量; 3) 常识规律 一。环境变量的定义 环境变量就是指一段路径。 定义环境变量主要是为了方便的执行程序。添加环境变量的方法是export PATH$PATH:/A/B&…