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 build创建镜像
#最后的.表示用当前目录下的Dockerfile创建镜像
docker build --rm -t mysql:5.7 .
部分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发现数据库表数据已经生成了
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制作镜像
docker build --rm -t javademo:v1 --build-arg JAR_FILE=demo-0.0.1-SNAPSHOT.jar .
查看一下
使用镜像启动容器
docker run -itd --name javademo -p 8080:8080 javademo:v1
使用postman调用应用服务已经可以访问