Dockerfile的构建(三)

dockerfile是我们构建镜像的脚本文件,具备自己的语法

构建步骤

  1. 编写Dockerfile文件
  2. 使用docker build 构建镜像
  3. docker run 运行镜像
  4. docker push 将镜像发布到镜像仓库(DockerHub/阿里云仓库/也可以是直接的仓库)

规范与基础知识

  1. 指令关键字必须是大写

  2. 执行顺序为从上到下

  3. #表示注释

  4. 每一个指令都会创建提交一个新的镜像层,并提交

    结合之前的镜像知识,下图可以帮助我们更好的理解

image-20200516131756997

我们的程序都是在可写容器层。

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 .

image-20200912105116982

使用docker history 镜像ID 列出该镜像变更历史

image-20200912105201564

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值