文章目录
- 在ubuntu中安装docker
- 连接finalshell
- 将springboot项目打包成docker镜像并运行
- 在docker中安装mysql
- 将外部数据表复制进docker内的数据库
- 容器或服务出现异常
- 有可能出现的bug
- 锦囊妙计
- 一些常用的其他docker命令
在ubuntu中安装docker
- 更新软件源
sudo apt update
- 安装依赖包
sudo apt install apt-transport-https ca-certificates curl software-properties-common
- 添加docker官方GPG密钥
sudo -i
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/trusted.gpg.d/docker-ce.gpg
- 验证
sudo apt-key fingerprint 0EBFCD88
- 添加docker阿里稳定版软件源
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
- 更新软件源列表
sudo apt update
- 安装默认最新版
sudo apt install docker-ce docker-ce-cli containerd.io
- 测试,安装好默认启动
sudo docker run hello-world
(延伸知识:手动启动命令)
systemctl start docker
- 查看有哪些镜像
sudo docker images
#配置用户组(docker使用权限问题,视情况操作)
#sudo usermod -aG docker galaxfy su -galaxfy #刷新shell状态
#docker images #验证
连接finalshell
- 查看当前ip地址,之后使用finalshell连接
ip addr show
- 在finalshell中找一个文件夹,将项目jar包放入其中(finalshell默认不开启root用户,所以注意finalshell连接虚拟机的用户是谁,我配置的用户是router,只能在当前用户有操作权限的文件夹下操作)
cd /home/router
将springboot项目打包成docker镜像并运行
- 建立要打包的仓库(docker打包要求仓库名必须小写!!!)
mkdir publicservice
- 手动将jar包拖入router文件夹之后再用命令移入publicserive文件夹
mv PublicService.jar publicservice/PublicService.jar
- 创建Dockerfile
cd publicserive/
vi Dockerfile
- 编辑Dockerfile内容
#拉取一个jdk1.8版本的docker镜像
FROM openjdk:8-jdk
#将项目jar包添加到容器
ADD PublicService.jar test.jar
#ENTRYPOINT 执行项目test.jar及外部配置文件
ENTRYPOINT ["java", "-jar", "test.jar"]
- Docker打包镜像
/**千万注意最后有个空格和“.”!!!*/
docker build -t publicservice .
- 运行项目容器
我的SpringBoot项目的配置文件中配置的时9092端口
我需要将这个docker服务开在18080端口
docker run -d -p 18080:9092 --name PublicService publicservice
查看dockerIP地址
docker inspect 容器名|容器ID | grep IPAddress
在docker中安装mysql
- docker拉取mysql镜像
这里可以自行选择选择你需要的mysql版本
docker pull mysql:8.4.0
- 查看一下mysql镜像是否已获取
docker images
- 配置运行mysql的容器
docker run -d --name myMysql -p 3306:3306 -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.4.0
#指令解析
#-d: 后台运行容器,并返回容器 ID
#–name myMysql: 为容器指定一个名称
#-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
#-v: 绑定一个卷,容器的 /var/lib/mysql 映射到 主机的目录 /data/mysql
#-e MYSQL_ROOT_PASSWORD=123456: 设置环境变量,密码设置为 123456
#mysql:8.4.0:使用镜像 mysql:8.4.0
- 查看运行的容器里有没有mysql
docker ps
将外部数据表复制进docker内的数据库
- 将数据表转存为sql文件
- 将sql文件拖入ubuntu
- 复制文件到docker中
docker cp /home/ubuntu/node_structure.sql myMysql:/tmp/node_structure.sql
- 进入docker中的mysql
docker exec -it myMysql bash
mysql -u root -p
- 输入mysql密码
- 新建一个库
create database public_service;
- 选中数据库use public_service;选中导入路径source D:/Demo.sql;
use public_service;
source /tmp/node_structure.sql;
- 查看表show tables;
show tables;
容器或服务出现异常
查看docker容器日志
docker logs [OPTIONS] CONTAINER
有可能出现的bug
"Access denied for user ‘root’@‘localhost’ (using password: YES)"
错误表示你的Java应用程序尝试使用用户名 ‘root’ 和提供的密码连接到MySQL数据库,但由于身份验证失败,连接被拒绝了。要解决这个问题,你可以采取以下步骤:
- 确认用户名和密码:首先,确保你提供的用户名和密码是正确的。检查MySQL数据库中 ‘root’
用户的凭据,包括用户名和密码是否正确。如果你不确定密码,可以在MySQL数据库中重置 ‘root’ 用户的密码。 - 检查主机:确保你的Java应用程序正在从正确的主机(‘localhost’)连接到MySQL服务器。如果应用程序不是在本地主机上运行,你需要使用正确的主机名或IP地址来建立连接。
- 检查权限:确保 ‘root’ 用户具有足够的权限来连接到MySQL服务器。
排查措施引用自此
类似的,mysql会默认只允许IP地址为“localhost”或“127.0.0.1”来登录root用户,其他IP登录root用户可能会被拒绝,所以在mysql中执行以下代码来赋予所有IP登录root用户的权限
update mysql.user set host='%' where user='root';
锦囊妙计
- 停止容器
docker stop ***(容器名|容器ID)
- 删除容器
docker rm ***(容器名|容器ID)
- 删除镜像(与拉取时的镜像名一致,带有版本号)
docker rmi ***(镜像名)
- 重装docker镜像和docker容器(上文有)
一些常用的其他docker命令
启动所有容器
docker start 'docker ps -qa'