Docker-完整项目的部署(保姆级教学)

目录

1 手动部署(白雪版)

1.1 创建网络

1.2 MySQL的部署

1.2.1 准备

1.2.2 部署

1.3 Java项目的部署

1.3.1 准备

1.3.1.1 将Java项目打成jar包

1.3.1.2 编写Dockerfile文件

1.3.2 部署

1.3.2.1 将jar包、Dockerfile文件放在linux同一个文件夹下

1.3.2.2 构建镜像

1.3.2.3 创建并运行容器

1.4 前端项目的部署

1.4.1 准备挂载文件

1.4.2 部署

1.5 测试

1.5.1 获取宿主机linux的IP地址

1.5.2 进行访问

2 DockerCompose自动化部署(章鱼哥直接拿捏)

2.1 从docker run到DockerCompose的过渡

2.2 常用命令

2.3 部署

2.3.1 编写docker-compose.yml文件

2.3.2 部署运行


1 手动部署(白雪版)

1.1 创建网络

指令

#创建网络
docker network create
#查看网络
docker network ls

 示例

注意

后面的部署都需使用该网络,这样不同容器之间才能互联,且能通过容器名访问,而不是IP。

1.2 MySQL的部署

1.2.1 准备

在/root下创建mysql文件夹,然后在mysql文件夹中创建data、conf、init三个文件夹,分别用于挂载数据目录、配置文件、初始化脚本。挂载后容器和主机的对应文件夹就可以相互影响。

向conf文件夹中添加配置文件(.cnf),本人使用的是Xftp 7

配置文件内容大概如下,设置编码格式:

[client]
default_character_set=utf8mb4
[mysql]
default_character_set=utf8mb4
[mysqld]
character_set_server=utf8mb4
collation_server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

向init的文件夹中添加.sql文件,挂载数据卷后自动创建数据库 、自动建表。所创建的东西都会保存在data文件夹下

大致内容如下:

-- 导出 mall 的数据库结构
DROP DATABASE IF EXISTS `hmall`;
CREATE DATABASE IF NOT EXISTS `hmall`;
USE `hmall`;-- 导出  表 hmall.address 结构
DROP TABLE IF EXISTS `address`;
CREATE TABLE IF NOT EXISTS `address` (-- 其它内容
);-- 其它内容

1.2.2 部署

指令

docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \-v /root/mysql/data:/var/lib/mysql \-v /root/mysql/conf:/etc/mysql/conf.d \-v /root/mysql/init:/docker-entrypoint-initdb.d \--network project \mysql

指令解析

  • docker run -d: 后台运行容器。
  • --name mysql: 指定容器的名称为 "mysql"。
  • -p 3306:3306: 将主机的 3306 端口映射到容器的 3306 端口,使得可以通过主机访问 MySQL 服务。
  • -e TZ=Asia/Shanghai: 设置容器的时区为亚洲/上海。
  • -e MYSQL_ROOT_PASSWORD=123: 设置 MySQL root 用户的密码为 "123"。
  • -v /root/mysql/data:/var/lib/mysql: 将主机上 /root/mysql/data 目录挂载到容器的 /var/lib/mysql 目录,用于持久化存储 MySQL 数据。
  • -v /root/mysql/conf:/etc/mysql/conf.d: 将主机上 /root/mysql/conf 目录挂载到容器的 /etc/mysql/conf.d 目录,用于提供自定义的 MySQL 配置文件。
  • -v /root/mysql/init:/docker-entrypoint-initdb.d: 将主机上 /root/mysql/init 目录挂载到容器的 /docker-entrypoint-initdb.d 目录,该目录下的 SQL 脚本将在容器启动时执行,用于初始化数据库。
  • --network project: 将容器连接到名为 "project" 的 Docker 网络。

最后,mysql 表示使用的是官方 MySQL 镜像,并且没有指定版本,将默认使用最新版本。

运行结果

这时候再打开data文件夹我们就可以看到,数据库和表自动被创建好了 

1.3 Java项目的部署

1.3.1 准备

1.3.1.1 将Java项目打成jar包

pom.xml中添加插件:

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><!-- 其它内容 --><build><pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>11</source> <!-- depending on your project --><target>11</target> <!-- depending on your project --></configuration></plugin></plugins></pluginManagement></build>
</project>

使用Maven打包

找到jar包: 

1.3.1.2 编写Dockerfile文件

代码如下: 

# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY hm-service.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

