Docker部署Java服务以及MySQL、Redis

WEB服务部署记录和采的坑

Docker安装(Ubuntu 22.04.3 LTS)

sudo apt install docker.io
​
sudo cat /etc/docker/daemon.json
# 上述没有的话vim daemon.json    为数不多的国内镜像了
daemon.json
{
 "registry-mirrors": ["https://docker.m.daocloud.io", "https://docker.rainbond.cc"]
}
​

MySQL

使用以下命令运行 MySQL 容器:

步骤 1:拉取镜像

 docker run --name voucher_mysql8 -e MYSQL_ROOT_PASSWORD=xxx -p 3308:3306 --network voucher -d mysql/mysql-server:8.0
​
  • --name mysql8:容器的名称。

  • -e MYSQL_ROOT_PASSWORD=your_password:设置 MySQL root 用户的密码。

  • -d:在后台运行容器。

步骤 2: MySQL 数据库导出为 SQL 文件

mysqldump -u root -p database_name > voucher.sql

步骤 3:将 SQL 文件复制到 Docker 容器

docker cp voucher.sql voucher_mysql8:/voucher.sql

步骤 4:导入 SQL 文件到 Docker MySQL 容器

docker exec -it voucher_mysql8 bash

步骤 5: 使用 mysql 命令可以将 SQL 文件导入到 MySQL 数据库中

mysql -u root -p database_name < voucher.sql

步骤6:MySQL默认只允许本机ip访问,以下是配置my.cnf

#将容器中的文件拷贝出来
docker cp voucher_mysql8:/etc/my.cnf  ./
#将容器中的文件拷贝回去
docker cp ./my.cnf voucher_mysql8:/etc/

当然也可以通过挂载更加方便

创建远程访问用户

my.cnf

[mysqld]
bind-address = 0.0.0.0
docker exec -it voucher_mysql8 /bin/bash
mysql -u root -p
# 然后在 MySQL 命令行中执行以下命令
-- 为root用户添加远程访问权限(注意安全性,生产环境中建议使用特定用户)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
重启容器
docker restart voucher_mysql8

Redis

docker run -d --name voucher_redis --network voucher -p 6379:6379 redis:latest

Rabbitmq

docker run \
 -e RABBITMQ_DEFAULT_USER=itheima \
 -e RABBITMQ_DEFAULT_PASS=123321 \
 -v mq-plugins:/plugins \
 --name voucher_mq \
 --hostname mq \
 -p 15672:15672 \
 -p 5672:5672 \
 --network voucher\
 -d \
 rabbitmq:3.8-management

WEB服务

利用 Dockfile将jar包打为镜像

maven -> clean -> package 

注意:package前要clean

注意:yaml的配置中的host用容器名

Dockfile文件

#FROM openjdk:11.0-jre-buster  
FROM amazoncorretto:17
#设置环境变量
ENV TZ=Asia/Shanghai
RUN yum update -y && \
    yum install -y tzdata && \
    ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && \
    echo $TZ > /etc/timezone && \
    yum clean all
# 复制打包好的 JAR 文件到容器中
COPY target/hm-dianping-0.0.1-SNAPSHOT.jar /app.jar
### 暴露应用程序运行的端口(例如,如果你的应用程序在8080端口上运行)
EXPOSE 8080
# 运行应用程序
ENTRYPOINT ["java", "-jar", "/app.jar"]

反复测试会用的一连串命令

docker stop voucher_web

docker rm voucher_web

docker rmi voucher

docker build -t voucher . #别漏了一个点

docker run -d \
  --name voucher_web\
  --network voucher \
  -p 9080:8080 \
voucher

docker logs -f  voucher_web # 查看日志

踩坑记录

1、一个是MySQL死活外部无法访问,我后面通过端口映射宿主机,web服务也是连接宿主机端口,没用docker内部网络

2、使用宿主机的特殊地址 host.docker.internal(仅限Docker Desktop for Windows/Mac),Ubuntu无法这么访问,

不想重新打包容器,解决方式

docker run -d \
  --add-host=host.docker.internal:host-gateway \  # GPT4想的,还是聪明
  --name voucher_web \
  --network voucher \
  -p 9080:8080 \
  voucher

Docker 镜像保存和加载

docker save -o  voucher_web.tar. voucher

docker load -i voucher_web.tar
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值