Step1:拉取mysql8.0.21镜像
docker pull mysql:8.0.21
查看所有docker镜像
docker images
Docker删除镜像
docker rmi +镜像ID
Step2:运行mysql镜像
docker run --name mysql8 -p 3307:3306 -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.21 -d
参数详解:
-d 后台运行
--name 给容器起名,我用的mysql8 名字,这里自己可以随便取
-p 端口映射 3307(主机端口):3306(容器端口),也可以使用3306,我用3307是因为我已经在linux里面安装了mysql,3306端口被占用了。
-v /data/mysql:/var/lib/mysql 将主机当前目录下的/data/mysql目录挂载到容器的/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456 设置环境变量,设置密码
mysql:8.0.21 使用的镜像
进入容器
docker exec -it mysql8 /bin/bash
mysql8 是自己的容器名称,写你自己的名称。
如果出现错误,"docker exec" requires at least 2 arguments.See 'docker exec --help'.
Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...],Run a command in a running container
尝试一下先开启,在进入。
docker start mysql8
docker exec -it mysql8 /bin/bash
到这里,成功进入!!!部署成功。
查询容器
docker ps -a
删除容器
docker rm 容器ID
如果容器正在运行不能删除,就先停止,在删除。
docker stop 容器ID
docker rm 容器ID
退出容器
Step3:本地机测试
端口号我在上面是映射在linux的3307,所以这里要连接3307端口。
连接成功!
Step4:Dockerfile文件编写
在Jar包同级目录下创建Dockerfile文件,不知道这么打包Jar包放到linux的见这篇文章SpringBoot打包jar包。如何下载JDk17请参考这一篇文章安装JDK。
FROM centos:7
LABEL version="1.0"
RUN mkdir -p /usr/local/java && mkdir -p /soft_pros/java
ADD jdk-17_linux-x64_bin.tar.gz /usr/local/java/
ENV JAVA_HOME=/usr/local/java/jdk-17.0.11
ENV PATH=$JAVA_HOME/bin:$PATH
WORKDIR /soft_pros/java/
COPY big_event-1.0-SNAPSHOT.jar ./big_event.jar
COPY application.yml ./application.yml
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "big_event.jar"]
Dockerfile详解:
FROM centos:7 基于CentOS7为基础镜像
RUN mkdir -p /usr/local/java && mkdir -p /soft_pros/java Run类似于在CentOS7中执行命令,linux语法是怎么样就可以怎么写,而且每一次运行,docker就会在上面新建一层,为了不让docker过于庞大,可以使用&&将两行命令结合在一起。如果是多行命令结合在一起,可以使用&& \ 换行继续写,结构更整洁。
ADD jdk-17_linux-x64_bin.tar.gz /usr/local/java/ 使用ADD和COPY都可以完成,只是ADD命令会自动解压到容器中,COPY估计还需要写一些别的,为了方便我用的ADD。jdk-17_linux-x64_bin.tar.gz这是在我上下文路径中存在的文件,及Dockerfile同级目录下文件,所以可以直接写文件名,放到我的容器的/usr/local/java/目录下
ENV JAVA_HOME=/usr/local/java/jdk-17.0.11
ENV PATH=$JAVA_HOME/bin:$PATH 这两行是为了配置环境变量,和在linux里面安装jdk是一样的WORKDIR /soft_pros/java/ 指定工作路径,下面的操作都是在这一路径下。
COPY big_event-1.0-SNAPSHOT.jar ./big_event.jar COPY文件到容器里
COPY application.yml ./application.yml 把数据库配置文件带到容器里去
EXPOSE 8080 容器向外暴露的端口
ENTRYPOINT ["java", "-jar", "big_event.jar"] 和CMD 指令类似,但时不会被 docker run 的命令行参数指定的指令所覆盖。
使用Dockerfile创建镜像时,docker build 命令会根据用户的指定知道上下文路径,会将路径下的所有内容打包,然后上传给 Docker 引擎。所以,在这里我一般会把文件放到和Dockerfile的同级目录下。
Step5:数据库信息配置
在文件同级目录中有一个application.yml配置了关于数据库容器的一些信息。
注:在这里我一开始使用的是虚拟机的ip地址加暴露出来的3307端口,但是容器隔离了,导致连接不上,最后我使用的Docker的桥接网络才成功的。这里的mysql8是的mysql容器名称,3306端口就是mysql8容器的端口,不是主机暴露出来的3307!!
Step6:构建docker镜像
docker build -t big_event:1.0 .
#big_event:1.0 即镜像的名称和版本号
注:命令后面存在一个. 即上文提到的用户指定的上下文路径
现在可以看到我们的big_event镜像就创建好了。
现在可以用我们的镜像建立容器跑起来了。
docker run --name big_event -p 8081:8080 -v /data/big_config:/usr/local/config -d big_event:1.0
参数详解:
-d 后台运行
--name big_event 给容器起名,
-p 端口映射 8081(主机端口):8080(容器端口)
-v /data/big_config:/usr/local/config 将主机当前目录下的/data/big_config目录挂载到容器的/usr/local/config
big_event:1.0 使用的镜像
Step7:Docker桥接网络
容器之间的通信好像有好几种,有兴趣的可以自己去了解一下哦。
1、先查看一下docker网络有哪些
docker network ls
2、创建桥接网络 big_mysql 名字自己随意取
docker network create big_mysql
3、把容器连接到这个网络里来 ,下面的mysql8 、big_event是我的容器名
docker network connect big_mysql mysql8
docker network connect big_mysql big_event
4、检查一下,是否连接成功
docker network inspect big_mysql
好了,已成功!
运行起来后,想看具体情况的话,可以查看docker的日志
docker logs 容器ID
一些错误解决:
如果日志文件出现这种,就是数据库连接问题了,查一下你的数据库和jar包的容器连接没有。还有些其他问题,可能是防火墙端口没开放等等问题。