目录
  1. 1. CentOS 安装 Docker
  2. 2. 启动Docker & 设置为开机自启
  3. 3. Docker 安装 MySql 5.7 如果不写:5.7 则默认拉取最新版本
  4. 4. 创建并启动一个MySql 容器
  5. 5. 开启外网访问权限
  6. 6. 挂载数据卷以及配置文件
  7. 7. 重新创建MySql容器并启动
  8. 8. 将本地测试数据库导入到服务器Mysql数据库
  9. 9. 打包工程 获取Jar包 注意工程数据库配置文件内地址和端口
  10. 10. 编辑Dockerfile文件
  11. 11. 将jar包和dockerfile文件传输到服务器的 /mnt/docker 目录下
  12. 12. 制作镜像
  13. 13. Docker安装Redis 并启动服务
  14. 14. 启动镜像
  15. 15. Docker 安装 Nginx
  16. 16. docker logs实时查看日志tail
  17. 17.
Docker 部署 SpringBoot 项目

CentOS 安装 Docker

  • 使用官方脚本自动安装
    • curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
  • 国内 daocloud 一键安装命令:
    • curl -sSL https://get.daocloud.io/docker | sh
  • 离线安装(未涉及)
  • docker地址 可以查找想要的仓库

但是得先注册账号 登录后再打开这个地址

启动Docker & 设置为开机自启

  • sudo systemctl start docker
  • sudo systemctl enable docker.service
  • 查看docker版本 docker version

Docker 安装 MySql 5.7 如果不写:5.7 则默认拉取最新版本

  • docker pull mysql:5.7

创建并启动一个MySql 容器

1
docker run --name mysqlserver -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 -d --restart=always mysql
1
2
3
4
5
6
7
8
–name:给新创建的容器命名,此处命名为mysqlserver
-e:配置信息,此处配置mysql的root用户的登陆密码
-p:端口映射,表示在这个容器中使用3306端口(第二个)映射到本机的端口号也为3306(第一个)
-d:成功启动容器后输出容器的完整ID
--restart=always: 重启策略 docker启动时自动启动mysql容器
最后一个mysql指的是mysql镜像名字 我这里同时安装了mysql8和5.7 镜像名都是mysql, 所以我在启动时用的容器ID
718a6da099d8
--restart=on-failure:3:是指容器在未来出现异常退出(退出码非0)的情况下循环重启3次

截屏2020-08-18 下午4.06.37

###测试安装是否成功

  • 查看docker容器列表 docker ps -a 看上图

  • 进入mysql容器 docker exec -it mysqlserver bash

截屏2020-08-18 下午1.04.49

  • 开始mysql操作 mysql -uroot -p123456

截屏2020-08-18 下午1.06.37

开启外网访问权限

1
2
3
4
use mysql
update user set password_expired = "Y"where user="root";
ALTER USER'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;

退出mysql 退出mysql容器 并重启容器服务

1
2
3
exit
exit
docker restart mysqlserver

使用远程连接工具尝试连接,注意云服务器安全组配置, 本片文章3307 入网规则放开

挂载数据卷以及配置文件

之所以放在这里, 毕竟是一片学习教程文章. 一开始整太多不容易理解. 首先为什么需要挂载数据卷及配置文件.

如果我们在容器内操作mysql配置不是很方便,再一个如果容器被删除了,那么数据也会丢失. 我们需要把容器内的mysql配置文件和数据挂载到宿主机上

首先在宿主机内创建两个文件夹 习惯在 根目录创建 /mnt

mnt下创建docker文件夹 docker内创建一个mysql mysql下创建 conf和data两个文件夹

一个存放配置文件 一个存放数据

对了 我们忘了去看下mysql容器内配置文件的位置, 虽然默认位置都在/etc/mysql/my.cnf 但是还是要确认下

截屏2020-08-18 下午4.28.05

创建my.conf配置文件

1
touch /mnt/mysql/my.cnf

