部署项目到Docker

Docker+MySQL+SpringBoot项目部署

由于Linux下yun源默认都是国外的,下载某些东西格外的慢,推荐修改yum源为aliyun

修改linux下yum镜像源为国内镜像

安装Docker

使用官方安装脚本自动安装:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

启动Docker

sudo systemctl start docker

设置开机启动

sudo systemctl enable docker

验证版本

docker -v

安装MySQL

下载安装yum仓库

yum -y install https://repo.mysql.com/mysql80-community-release-el7-1.noarch.rpm

安装

yum -y install mysql-community-server

启动

systemctl start mysqld

查看状态

systemctl status mysqld

查看初始密码

grep 'temporary password' /var/log/mysqld.log

登录测试(用初始化密码)

mysql -uroot -p

修改root登录密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'LUchong123.';
flush privileges;

这里可能会报错,大多数是因为未配置环境变量

配置环境变量

使用绝对命令vi打开profile

/bin/vi  /etc/profile

在文件后面加上环境变量

export PATH=$PATH:/usr/local/mysql/bi

保存后退出

ESC-->英文冒号-->x

更新配置文件

source /etc/profile

再次输入命令登录Mysql即可修改

允许root远程访问

update mysql.user set host = '%' where user ='root';

接着尝试使用Navicat连接一下,如果使用的阿里云,默认是没有开放3306端口的,需要在防火墙开放一下。

SpringBoot打包与Dockerfile

打包项目

Dockerfile文件

FROM java:8
VOLUME /tmp
ADD eriz-1.0.0.jar /app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

解释:

java:8是指Docker Hub上官方提供的java镜像,版本号是8也就是jdk1.8,有了这个基础镜像后,Dockerfile可以通过FROM指令直接获取它的状态,也就是在容器中java是已经安装的,接下来通过自定义的命令来运行Spring Boot应用。

VOLUME指向了一个/tmp的目录,由于Spring Boot使用内置的Tomcat容器,Tomcat默认使用/tmp作为工作目录。效果就是在主机的/var/lib/docker目录下创建了一个临时文件,并连接到容器的/tmp。

add将项目的jar文件作为app.jar添加到容器

RUN表示在新创建的镜像中执行一些命令,然后把执行的结果提交到当前镜像。这里使用touch命令来改变文件的修改时间,Docker创建的所有容器文件默认状态都是“未修改”。这对于简单应用来说不需要,不过对于一些静态内容(比如:index.html)的文件就需要一个“修改时间”。

ENTRYPOINT 应用启动命令 参数设定。

jar、Dockerfile文件

然后将打好的jar包与Dockerfile放到linux下同个目录下

运行命令制作镜像:

docker build -t [容器名] . 注意:后面有个点,表示当前目录下

第一次制作会慢一点,需要下载jdk等

运行mysql并连接navicat

运行MySQL并连接到navicat管理工具

创建数据挂载点

docker volume create mysql_data

创建数据挂载点(即存储数据的地方,这样即便mysql容器删除了,数据还是在)

运行Mysql容器

docker run --name mysql -p 3306:3306 -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

并使用docker ps可查看运行中的容器

解释:

--name 镜像名称

-p映射端口

-v /mysql/datadir:/var/lib/mysql 设置本地挂载点

-e MYSQL_ROOT_PASSWORD=123456 设置密码

-d mysql 容器名称

进入容器 /bin/bash

docker exec -it mysql bash

进入Mysql

mysql -uroot -p

Mysql授权

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;

//刷新
FLUSH PRIVILEGES;

运行项目

执行命令

docker run -it --net=host --name erizboot -p 8081:8081 reportsample

解释:

--net=host 告诉 Docker 不要将容器网络放到隔离的名字空间中,即不要容器化容器内的网络。此时容器使用本地主机的网络,它拥有完全的本地主机接口访问权限。容器进程可以跟主机其 它 root 进程一样可以打开低范围的端口,可以访问本地网络服务比如 D-bus,还可以让容器做一些影响整个主机系统的事情,比如重启主机。因此使用这个选项的时候要非常小心。如果进一步的使用 --privileged=true,容器会被允许直接配置主机的网络堆栈。

可以运行命令:docker ps 查看正在运行中的容器

最后更新于

这有帮助吗?