有哪些搜索引擎网站,网站主编 做啥,php 设置网站根目录,wordpress允许上传rar前言#xff1a;这个系列将使用最前沿的cursor作为辅助编程工具#xff0c;来快速开发一些基础的编程项目。目的是为了在真实项目中#xff0c;帮助初级程序员快速进阶#xff0c;以最快的速度#xff0c;效率#xff0c;快速进阶到中高阶程序员。
本项目将基于谷粒商城…前言这个系列将使用最前沿的cursor作为辅助编程工具来快速开发一些基础的编程项目。目的是为了在真实项目中帮助初级程序员快速进阶以最快的速度效率快速进阶到中高阶程序员。
本项目将基于谷粒商城项目并且对谷粒商城项目进行二次重构使其满足最新的主流技术栈要求。
上篇文章介绍了vagrant技术快速构建虚拟机。这篇文章我们开始介绍docker容器化技术使用docker部署我们项目需要的环境。这篇文章真正的面向0基础的读者。但是我们并不会花大的时间代价而是快速带你掌握工作中真正可以用到的技术。
docker官方教程https://docs.docker.com/
1、为什么需要docker docker会将我们软件相关的配置文件、启动命令等全部打包。这样我们可以在任何环境中加载这个打包箱子无需重新配置直接运行。完全还原我们的软件环境。
举个栗子。这是我们之前运行一个软件的传统方式。 有了docker以后正确打开方式是这样的。 又快又好不出错。
2、docker与虚拟机的区别
虚拟机相当于计算机的分身术。
它有啥缺点呢虚拟机会启动一个完整的操作系统占用计算机资源多启动速度慢。 但其实我们并不需要它启动完整的操作系统比如之前的例子我们只需要一个web服务器。
docker解决了这一问题。更快更好一个服务器可以启动更多的docker容器。这是因为它更加轻量级。
3、docker的基本概念
下面这个图可以大概看看看不懂也没关系。
镜像(images)是一个只读的模板包含了应用程序及其依赖的环境如操作系统、库、工具等。镜像是容器的基础它定义了容器应该如何启动。可以把镜像看作是应用程序的“蓝图”它描述了容器的运行环境和程序的配置。镜像可以通过 Dockerfile 构建也可以从 Docker Hub官方的镜像仓库拉取。
容器(containers)是镜像的一个实例是镜像在执行时的“运行时环境”。容器是一个隔离的环境在其中应用可以独立运行。容器会启动镜像并允许应用程序在其中执行。容器是轻量级的它比传统虚拟机启动速度更快并且资源开销更小。
总结镜像是模板容器是示例对应java可以类比类和对象。
仓库存储docker镜像的地方。最常见的是dockerhub(https://www.docker.com/products/docker-hub/)。类似拉取代码的github。
4、docker安装
4.1 linux下docker安装(该项目使用)
进入我们的虚拟机
vagrant up
vagrant ssh由于某些网络原因需要对虚拟机中centos换源。
sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# 下面镜像源如果不可用自行网上找一个
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sudo yum clean all
sudo yum makecache
sudo yum update
安装docker
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
启动docker
sudo systemctl start docker
#开机自启动
#sudo systemctl enable docker验证 Docker 安装
sudo docker --version参考官方文档https://docs.docker.com/engine/install/centos/
4.2 windows/mac操作系统下docker安装(补充)
对于windows或者mac
官网下载傻瓜式安装。https://www.docker.com/。注意Windows家庭版不支持docker 因为我的计算机是windows我就下载windows。
这里补充一个小知识。amd64和arm64的区别。 这里amd64就是我们常说的x86_64。ARM64 和 AMD64或 x86_64是两种不同的处理器架构它们在设计、性能、应用场景等方面有显著区别。ARM64 架构强调低功耗和高集成度适合于移动设备和嵌入式系统。AMD64 架构则侧重于高性能计算广泛用于台式机、笔记本和服务器中。
你可以控制台查看你到底是啥架构。一般笔记本都是x86(AMD64)
C:\Users\半旧echo %PROCESSOR_ARCHITECTURE%
AMD64下载后启动下docker。如果是windows的电脑需要提前启动Hyper-V服务。(注意windows家庭版不支持Hyper-V所以也不支持docker服务) 4.3 docker换源
由于网络原因需要对docker换源下面源25年1 月 21 日确认可用https://docker.xuanyuan.me。如失效自己找一个。
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak
sudo vi /etc/docker/daemon.json
修改文件内容
{registry-mirrors: [https://docker.xuanyuan.me]
}
重启docker服务
sudo systemctl restart docker
验证是否生效。
sudo docker info5、容器化和Dockerfile
前面我们提到容器的作用就是打包项目及其需要的环境、配置等。具体怎么做 所谓Dockerfile其实就是一个配置文件包括一些打包需要的内容。 下面我们演示个实际的demo。看看这一个过程。
创建一个hellodocker文件夹。编写index.js一个简单的代码。
console.log(hello,docker)我们电脑已经安装过node了参考下面博客第三节https://blog.csdn.net/qq_41708993/article/details/145163210?spm1001.2014.3001.5501。
可以执行node index.js看到输出结果。
现在我们如果需要在另一个地方(比如生产中需要把程序员电脑的代码在服务器上执行)运行我们的代码需要 现在我们把这些步骤写到Dockerfile中。 在项目的根目录下创建Dockerfile
FROM node:18-alpine
COPY index.js /index.js
CMD [node, index.js]打包。 查看是否生成成功。
运行。 可以把镜像上传到dockerhub。这里我们就不展开了。
docker push your-username/your-image-name:tag
6、在线docker实验学习平台
我们可以在线运行我们的docker镜像。https://labs.play-with-docker.com/
Play with DockerPWD是一个由 Docker 社区成员开发的在线平台旨在为用户提供一个无需安装即可体验和学习 Docker 的环境。
主要特点
在线实验环境用户可以在浏览器中直接运行 Docker 命令体验容器的构建、运行和管理。
支持 Docker Swarm 模式PWD 允许用户创建和管理 Docker Swarm 集群体验容器编排和集群管理功能。
交互式教程平台提供了丰富的自学教程涵盖从基础到高级的 Docker 使用场景帮助用户深入了解 Docker 的各项功能。 操作下从dockerhub拉取镜像点击start登录后按下图操作。
7、镜像拉取、容器运行
测试下拉取镜像。 运行容器。
8、DockerCompose简介
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。 通过 Compose您可以使用 YAML 文件来配置应用程序所需的所有服务然后使用一个命令从该配置文件中创建并启动所有服务。 这使得管理复杂的多容器应用变得更加简单和高效。
下面实际操作下你就理解它有啥用了。
编写compose.yaml version: 3
services:web:image: nginx:latestports:- 8080:80db:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: example
启动docker项目。
docker-compose up上面的nginxmysql都启动了。
如果没有这个文件你每次启动都需要
docker run -d \--name mydb \-e MYSQL_ROOT_PASSWORDexample \mysql:5.7docker run -d \--name mynginx \-p 8080:80 \--link mydb:db \nginx:latest
而且你第一次运行还需要docker pull拉取镜像。就问你烦不烦。
到现在为止你就已经会用docker了。其它的内容我们只需要在实际实战中用一用你就都会了不会也没关系查一查。下面回到我们的主线任务吧。
9、docker安装mysql、redis谷粒商城环境搭建
编写compose.yaml
version: 3
services:mysql:image: mysql:5.7container_name: mysqlports:- 3306:3306volumes:- /volume1/docker/gulimall/mysql/log:/var/log/mysql- /volume1/docker/gulimall/mysql/data:/var/lib/mysql- /volume1/docker/gulimall/mysql/conf:/etc/mysql/conf.denvironment:MYSQL_ROOT_PASSWORD: rootnetworks:- backendrestart: alwaysredis:image: redis:latestcontainer_name: redisports:- 6379:6379volumes:- /volume1/docker/gulimall/redis/data:/data- /volume1/docker/gulimall/redis/conf/redis.conf:/etc/redis/redis.confcommand: [redis-server,/etc/redis/redis.conf,--appendonly, yes] # 开启 Redis 持久化networks:- backendrestart: alwaysnetworks:backend:driver: bridge
稍微解释下这个文件。 MySQL 配置 使用 mysql:5.7 镜像。 将 MySQL 的端口映射到宿主机的 3306。 配置了三个卷 log用于持久化 MySQL 日志文件。 data用于持久化 MySQL 数据文件。 conf用于持久化 MySQL 配置文件。 设置环境变量 MYSQL_ROOT_PASSWORD 来初始化数据库的 root 密码。 设置 restart: always确保容器在失败时自动重启。 Redis 配置 使用 redis:latest 镜像。 将 Redis 的端口映射到宿主机的 6379。 配置了持久化指定 --appendonly yes 参数开启 AOF 持久化。 持久化的 Redis 数据存储在 /volume1/docker/gulimall/redis/data 目录下。 网络配置 使用了 backend 网络桥接模式来确保 MySQL 和 Redis 服务可以相互访问。 由于使用了挂载命令需要保证宿主机上下面的目录或者文件存在请自行创建。
mkdir -p /volume1/docker/gulimall/mysql/log
mkdir -p /volume1/docker/gulimall/mysql/data
mkdir -p /volume1/docker/gulimall/mysql/conf
mkdir -p volume1/docker/gulimall/redis/data
touch /volume1/docker/gulimall/conf/conf/redis.conf启动。 测试下吧。首先确保容器是正常的。
rootubuntu-Inspiron-16-5630:/volume1/docker/gulimall# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f2d00947dcb7 mysql:5.7 docker-entrypoint.s… 6 seconds ago Up 5 seconds 0.0.0.0:3306-3306/tcp, :::3306-3306/tcp, 33060/tcp mysql
7d4f79fddf23 redis:latest docker-entrypoint.s… 6 seconds ago Up 5 seconds 0.0.0.0:6379-6379/tcp, :::6379-6379/tcp redis
分别进入容器内部测试下功能。
一切正常。
到此位置商城环境已经搭建好咯。