My.cnf添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[mysqld]
user=mysql
character-set-server=utf8mb4
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
secure_file_priv=/var/lib/mysql
[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

重新创建MySql容器并启动

删除之前的mysql容器

截屏2020-08-18 下午4.40.11

1
2
3
4
5
6
7
docker run --name mysqlserver \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3307:3306 \
-v /mnt/docker/mysql/conf:/etc/mysql/conf.d \
-v /mnt/docker/mysql/data:/var/lib/mysql \
--restart=always \
-d 718a6da099d8
1
2
3
4
结合参考之前的
-v:绑定挂
--restart=on-failure:3:是指容器在未来出现异常退出(退出码非0)的情况下循环重启3次
-d:后台运行容器,并返回容器 id 718a6da099d8是我镜像的ID 因为有两个mysql版本

这样就可以通过修改宿主机的配置文件修改mysql容器内的数据库配置了,并且如果删除了mysql容器,也可以通过挂载在宿主机的数据卷进行恢复,当然最好别这么操作. 有时间再写一篇容器删除的情况加如果数据恢复和自动备份操作的文章

将本地测试数据库导入到服务器Mysql数据库

获取mysql备份文件

这里有个注意点: 如果提示你密码过于简单 需要重新设置密码时, 你修改mysql密码完成后

alter user user() identified by “123456”;

flush privileges;

会发现远程连接数据库的密码发现没有改变 还是以前的密码, 这是为什么呢. 回头看你之前启动容器的命令

docker run --name mysqlserver -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 -d --restart=always mysql

因为你指定容器的密码是123456啊

将数据库备份文件传输到服务器 /mnt/temp下

scp art_boot_2020-08-18.sql root@服务器IP:/mnt/temp

在mysql容器内创建一个数据库 zsml

create database zslm default character set utf8mb4 collate utf8mb4_unicode_ci;

备份宿主机的数据到容器内的数据库内 注意是 -i 不需要伪终端

docker exec -i zslm_mysql mysql -uroot -p123456 zslm < /mnt/temp/art_boot_2020-08-18.sql

打包工程 获取Jar包 注意工程数据库配置文件内地址和端口

  • 在服务器 mnt目录下创建 docker文件夹
1
2
cd /mnt
mkdir docker

编辑Dockerfile文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Docker image for springboot file run
# VERSION 0.0.1
# Author: MoneyLee
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER moneylee <WeChat: 45634626>
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为zslm.jar
ADD zslm.jar zslm.jar
# 运行jar包
RUN bash -c 'touch /zslm.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/zslm.jar"]

将jar包和dockerfile文件传输到服务器的 /mnt/docker 目录下

1
2
scp art-boot.jar root@117.78.60.169:/mnt/temp
scp Dockerfile root@117.78.60.169:/mnt/temp

制作镜像

注意:这里要注意 java项目内数据库连接配置那块 不要写localhos 或者 127.0.0.1 因为容器之间网络是隔离的 只能通过暴露的端口联通,所以项目内的ip记得写内网ip, 还有redis那块 否则不能和数据库连通

确保dockerfile和jar包在同一目录下 执行

docker build -t zslm .

查看镜像列表

截屏2020-08-19 下午2.48.46


Docker安装Redis 并启动服务

docker pull redis

docker run --name redis-server -p 6379:6379 -d redis


启动镜像

docker run -d -p 9999:9999 --name zlm_server zslm


Docker 安装 Nginx

docker pull nginx

在/mnt/docker/nginx文件夹下创建挂载目录

mkdir -p /mnt/docker/nginx/{conf,conf.d,html,logs}

在conf.d文件夹内创建配置文件 并修改内容

cd conf

touch nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
worker_connections 768;
# multi_accept on;
}

http {

##
# Basic Settings
##

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;

# server_names_hash_bucket_size 64;
# server_name_in_redirect off;

include /etc/nginx/mime.types;
default_type application/octet-stream;

##
# SSL Settings
##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;

##
# Logging Settings
##

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

##
# Gzip Settings
##

gzip on;
gzip_disable "msie6";

# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

##
# Virtual Host Configs
##

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

server{
listen 80;
server_name your_server_name; #你的serverName
root /usr/share/nginx/html;
index index.html;
}

}

启动镜像

1
2
3
4
5
6
7
8
docker run \
--name nginx_server \
-d -p 8050:80 \
-v /mnt/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /mnt/docker/nginx/log:/var/log/nginx \
-v /mnt/docker/nginx/html/:/usr/share/nginx/html \
nginx
1

docker logs实时查看日志tail

docker logs -f -t --since="2017-05-31" --tail=10 container

  • 说明
1
2
3
4
5
--since : 指定输出日志开始日期。
-f : 查看实时日志
-t : 查看日志产生的时间戳
-tail=10 : 查看最后的10条日志。
container : 容器名

docker logs -f --until=2s

  • 说明:
    相对时间(relative):2013-01-02T13:23:37
    绝对时间(timestamp):42m for 42 minutes

docker logs [OPTIONS] CONTAINER


文章作者: 李财
文章链接: http://moneylee.cn/2020/08/18/Docker%E9%83%A8%E7%BD%B2SpringBoot%E9%A1%B9%E7%9B%AE/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 MoneyLee’s Blog
打赏
  • 微信
  • 支付宝

评论