该方法时将spring-boot项目改造为一个镜像,其底层逻辑,是创建一个Cent Os镜像,然后将项目所需的所有环境安装到该镜像上,最后通过一个脚本启动所有服务,从而达到一键运行项目,最后commit该镜像,再push到阿里云仓库。
在使用前,需要将前后端都进行打包,然后前端连接后端的ip要改为服务器的ip
su root
yum -y update
yum remove docker docker-common docker-selinux docker-engine#(清楚docker环境)
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)
yum list docker-ce --showduplicates | sort -r
yum install docker-ce-版本号
yum -y install docker-ce-18.03.1.ce
sudo yum install docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker
docker version
docker run -d --name computer_system --privileged=true -p 8080:8080 -p 3306:3306 -p 8081:8081 -p 8989:8989 centos:7 /usr/sbin/init
#进入容器
docker exec -it computer_system /bin/bash
rpm -qa | grep java
yum list | grep java-1.8.0-openjdk
yum -y install java-1.8.0-openjdk*
java -version
yum install -y net-tools
yum -y install vim
yum localinstall https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
yum install mysql-community-server
注意: 使用yum -y install mysql-community-server安装MySQL服务器有可能出现错误提示: Public key for mysql-community-libs-compat-8.0.31-1.el7.x86_64.rpm is not installed
Failing package is: mysql-community-libs-compat-8.0.31-1.el7.x86_64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql执行以下命令重新获取
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
再重新尝试安装,安装成功
systemctl start mysqld
service mysqld start
yum install initscripts -y #(解决bash: service: command not found)
systemctl enable mysqld
grep 'temporary password' /var/log/mysqld.log
mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
产生的原因:
自定义密码太简单,出现了不符合密码策略的问题,这个与validate_password_policy的值有关
set global validate_password.policy=0;
set global validate_password.length=1;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
Host is not allowed to connect to this MySQL server
mysql -u root -p密码
use mysql;
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES;
yum install -y wget
wget http://download.redis.io/releases/redis-5.0.7.tar.gz #下载reids安装包
tar -zvxf redis-5.0.7.tar.gz #解压redis包
mv /redis-5.0.7 /usr/local/redis #移动解压文件
cd /usr/local/redis
make #编译文件
make PREFIX=/usr/local/redis install #安装redis
./bin/redis-server& ./redis.conf #运行redis
问题:bash: make: command not found
yum安装mkae编辑安装及依赖包
yum -y install gcc automake autoconf libtool make
yum install epel-release
yum clean all
yum makecache
yum install nginx -y
service mysqld start
或者
/etc/init.d/mysqld start
运行导出的sql文件,从而让数据到达镜像容器
将虚拟机中的 Springboot_Cild_English-0.0.1-SNAPSHOT.jar 移动到docker 容器中目录下
docker cp /home/hjh/computer_system.jar computer_system:/root/ (在root下执行)
本项目把前端的两个项目都放在nginx的html上
whereis nginx
nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx
worker_processes 1;
events {
worker_connections 1024;
}
http {
#配置相关站点 解决跨域
include mime.types;
#默认文件类型
default_type application/octet-stream;
sendfile on;
#keepalive_timeout 0;
keepalive_timeout 65;
server {
listen 8080;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /usr/share/nginx/html/front;
index index.html index.htm;
try_files $uri $uri/ @router;
#需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404
}
#对应上面的@router,主要原因是路由的路径资源并不是一个真实的路径,所以无法找到具体的文件
#因此需要rewrite到index.html中,然后交给路由在处理请求资源
location @router {
rewrite ^.*$ /index.html last;
}
}
server {
listen 8081;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /usr/share/nginx/html/admin;
index index.html index.htm;
try_files $uri $uri/ @router;
#需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404
}
#对应上面的@router,主要原因是路由的路径资源并不是一个真实的路径,所以无法找到具体的文件
#因此需要rewrite到index.html中,然后交给路由在处理请求资源
location @router {
rewrite ^.*$ /index.html last;
}
}
}
将虚拟机文件导入centos镜像,包括nginx配置文件和前端打包的
docker cp /home/hjh/nginx/conf/nginx.conf computer_system:/etc/nginx/nginx.conf
docker cp /home/hjh/nginx/html/admin computer_system:/usr/share/nginx/html
docker cp /home/hjh/nginx/html/front computer_system:/usr/share/nginx/html
cd /root
vim start.sh
#刷新权限
chmod 777 start.sh
#启动脚本
./start.sh
#启动Nginx服务
systemctl start nginx &
echo nginx服务已经启动
# 启动redis服务
cd /usr/local/redis/bin
./redis-server /usr/local/redis/redis.conf &
echo redis服务已经启动
#启动mysql数据库
systemctl start mysqld &
echo mysql服务已启动
#启动spring-boot服务
java -jar /root/computer_system.jar --serverport=8989 &
echo spring-boot项目已启动,请前往浏览器访问!
docker commit computer_system computer_system
注册用户,搜索镜像与容器服务
创建命名空间!
创建镜像仓库
按页面指引指引操作上传镜像
$ docker login --username=你的用户名 registry.cn-hangzhou.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
您可以在访问凭证页面修改凭证密码。
$ docker pull registry.cn-hangzhou.aliyuncs.com/computer_system/computer_system:[镜像版本号]
$ docker login --username=你的用户名 registry.cn-hangzhou.aliyuncs.com$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/computer_system/computer_system:[镜像版本号]$ docker push registry.cn-hangzhou.aliyuncs.com/computer_system/computer_system:[镜像版本号]
请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。
在https://hub.docker.com/网站上注册用户
注册成功后点击Repositories -> create repository根据表单提示创建公有仓库,创建成功后会生成 一个仓库名,格式为 “用户名/项目名”
将本地镜像名称修改为网站创建出来的仓库名称即 “用户名/项目名” 格式,标签随便取
终端登录hub.docker.com,然后推送即可
docker login
docker push 新的镜像名:新的标签