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