dockerfile是我们构建镜像的脚本文件,具备自己的语法
构建步骤
- 编写Dockerfile文件
- 使用docker build 构建镜像
- docker run 运行镜像
- docker push 将镜像发布到镜像仓库(DockerHub/阿里云仓库/也可以是直接的仓库)
规范与基础知识
-
指令关键字必须是大写
-
执行顺序为从上到下
-
#表示注释
-
每一个指令都会创建提交一个新的镜像层,并提交
结合之前的镜像知识,下图可以帮助我们更好的理解
我们的程序都是在可写容器层。
DockerFile的指令
#基础镜像
FROM
#镜像作者 一般格式为作者名字+邮箱
MAINTAINER
#构建镜像时要运行的命令
RUN
#要添加的内容
ADD
#镜像的工作目录
WORKDIR
#挂载的目录
VOLUME
#保留端口,项目端口号
EXPOSE
# 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
CMD
#指定这个容器启动时要加载的命令
ENTRYPOINT
# 当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令,触发指令。
ONBUILD
#类似ADD,将我们的文件拷贝到镜像中
COPY
#构建的时候设置环境变量
ENV
构建一个自己的centos
# 1.编写Dockerfile文件
vim mydockerfile-centos
FROM centos
MAINTAINER cheng<1204598429@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "-----end----"
CMD /bin/bash
# 2、通过这个文件构建镜像
# 命令 docker build -f 文件路径 -t 镜像名:[tag] .
docker build -f mydockerfile-centos -t mycentos:0.1 .
使用docker history 镜像ID 列出该镜像变更历史
CMD 和 ENTRYPOINT区别
# 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
CMD
# 指定这个容器启动的时候要运行的命令,可以追加命令
ENTRYPOINT
dockerfile构建镜像并启动容器
首先打包好一个可执行的jar包,上传到linux服务器中
在linux中编写DockerFile文件,也可以先在本地写好上传
DockerFile内容如下:
方式一:
FROM java:8
MAINTAINER YangQigong<1871151886.@qq.com>
COPY *.jar /app.jar
CMD ["--server.port=7777"]
EXPOSE 7777
ENTRYPOINT ["java","-jar","app.jar"]
使用docker build命令构建镜像
docker build -f yqgdockerfile -t yqg-test-docker:0.1 .
使用docker run构建容器并启动
docker run --name yqg-test -p 7777:7777 -d yqg-test-docker:0.1
方式二:
FROM java:8
MAINTAINER YangQigong<1871151886.@qq.com>
ARG JAR
ADD $JAR /usr/local/apps/app.jar
CMD ["--server.port=7777"]
EXPOSE 7777
ENTRYPOINT ["java","-jar","/usr/local/apps/app.jar"]
这种方式可以看做一种动态的Dockerfile,在构建镜像时才指定jar包。
docker build --build-arg JAR=docker-demo-0.0.1-SNAPSHOT.jar -f yqgdockerfile -t yqg-test:0.1 .
docker run --name yqg-test -p 7777:7777 -d yqg-test-docker:0.1
如果要将日志等文件挂载出来,由于我直接挂载出现了问题。所以我目前的方式是,先使用构建好的容易启动一次,把日志文件夹启动拷贝出来。然后再挂载宿主机与容器内的文件。
复制容器内文件:
docker cp 77514e601dc1:/usr/local/apps/ /usr/local/apps/yqg-test/
删除容器,执行带挂载的命令。
docker run --name yqg-test -p 7777:7777 -v /usr/local/apps/yqg-test/apps:/usr/local/apps -d yqg-test:0.1
测试访问我们的服务接口
容器启动失败时查看日志
docker logs -f -t --tail 20 容器ID
docker run --name yqg-test -p 7777:7777 -v /usr/local/apps/yqg-test/apps:/usr/local/apps -d yqg-test:0.1
测试访问我们的服务接口
容器启动失败时查看日志
docker logs -f -t --tail 20 容器ID