docker hub使用技巧
案例一
-
docker创建MySQL容器,MySQL容器中创建数据库和表并添加数据,将该容器提交为自己的镜像推送到docker hub,之后要使用该数据库只需拉取该镜像即可
-
首先在Linux上我们有一个MySQL容器,容器中有数据库和表
-
我们在该容器运行状态下提交为自己的镜像
# 方式一:提交并重新标记
docker commit -a="chniny" -m="dbtest" 53724a20a48c dbtest:1.0
docker tag dbtest:1.0 chniny/dbtest:1.0
# 方式二:提交时直接指定作者
docker commit -a="chniny" -m="dbtest" 53724a20a48c chniny/dbtest:1.0
- 登录docker hub并推送
docker login
docker push chniny/dbtest:1.0
-
推送成功后查看
-
之后我们将Linux服务器上的MySQL容器和镜像删除,重新拉取验证镜像是否可用
-
拉取失败报错:
Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
-
解决方案:配置国内镜像源,参考
# 拉取
docker pull chniny/dbtest:1.0
# 启动
docker run -p 3306:3306 --name mysql -v /home/mydocker/mysql/conf:/etc/mysql/conf.d -v /home/mydocker/mysql/logs:/logs -v /home/mydocker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d chniny/dbtest:1.0
- 用idea或navicat连接mysql
案例二
spring boot项目打成war包部署到tomcat容器
点击查看详情
docker pull chniny/tomcat:8
docker run -d -p 8080:8080 chniny/tomcat:8
# 将war包上传到服务器
# 将war复制到tomcat容器
docker cp back01.war container_ID:/usr/local/tomcat/webapps
# 重启容器
# 访问时报500错误,查看tomcat容器的日志发现报错信息:The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received
# 错误原因:JDBC版本与MySQL版本不兼容,MySQL的版本更高一些,在连接语句后加上useSSL=true
# 再次部署依然报错,暂时没有解决
试错2
# 拉取tomcat+mysql镜像
docker pull aallam/tomcat-mysql:latest
# 启动
docker run -d --name="tomcat-mysql-run" -e MYSQL_PASSWORD=root -p 3306:3306 -p 8080:8080 aallam/tomcat-mysql
# 进入容器后,连接mysql不需要密码,直接回测
mysql -u root -p
# 创建数据库,创建后无法导入sql脚本
create database back01;
# 用idea连接mysql,用户名和密码为root,之后在idea上创建表,添加数据
# 在容器的根目录中查找tomcat的目录
find / -name webapps
# 将war包放到容器中,重启容器
docker cp back01.war container_ID:/opt/tomcat/webapps
- 本地测试
- 远程测试
- 查看日志,依然报错
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from
案例三
案例四
import {createRouter, createWebHashHistory} from 'vue-router';
import welcome from "../view/Welcome.vue";
const routes = [
{path: "/", redirect: '/welcome'},
{ path: "/welcome", component: welcome },
]
export default createRouter({
history: createWebHashHistory(),
routes
})
- 使用了axios,
配置的接口ip是写死的,若要部署到不同的服务器,就要每次重新配置后构建镜像
import axios from "axios";
import qs from "qs";
// 默认路由
axios.defaults.baseURL = 'http://192.168.1.5:8080'
//post请求头
axios.defaults.headers.post["Content-Type"] ="application/x-www-form-urlencoded;charset=UTF-8";
//设置超时
axios.defaults.timeout = 10000;
- vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()]
})
- 之后上传到Linux服务器,使用nginx镜像 + Dockerfile构建镜像
- 测试