代码解析(大同小异,改改就能用)

  1. FROM openjdk:11.0-jre-buster: 指定了基础镜像为 OpenJDK 11 的运行环境,基于 Debian Buster 操作系统。

  2. ENV TZ=Asia/Shanghai: 设置环境变量 TZ 为亚洲/上海时区。

  3. RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone: 在容器内运行命令,将时区链接到 /etc/localtime,并设置容器的时区。

  4. COPY hm-service.jar /app.jar: 将主机上的 hm-service.jar 文件复制到容器内的 /app.jar

  5. ENTRYPOINT ["java", "-jar", "/app.jar"]: 指定容器启动时执行的命令,即运行 Java 应用程序的 JAR 文件 /app.jar

1.3.2 部署

1.3.2.1 将jar包、Dockerfile文件放在linux同一个文件夹下

1.3.2.2 构建镜像

指令: 

docker build -t hmall .

指令解读: 

这个命令中,最后一部分表示在目录中查找名为 Dockerfile 的文件(如果是点则表示当前目录),并使用它来构建(-t)一个名为 hmall版本号为latest(没指定版本号默认latest)的Docker镜像。

运行截图

1.3.2.3 创建并运行容器

指令

#部署并运行容器
docker run -d --name hmall --network project -p 8080:8080 hmall
#查看容器日志
docker logs hmall

运行截图

1.4 前端项目的部署

1.4.1 准备挂载文件

一共需要两个文件(夹),一个是我们的前端项目文件夹,一个是我们的nginx配置文件,将他们都放在linux同一个文件夹下,这里使用的是/root/nginx文件夹下

其中配置文件的内容如下(大同小异改改就能用):

worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/json;sendfile        on;keepalive_timeout  65;server {listen       18080;# 指定前端项目所在的位置(容器内的位置)location / {root /usr/share/nginx/html/hmall-portal;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}location /api {rewrite /api/(.*)  /$1 break;# 容器在同一个网络,可以使用容器名访问,hamll就代表了其IPproxy_pass http://hmall:8080;}}server {listen       18081;# 指定前端项目所在的位置(容器内的位置)location / {root /usr/share/nginx/html/hmall-admin;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}location /api {rewrite /api/(.*)  /$1 break;# 容器在同一个网络,可以使用容器名访问,hamll就代表了其IPproxy_pass http://hmall:8080;}}
}

1.4.2 部署

docker run -d \--name nginx \-p 18080:18080 \-p 18081:18081 \-v /root/nginx/html:/usr/share/nginx/html \-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \--network project \nginx

注意:端口号要与项目一致

1.5 测试

1.5.1 获取宿主机linux的IP地址

如果不能使用ifconfig命令,则先使用如下命令,下载相关应用:

sudo yum install net-tools -y

1.5.2 进行访问

能够成功访问就成功了,撒花!!! 

2 DockerCompose自动化部署(章鱼哥直接拿捏)

在我们的手动部署的过程中,非常繁琐且容易出错,接下来我将介绍更加高效且优雅的方式。"章鱼哥"--DockerCompose

2.1 从docker run到DockerCompose的过渡

以mysql的docker run部署指令为例,如下:

docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \-v /root/mysql/data:/var/lib/mysql \-v /root/mysql/conf:/etc/mysql/conf.d \-v /root/mysql/init:/docker-entrypoint-initdb.d \--network projectmysql

如果使用docker-compose.yml,可以转变如下:

version: "3.8"services:mysql:image: mysqlcontainer_name: mysqlports:- "3306:3306"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123volumes:- "/root/mysql/conf:/etc/mysql/conf.d"- "/root/mysql/data:/var/lib/mysql"networks:- new
networks:new:name: project

我们可以看到,两者实际上是一一对应的,这是语法风格不同罢了,其中version: "3.8"是DockerCompose的语法版本。 

与上述例子我们可以得到对应表,如下: 

docker run参数DockerCompose指令说明
--namecontainer_name容器名称
-pports设置端口映射
-eenvironment环境设置
-vvolumes数据卷挂载
--networknetworks网络设置
镜像名称(这里是mysql)image镜像名称

2.2 常用命令

docker compose [OPTIONS] [COMMAND]

OPTIONS和COMMAND都是可选参数,比较常见的有,该图片来自黑马程序员:

2.3 部署

2.3.1 编写docker-compose.yml文件

大同小异,先CV再改改:

