pc网站的优势电子商务与网络营销
pc网站的优势,电子商务与网络营销,google推广教程,旅游电子商务网站推广策略分析在后端和运维领域#xff0c;Docker 几乎已经成了绕不开的技术。 面试在问#xff0c;同事在用#xff0c;越来越多的开源项目也默认提供了 Docker 一键部署方案。那 Docker 到底解决了什么问题#xff1f; 为什么现在的部署项目#xff0c;大家都会优先选择它#xff1f…在后端和运维领域Docker 几乎已经成了绕不开的技术。 面试在问同事在用越来越多的开源项目也默认提供了 Docker 一键部署方案。那 Docker 到底解决了什么问题 为什么现在的部署项目大家都会优先选择它这篇文章我想从一个新手的视角把 Docker 讲清楚。一、Docker是什么简单比喻假设你要搬家传统方式家具要拆、线路要拔、到新家后再一件件装回去装的时候还可能发现少了某个零件、接口不对、怎么都摆不回原样。Docker方式直接把整个房间拍个快照家具、布置、电器、位置全都封装好。到新家一键还原跟原来一模一样。Docker 做的就是这件事。它把一个应用运行所需要的所有东西代码、运行环境、依赖、配置一次性打包成一个标准化的箱子。不管你把这个箱子搬到哪里只要能打开它的表现永远一致。专业解释Docker是一个容器化平台让开发者可以把应用程序及其所有依赖项库、环境变量、配置文件打包在一起在任何支持 Docker 的机器上运行保证环境一致从而实现一次构建到处运行二、Docker有什么用1. 开发人员的痛点diff开发者小明说“在我电脑上运行好好的” 运维人员回复“在服务器上就是跑不起来” 原因排查 - 操作系统不同Windows vs Linux - Node.js版本不同12.x vs 14.x - 依赖库版本冲突 - 环境变量配置不同 - 文件路径不一致最后你会发现问题不是代码而是环境。Docker 出现的意义就是把环境这件事彻底消灭。2. 快速部署传统部署装系统、装运行环境、配环境变量再到装依赖等等顺利的话也要一两个小时。Docker部署下载镜像、运行容器几分钟就能完成。3. 资源节省很多人会拿 Docker 和虚拟机做对比。虚拟机的方式每个应用自带一整套操作系统占用动不动就是几个 GBDocker 的方式容器之间共享宿主机系统只保留应用真正需要的东西通常是 MB 级别。你可以理解为虚拟机每个项目都自己买一套房Docker很多项目住在同一栋楼里各自一间房三、Docker 的四个核心概念Docker 的核心概念其实非常少。如果只用一句话来概括Docker 用镜像准备环境用容器运行程序。1、镜像Image镜像就是运行环境的模板。它里面已经准备好了系统、运行时以及应用需要的依赖但镜像本身是不能直接运行的更像一个安装包。比如 node:18、openjdk:17、mysql:8都是现成可以用的镜像。2、容器Container容器是镜像运行之后的样子。镜像是静态的容器是正在运行的。你平时对应用做的启动、停止、删除、查看日志操作的其实都是容器。一个镜像可以同时启动多个容器这也是 Docker 能跑多个实例的原因。3、DockerfileDockerfile 用来告诉 Docker这个镜像该怎么做。它是一个普通文本文件里面写清楚用什么基础镜像、代码放在哪里、要不要安装依赖以及程序最终如何启动。想定制自己的镜像就必须有 Dockerfile。4、仓库Docker HubDocker Hub 是镜像的来源。它就像一个应用商店存放着大量官方和社区维护的镜像。Dockerfile 里写的 FROM node:18意思就是从 Docker Hub 拉取一个 Node 18 的镜像作为基础环境。把这几个概念串起来就是一句话Dockerfile 用来构建镜像镜像用来创建容器而镜像通常来自 Docker Hub。四、安装Docker以 Ubuntu 为例下面以Ubuntu 20.04 / 22.04为例介绍最常见、也是最稳妥的安装方式。步骤 1更新系统并安装基础依赖bashsudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release这些工具主要用来安全地添加 Docker 官方仓库。步骤 2添加 Docker 官方 GPG Keybashsudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg步骤 3添加 Docker 官方软件源bashecho \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable | \ sudo tee /etc/apt/sources.list.d/docker.list /dev/null步骤 4安装 Docker 引擎bashsudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin步骤 5验证是否安装成功bashdocker --version sudo docker run hello-world如果看到csharpHello from Docker!说明 Docker 已经在你的 Ubuntu 服务器上成功运行。可选步骤 6非 root 用户运行 Docker默认情况下Docker 需要 sudo 权限。如果你不想每次都加 sudo可以执行bashsudo usermod -aG docker $USER然后退出当前终端重新登录再测试bashdocker ps能正常执行说明配置成功。五、常用的Docker命令基础命令bash# 查看版本 docker --version # 查看所有命令 docker --help # 查看运行中的容器 docker ps # 查看所有容器包括停止的 docker ps -a # 查看本地镜像 docker images # 下载镜像从Docker Hub docker pull 镜像名:标签 # 示例docker pull node:14 # 运行容器 docker run [选项] 镜像名 # 示例docker run -it ubuntu bash # 停止容器 docker stop 容器ID或名字 # 删除容器 docker rm 容器ID或名字 # 删除镜像 docker rmi 镜像ID或名字常用选项bash# -d后台运行守护进程模式 docker run -d nginx # -p端口映射主机端口:容器端口 docker run -p 8080:80 nginx # -v挂载卷主机目录:容器目录 docker run -v /home/data:/app/data nginx # --name给容器起名字 docker run --name my_nginx nginx # -it交互模式运行 docker run -it ubuntu bash六、部署Java项目Spring Boot示例项目结构Windows 本地textmy-java-app/ ├── src/ # 源代码 ├── pom.xml # Maven 配置文件 └── Dockerfile # Docker 构建文件步骤1编写 DockerfileWindows 本地在项目根目录下创建 Dockerfiledockerfile# 使用官方 Java 运行环境作为基础镜像 FROM openjdk:11-jre-slim # 设置容器内工作目录 WORKDIR /app # 复制 Spring Boot 打包后的 jar 文件 COPY target/myapp.jar app.jar # 暴露端口Spring Boot 默认 8080 EXPOSE 8080 # 启动应用 ENTRYPOINT [java, -jar, app.jar]⚠️ 注意 Dockerfile 中的路径是容器内路径和 Windows / Linux 本机路径无关。步骤2Windows 本地打包项目在Windows 本地开发环境执行bash# 进入项目目录 cd my-java-app # 使用 Maven 打包生成 target/myapp.jar mvn clean package执行完成后确认文件存在texttarget/myapp.jar步骤3将项目传到 Linux 服务器方式一使用 scp推荐在 Windows 终端PowerShell / Git Bash中执行bashscp -r my-java-app user服务器IP:/home/user/示例bashscp -r my-java-app root123.456.78.90:/root/步骤4Linux 服务器上构建 Docker 镜像登录 Linux 服务器后执行bashcd my-java-app构建镜像bashdocker build -t my-java-app:1.0 .查看镜像是否构建成功bashdocker images步骤5在 Linux 上运行容器bashdocker run -d \ -p 8080:8080 \ --name java-app \ my-java-app:1.0查看容器状态bashdocker ps查看日志bashdocker logs java-app步骤6访问应用texthttp://123.456.78.90:8080七、部署Node.js项目Express示例项目结构Windows 本地textmy-node-app/ ├── src/ ├── package.json ├── server.js └── Dockerfile步骤1编写 DockerfileWindows 本地在项目根目录创建 Dockerfiledockerfile# 使用官方 Node.js 运行环境 FROM node:18-alpine # 设置容器工作目录 WORKDIR /app # 复制依赖配置文件 COPY package*.json ./ # 安装依赖 RUN npm install --production # 复制项目代码 COPY . . # 暴露端口 EXPOSE 3000 # 启动应用 CMD [node, server.js]步骤2将项目上传到 Linux 服务器方式一scp 传输推荐在 Windows 终端执行bashscp -r my-node-app user服务器IP:/home/user/例如bashscp -r my-node-app root123.456.78.90:/root/步骤3Linux 服务器构建镜像登录 Linux 服务器bashcd my-node-app构建镜像bashdocker build -t my-node-app:1.0 .查看镜像bashdocker images步骤4运行容器bashdocker run -d \ -p 3000:3000 \ --name node-app \ my-node-app:1.0查看运行状态bashdocker ps查看日志bashdocker logs node-app步骤5访问应用texthttp://服务器IP:3000可选多阶段构建优化版推荐生产环境dockerfile# 构建阶段 FROM node:18-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci --onlyproduction # 运行阶段 FROM node:18-alpine WORKDIR /app COPY --frombuilder /app/node_modules ./node_modules COPY . . EXPOSE 3000 CMD [node, server.js]八、同时部署 Java Node MySQL这里使用的是 Docker ComposeDocker Compose 是用一个配置文件统一管理多个 Docker 容器的工具。场景说明服务器部署结构Linux服务器 ├── MySQL ├── Spring Boot 后端 └── Node 前端步骤1服务器准备目录结构在 Linux 服务器创建bashproject/ ├── docker-compose.yml ├── java-backend/ └── node-frontend/把两个项目代码分别上传进去。步骤2创建 docker-compose.ymlyamlversion: 3.8 services: mysql: image: mysql:8.0 container_name: mysql environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: mydb MYSQL_USER: user MYSQL_PASSWORD: password ports: - 3306:3306 volumes: - mysql-data:/var/lib/mysql networks: - app-network java-backend: build: ./java-backend container_name: java-backend ports: - 8080:8080 environment: SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/mydb SPRING_DATASOURCE_USERNAME: user SPRING_DATASOURCE_PASSWORD: password depends_on: - mysql networks: - app-network node-frontend: build: ./node-frontend container_name: node-frontend ports: - 3000:3000 environment: API_URL: http://java-backend:8080 depends_on: - java-backend networks: - app-network networks: app-network: driver: bridge volumes: mysql-data:步骤3启动所有服务Linux 服务器执行bashdocker compose up -d新版本 Docker 推荐 docker compose老版本使用 docker-compose。查看运行状态bashdocker compose ps查看日志bashdocker compose logs -f停止服务bashdocker compose down步骤4访问系统node访问texthttp://服务器IP:3000java访问texthttp://服务器IP:8080MySQL 连接地址text服务器IP:3306九、实用的几个常用命令1. 进入运行中的容器bash# 进入容器内的bash docker exec -it 容器名 bash # 在容器内执行命令 docker exec 容器名 ls /app2. 查看容器资源使用bashdocker stats3. 清理无用资源bash# 删除所有停止的容器 docker container prune # 删除所有未被使用的镜像 docker image prune # 删除所有未被使用的网络 docker network prune # 一键清理所有 docker system prune -a4. 查看镜像构建历史bashdocker history 镜像名5. 备份和恢复bash# 备份镜像到文件 docker save -o myapp.tar myapp:1.0 # 从文件恢复镜像 docker load -i myapp.tar写在最后如果你是第一次接触 Docker看到这里可能还是有点懵这很正常。等你哪天真的把一个项目从本地跑到服务器上用 Docker 一次性拉起来的时候那种终于搞定了的感觉会非常明显。