docker 安装以及部署springboot项目和连接mysql

一、安装docker

1.查看centos版本,Docker要求Centos系统的内核版本最低 3.10

# uname -r

2.若Centos的内核最低版本低于 3.10 的话需要执行更新操作,若Centos的最低版本高于 3.10就无需更新

# yum update

3.安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖

# yum install -y yum-utils device-mapper-persistent-data lvm2

4.设置yum源

# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

5.可以查看所有仓库中所有docker版本,并选择特定版本安装

# yum list docker-ce --showduplicates | sort -r

6.安装docker

# yum install docker-ce  #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版
# 若要安装指定版本的docker   例:
 # yum install docker-ce-18.09.0-3.el7 docker-ce-cli-18.09.0-3.el7 containerd.io

7.安装完成docker后,启动docker

# systemctl start docker       启动docker
# systemctl enable docker      设置开机启动docker

8.验证docker是否安装成功,若出现版本信息则说明成功安装了

# docker version

二、docker常用命令

1.重启docker服务
# systemctl restart docker 

2.停止docker命令
# systemctl stop docker 

3.查看镜像列表
# docker images

4.删除镜像
# docker rmi image-id

5.查看容器列表
# docker ps
# docker ps -a       查看所有容器,包括停止的容器

6.启动以及停止容器
# docker start container-name/container-id
# docker stop container-name/container-id

7.删除容器
# docker rm container-id
# docker rm -f container-id       强制删除容器

8.查看容器日志
# docker logs container-name/container-id

9.设置 阿里云 加速地址
找到 /etc/docker/ 目录下
# vi daemon.json
将以下内容复制到文件中
max-size 限制每个容器,记录日志的最大总的占用空间
max-file 限制每个容器日志文件个数
{
  "registry-mirrors": ["https://rypl6yvv.mirror.aliyuncs.com"],
  "log-driver": "json-file",
   "log-opts": {
     "max-size": "1024m",
     "max-file":"5"
   }
}


# systemctl daemon-reload      通知systemd重载此配置文件
# systemctl restart docker     重启docker

10.查看最后一次运行的容器
docker ps -l
 
11.查看停止的容器
docker ps -f status=exited

12.【外部】复制文件到【容器】中去:
docker cp /外部目录/外部文件 容器名:/容器目录/文件名【若最后写了文件名,就以最后的文件名为主】
 
 
13.【容器】复制文件到【外部】:
docker cp 容器名:/容器目录/容器中的文件   /外部目录/文件名【若最后写了文件名,就以最后的文件名为主】

14.(目录挂载)文件映射:
# docker run -di --name=mynginx -p 90:80 -v /usr/html:/usr/share/nginx/html nginx:1.17.5
# -v 目录挂载 外部目录:容器目录 
# -p 端口映射 外部端口:容器端口

15.查看容器所有信息:
docker inspect container-name

16.Dockerfile语法说明
      命令                                    作用
FROM image_name:tag            定义了使用哪个基础镜像启动构建流程
MAINTAINER user_name           声明镜像的创建者
ENV key value                  设置环境变量(可以写多条)
RUN command                    是Dockerfile的核心部分(可以写多条)
ADD source_dir/file	           将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
dest_dir/file                 
COPY souce_dir/file            和ADD相似,但是如果有压输文件并不能解压       
dest_dir/file 
WORKDIR path_dir               设置工作目录 

三、在docker中安装MySQL

1.检索可安装的 mysql 镜像列表

# docker search mysql

查看镜像列表也可在官网查找 https://hub.docker.com/

2.选择合适的镜像后,拉取镜像(拉取镜像前,记住配置阿里云加速镜像地址,否则下载很慢)

# docker pull image-name:tag   
例 # docker publl mysql:5.7   
# tag 为镜像版本号
# image-name 为镜像名

3.拉取下镜像后,查看镜像列表

# docker ps

4.运行容器

# docker run -p 3306:3306 --name mydata -e MYSQL_ROOT_PASSWORD=root -di --restart=always mysql:5.6.46

docker run -p 主机端口:容器端口 --name 自定义容器名 -i  -t  -d  -v  主机目录:容器目录:ro  镜像ID或镜像名:TAG
#--name 指定容器名,可自定义,不指定自动命名
#-i以交互模式运行容器
#-t分配一个伪终端,即命令行,通常-it组合来使用
#-p指定映射端口,讲主机端口映射到容器内的端口
#-d后台运行容器
#-V指定挂载主机日录到容器日录,默认为rw读写模式,ro表示只读
#-e MYSQL_ROOT_PASSWORD=root 设置MySQL默认密码
# --restart=always  表示此容器开机启动,只要docker也设置了开机自启,docker不死