version: "3.8"services:mysql:image: mysqlcontainer_name: mysqlports:- "3306:3306"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123volumes:- "./mysql/conf:/etc/mysql/conf.d"- "./mysql/data:/var/lib/mysql"- "./mysql/init:/docker-entrypoint-initdb.d"networks:- hm-nethmall:build: context: .dockerfile: Dockerfilecontainer_name: hmallports:- "8080:8080"networks:- hm-netdepends_on:- mysqlnginx:image: nginxcontainer_name: nginxports:- "18080:18080"- "18081:18081"volumes:- "./nginx/nginx.conf:/etc/nginx/nginx.conf"- "./nginx/html:/usr/share/nginx/html"depends_on:- hmallnetworks:- hm-net
networks:hm-net:name: project

不过这里有几个点需要注意: 

①被depends_on指令标记的会被优先部署,在这里mysql就会被优先部署

②build是用来构建镜像的,context表示资源路径(点表示当前路径),dockerfile用于寻找我们的Dockerfile文件(默认就是Dockerfile,可以不写,除非将Dockerfile改名了)

③由于我们没给hamll指定镜像名称,docker会自动给它起名root-xx,这里是root-hmall

2.3.2 部署运行

根据docker-compose.yml文件中的路径,将所需的jar包和Dockerfile文件(详情可看1.3.2.1)、mysql文件夹(详情可看1.2.1)、nginx文件夹(详情可看1.4.1)、以及docker-compose.yml放在对应路径下,我这里全部放在一个文件夹下,如下:

docker-compose.yml目录下执行指令,进行部署: 

docker compose up -d

测试和访问参考1.5

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

飞行汽车首飞成功?一文讲解飞行汽车与其代表的立体交通形式

中国的“飞行汽车”从深圳跨越大湾区到珠海首飞成功&#xff0c;既是一次重要尝试&#xff0c;更是交通运输行业发展史中一个全新的起点 关注我&#xff0c;共同交流&#xff0c;一起成长 前言一、基本认识飞行汽车二、发展飞行汽车必要性三、飞行汽车所形成的影响 前言 2月27…

swoole

php是单线程。php是靠多进程来处理任务&#xff0c;任何后端语言都可以采用多进程处理方式。如我们常用的php-fpm进程管理器。线程与协程,大小的关系是进程>线程>协程,而我们所说的swoole让php实现了多线程,其实在这里来说,就是好比让php创建了多个进程,每个进程执行一条…

用云手机进行舆情监测有什么作用?

在信息爆炸的时代&#xff0c;舆情监测成为企业和政府决策的重要工具。通过结合云手机技术&#xff0c;舆情监测系统在品牌形象维护、市场竞争、产品研发、政府管理以及市场营销等方面发挥着关键作用&#xff0c;为用户提供更智能、高效的舆情解决方案。 1. 品牌形象维护与危机…

【数据结构】二、线性表:6.顺序表和链表的对比不同(从数据结构三要素讨论:逻辑结构、物理结构(存储结构)、数据运算(基本操作))

文章目录 6.对比&#xff1a;顺序表&链表6.1逻辑结构6.2物理结构&#xff08;存储结构&#xff09;6.2.1顺序表6.2.2链表 6.3数据运算&#xff08;基本操作&#xff09;6.3.1初始化6.3.2销毁表6.3.3插入、删除6.3.4查找 6.对比&#xff1a;顺序表&链表 6.1逻辑结构 顺…

提取pdf图档中的物料编码

一、摘要 图1 图档示例 本篇代码目的是从指定文件夹下的PDF文件中提取物料编码等相关信息&#xff0c;并将这些信息存储在列表中输出。这段代码主要实现了以下功能&#xff1a; 定义一个file_name函数&#xff0c;用于获取指定文件夹下所有文件的完整路径。通过遍历文件夹和子文…

CubeMX使用教程(2)——点亮LED

在上一章&#xff0c;我们完成了CubeMX的环境配置&#xff0c;这一章我们通过CubeMX来完成点亮LED的工作。 通过LED原理图可知&#xff0c;如果我们要点亮LD1&#xff08;第一个灯&#xff09;&#xff0c;它对应开发板的PC8端口&#xff0c;因此我们应该在CubeMX中将PC8配置为…

企业怎么做好数字化转型?

企业进行数字化转型是一个复杂的过程&#xff0c;涉及多个方面和步骤。一些关键点可以帮助企业在数字化转型中取得成功&#xff1a; 1.明确目标和愿景&#xff1a;确定企业数字化转型的目的&#xff0c;这可能包括提高效率、增强客户体验、创造新的收入来源等。设定清晰、可衡…

gradio 摄像头视频流获取

