整理一下基于Ubuntu20.04版本搭建docker,基于docker安装mysql5.7,并部署springboot项目的过程。

基础环境

Vmware虚拟机配置8G内存+50G存储+4核CPU,linux发行版Ubuntu20.04,docker最新版,MySQL5.7

一、安装docker

Ubuntu 20.04 官方 apt 源中就有 Docker,我们可以直接通过 apt 来安装。执行下述命令:

sudo apt update
sudo apt install docker.io
docker --version

Docker从ubuntu打包太大 docker部署ubuntu_运维

由于 docker 默认镜像仓库在海外,所以需要配置国内源来加快镜像拉取速度,修改 /etc/docker/daemon.json (如果该文件不存在,则创建)

{

    "registry-mirrors": [
        "https://你自己的地址.com"
    ]

}

重启 docker 守护进程

sudo systemctl restart docker

二、docker安装MySQL5.7

1、拉取mysql镜像

docker pull mysql:5.7

2、设置配置文件

将全部的配置文件和关联的文件夹统一放到 /opt/docker/mysql 中

创建 MySQL 配置文件文件夹

mkdir -p /opt/docker/mysql/conf.d

增加并修改配置文件 config.cnf

vim /opt/docker/mysql/conf.d/config.cnf

输入如下内容:

[mysqld]
lower_case_table_names=1 
datadir=/var/lib/mysql
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

 3、启动

创建 MySQL 数据文件夹

mkdir -p /opt/docker/mysql/var/lib/mysql

启动,设置默认密码 root,TZ 设置容器的默认时区

docker run --name mysql \
    --restart=always \
    -p 3306:3306 \
    -v /opt/docker/mysql/conf.d:/etc/mysql/conf.d \
    -v /opt/docker/mysql/var/lib/mysql:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=root \
    -e TZ=Asia/Shanghai \
    -d mysql:5.7

 查看容器启动情况

Docker从ubuntu打包太大 docker部署ubuntu_docker_02

进入容器

docker exec -it mysql bash

进入 MySQL

mysql -uroot -p

输入刚才我们设置的密码 root

授权

mysql> GRANT ALL ON *.* TO 'root'@'%';

刷新权限

mysql> flush privileges;

至此mysql5.7部署完成。

三、springboot项目打包

此过程不详细讲解,参考其它文档maven打包方式,基本过程如下:

mvn clean package

Docker从ubuntu打包太大 docker部署ubuntu_Docker从ubuntu打包太大_03

生成的jar包在target目录下

Docker从ubuntu打包太大 docker部署ubuntu_java_04

 利用ssh等工具将jar包上传至服务器的/data/deploy/目录下(目录根据自己实际情况自定义),

Docker从ubuntu打包太大 docker部署ubuntu_spring boot_05

 如果此时报权限不足,需执行命令给当前目录授权:

chmod 777 /data/deploy

 四、编写Dockerfile文件

FROM java:8
VOLUME /tmp 
COPY spring-boot.jar app.jar 
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

将此文件上传至/data/deploy/目录下(与jar包同目录)。

五、构建镜像并启动容器

执行下述命令(注意.)

docker build -t spring-boot .

 制作完成后,通过docker images命令查询

Docker从ubuntu打包太大 docker部署ubuntu_java_06

 启动容器

docker run --name=spring-boot \
    --restart=always \
    -p 8088:8088 \
    -v /data/logs:/data/logs \
    -e TZ=Asia/Shanghai \
    -d spring-boot

Docker从ubuntu打包太大 docker部署ubuntu_java_07

 进入容器,查看启动日志

docker exec -it 27566069c4da bash

Docker从ubuntu打包太大 docker部署ubuntu_Docker从ubuntu打包太大_08

查看日志,进入/data/logs/spring-boot下

Docker从ubuntu打包太大 docker部署ubuntu_运维_09

 容器启动成功!

六、访问项目

先检查服务器防火墙情况,是否开启8088端口

ufw status

Docker从ubuntu打包太大 docker部署ubuntu_Docker从ubuntu打包太大_10

 如果没有开启端口,执行命令ufw allow 8088开启端口支持。

通过postman访问服务接口

Docker从ubuntu打包太大 docker部署ubuntu_docker_11

 至此,我们在Ubuntu服务器上,基于docker部署springboot项目完成!

后记

        前几天作者在阿里云上购买了一台轻量级应用服务器,想作为学习开发环境使用,本想基于这套服务搭建一套K8S环境,安装完成后,启动时,发现服务器配置过低,无法启动K8S!无奈之下,只好寻求售后进行退款!后来,在本地电脑上基于虚拟机安装了一个Ubuntu系统,在安装k8s时,发现主板不支持VX虚拟化设置。。笔者只好默默放弃了搭建。所以,只能基于当前的docker环境模拟一下我们后端服务打包、部署的流程!好在经过查阅文档后,一次性成功!后续有机会再基于jekins结合docker搭建一套持续集成、发布环境!

        作为一名高级后端开发人员,在目前这个竞争压力如此大的环境下,需不断提升自己的硬实力!掌握一定的devops能力才能在云原生时代利于不败之地!

        欢迎大家一起学习交流!一起努力!