5.查看容器列表

# docker ps

6.在外部用Navicat连接docker中运行的数据库

四、将springboot项目打包

1.在idea中执行打包操作:

五、服务器上部署springboot项目

1.将打包好的项目 jar 包上传至服务器中,这里用到了 xftp 工具

这里将jar 上传到了   /usr/local/app/  的文件夹下

2.在上一步有jar的文件夹下 新建 Dockerfile 文件,名称一定固定为 Dockerfile

# vi Dockerfile
    
#将以下内容填写入 Dockerfile 文件中
    
#指定基础镜像,本地如果没有会从 dockerhub 上 pull 下来
FROM openjdk:8
#把可执行jar包复制到基础镜像的根目录下
ADD learn.jar /mylearn.jar
#容器需要暴露 给主机的端口号,这里的端口号和 项目配置文件中的端口号一致
EXPOSE 8090
#在镜像运行为容器后执行的命令
ENTRYPOINT ["java","-jar","/mylearn.jar"] 

说明:

第一步:FROM openjdk:8  为指定基础镜像
第二步:第一个 learn.jar 为打包好后的springboot项目jar名称,mylearn.jar 为自定义的名称,将learn.jar复制到 mylearn.jar下面
第三步:容器需要暴露 给主机的端口号,这里的端口号和 项目配置文件中的端口号一致
第三步: 在镜像运行为容器后执行的命令 此次会被翻译为   java -jar /mylearn.jar

3.执行编译Dockerfile文件命令,构建镜像

# docker build -f Dockerfile -t mylearn:1 .

# -f 指定编译的文件
# -t 指定镜像名以及版本号
# 注意命令最后还有一个 . 表示Dockerfile文件在当前文件下

4.执行命令基于刚才构建的镜像运行容器(即运行springboot项目,运行之前在外部用Navicat连接docker中运行的数据库,新建一个项目中需要连接的数据库)

运行方式一:当springboot项目连接数据的配置文件为:

spring.datasource.url = jdbc:mysql://localhost:3306/spring
#执行运行命令前,若springboot项目需要连接数据库,请确保数据库容器已经在运行
# docker run --net=host --name=learn -di mylearn:1

#以 --net=host 方式启动的项目此时 容器内和宿主机共用端口 因为docker会自动给每个容器分配ip,但是项目里配置的mysql地址是localhost,在容器内连接localhost是连接容器本身而不是宿主机的localhost,所以一直找不到mysql。所以采用host的网络方式将容器与宿主机共用一个Network Namespace,这样容器内localhost就是宿主机的localhost
# -d后台运行容器
# -i以交互模式运行容器
# --name自定义容器名称
# 最后 mylearn 为我们上一步自定义构建的镜像名称

运行方式二:当springboot项目连接数据的配置文件为:

spring.datasource.url = jdbc:mysql://mysql:3306/spring
即:有数据库别名的时候
# --link 连接提供mysql服务的容器,冒号后面是配置文件中数据库的别名,别名应该和代码中的数据库地址一致
# docker run --link mydata:mysql --name=learn -p 80:8090 -di mylearn:1

# --link 链接,mydata为已经在运行的数据库镜像的别名,冒号后面是配置文件中数据库的别名,这里配置文件中数据库的别名为mysql
# --name 为容器的别名
# -p 为端口号映射 80 为外部访问端口,8090为容器对宿主机的映射端口
# -d后台运行容器
# -i以交互模式运行容器
# 镜像名:版本号

运行方式三:当springboot项目不需要连接数据库的时候

# docker run --name=learn -p 8090:8090 -di mylearn:1

注意:运行成功springboot容器后,不能访问项目的话,可能是端口号没有开启,检查防火墙状态

六、常用的centos对防火墙的操作指令

查看已经开放的端口
# firewall-cmd --list-ports
    
开启端口
# firewall-cmd --zone=public --add-port=80/tcp --permanent
  
# 加端口,格式为:端口/通讯协议    
# –zone #作用域
# –add-port=80/tcp #添加端口,格式为:端口/通讯协议
# –permanent #永久生效,没有此参数重启后失效
    
重启firewall  
# firewall-cmd --reload  
    
停止firewall  
# systemctl stop firewalld.service  
    
禁止firewall开机启动  
# systemctl disable firewalld.service   
    
开机启动防火墙
# systemctl enable firewalld
    
开启防火墙
# systemctl start firewalld

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