参考&#xff1a;https://github.com/gradio-app/gradio/issues/1490 版本&#xff1a;gradio 4.16.0 gradio_client 0.8.1 import gradio as grgr.Interface(lambda x: x, gr.Image(sourceswebcam, streamingTrue), "image", liveTrue).launch()

预付费电表的应用和预付费平台的操作方式

*、智能预付费电能表的应用分析 1应用功能的分析 这里主要讲的是与远程抄表系统的结合&#xff0e;如图2所示&#xff0e;为系统工作的程序&#xff0e;在远程抄表中&#xff0c;通信方式多种多样&#xff0e;主要有互联网、电话线通信、有线电视通信、光纤通信、GPRS、卫星通…

NLP:自定义模型训练

书接上文&#xff0c;为了完成指定的任务&#xff0c;我们需要额外训练一个特定场景的模型 这里主要参考了这篇博客&#xff1a;大佬的博客 我这里就主要讲一下我根据这位大佬的博客一步一步写下时&#xff0c;遇到的问题&#xff1a; 文中的cfg在哪里下载&#xff1f; 要不…

微信小程序用户登陆和获取用户信息功能实现

官方文档&#xff1a; https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html 接口说明&#xff1a; https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-login/code2Session.html 我们看官方这个图&#xff0c;梳理一下用户…

气相白炭黑外资垄断格局被打破 国内本土企业数量增加

气相白炭黑外资垄断格局被打破 国内本土企业数量增加 气相白炭黑又名气相二氧化硅&#xff0c;是一种无毒、无味、无嗅&#xff0c;无污染的非金属氧化物&#xff0c;主要由硅的卤化物在氢氧火焰中高温水解生成的带有表面羟基和吸附水的无定形的纳米级颗粒。气相白炭黑主要用于…

143:vue+leaflet 在25833投影坐标下,加载一小块图像叠层数据

第143个 点击查看专栏目录 本示例是介绍如何在vue+leaflet, 自定义CRS,形成新的投影,这里是25833投影,并使用 L.Proj.imageOverlay的方法在地图上加载载一小块图像叠层数据。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式…

【漏洞复现】大华DSS数字监控系统配置系统后台弱口令漏洞

Nx01 产品简介 大华DSS数字监控系统是一个在通用安防视频监控系统基础上设计开发的系统&#xff0c;除了具有普通安防视频监控系统的实时监视、云台操作、录像回放、报警处理、设备治理等功能外&#xff0c;更注重用户使用的便利性。 Nx02 漏洞描述 大华DSS数字监控系统/confi…

简析内部审计数字化转型的方法和路径【小落送书(第6期)】

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

Docker容器的操作

目录 运行容器 查看容器 查看容器详细信息 删除容器 启动容器 停止容器 重启容器 暂停容器 激活容器 杀死容器 进入容器 常用 查看容器的日志 拷贝容器的文件到本地 容器改名 查看容器资源 查看容器内部的进程 监测容器发生的事件 检测容器停止以后的反回值…

PL/SQL连接数据库报Initialization error Could not load “.../oci.dll“问题处理

之前都配置好了能正常使用&#xff0c;手欠改了下文件目录名称&#xff0c;导致oci.dll的目录发生变化 面板可以正常打开就是连接的时候会报错&#xff0c;能知道问题是配置的路径出了问题&#xff0c;在Tools—Preferences—Connection中配置了几次&#xff0c;直接改成了现有…

LVS+Keepalived 高可用集群

目录 一.Keepalived工具介绍 1.用户空间核心组件&#xff1a; &#xff08;1&#xff09;vrrp stack&#xff1a;VIP消息通告 &#xff08;2&#xff09;checkers&#xff1a;监测real server&#xff08;简单来说 就是监控后端真实服务器的服务&#xff09; &#xff08;…

用MATLAB求解微分方程

第一篇为 基础概念 &#xff0c;第二篇为 R-K法的具体实现方法。 &#xff08;一&#xff09;常微分方程的MATLAB求解 概要&#xff1a; 常微分方程的MATLAB求解分为解析解、数值解解析解(只有少数微分方程组有解析解)&#xff1a;dsolve函数数值解&#xff1a;solver函数&a…

MES数据采集设备

在智能制造日益盛行的今天&#xff0c;MES&#xff08;制造执行系统&#xff09;作为连接计划与生产现场的关键环节&#xff0c;其重要性不言而喻。而MES数据采集设备则是MES系统的核心组件&#xff0c;负责实时、准确地获取生产现场的各种数据&#xff0c;为企业的生产决策提供…