Dockerfile 数据库 demo

新建一个没有扩展名的Dockerfile文件

#指定基础镜像
FROM mysql:5.7.31
#作者信息(自由发挥)
MAINTAINER test Dockerfile "chris"
#环境变量,这里修改了时区
ENV TZ Asia/Shanghai
#初始化数据库脚本,mysql会自动执行
#blog_system.sql中创建库语句,创建表语句,insert语句...
COPY blog_system.sql /docker-entrypoint-initdb.d

部分参数说明

  • FROM 指定基础镜像,必须为第一个命令
  • MAINTAINER 维护者(作者)信息
  • ENV 设置环境变量
  • RUN 构建镜像时执行的命令,RUN 经常用于安装软件包
  • CMD 构建容器后调用,也就是在容器启动时才进行调用,但 CMD 能够被 docker run 后面跟的命令行参 数替换。 Dockerfile 中只能有一条 CMD 命令,如果写了多条则最后一条生效。CMD不支持接收 docker run的参数。
  • ENTRYPOINT指定运行容器启动过程执行命令,覆盖CMD参数 ,ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖 ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。
  • ADD 将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
  • COPY 功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
  • WORKDIR 工作目录,类似于cd命令,进入容器时首先进入WORKDIR
  • ARG 用于指定传递给构建运行时的变量
  • VOLUMN 用于指定持久化目录
  • EXPOSE 指定于外界交互的端口
  • USER指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理会员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户

然后把Dockerfile上传到服务器

docker 查看镜像gpu docker 查看镜像的dockerfile文件_mysql


使用docker build创建镜像

#最后的.表示用当前目录下的Dockerfile创建镜像
docker build --rm -t mysql:5.7 .

docker 查看镜像gpu docker 查看镜像的dockerfile文件_Dockerfile_02


部分build命令参数

  • –build-arg=[] :设置镜像创建时的变量;
  • -f :指定要使用的Dockerfile路径;
  • –rm :设置镜像成功后删除中间容器;
  • –tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置 多个标签。

使用刚刚的镜像生成容器

#我本地3306端口被占用了所以用3307
docker run -itd --name mysql --restart always --privileged=true -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -v /data/mysql/mysql5.7:/var/lib/mysql mysql:5.7 --character-set-server=utf8 --collation-server=utf8_general_ci

使用Navicat连接mysql发现数据库表数据已经生成了

docker 查看镜像gpu docker 查看镜像的dockerfile文件_docker 查看镜像gpu_03

Dockerfile 应用服务器

编写Dockerfile文件

FROM openjdk:8-alpine3.9
MAINTAINER my application "chris"
#修改源
RUN echo "http://mirrors.aliyun.com/alpine/latest-stable/main/" > /etc/apk/repositories && \
    echo "http://mirrors.aliyun.com/alpine/latest-stable/community/" >> /etc/apk/repositories
#安装软件
RUN apk --update add curl bash tzdata && \
    rm -rf /var/cache/apk/*
#修改时区
ENV TZ Asia/Shanghai
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]

java项目用mvn package命令打包

把jar包和Dockerfile文件放到服务器的某个文件夹下

docker 查看镜像gpu docker 查看镜像的dockerfile文件_Dockerfile_04


使用docker制作镜像

docker build --rm -t javademo:v1 --build-arg JAR_FILE=demo-0.0.1-SNAPSHOT.jar .

查看一下

docker 查看镜像gpu docker 查看镜像的dockerfile文件_mysql_05


使用镜像启动容器

docker run -itd --name javademo -p 8080:8080 javademo:v1

docker 查看镜像gpu docker 查看镜像的dockerfile文件_docker 查看镜像gpu_06


使用postman调用应用服务已经可以访问