Dockerfie

Dockerfile

用来构建docker镜像的docker文件

步骤

  1. 编写dockerfile文件
  2. docker build 构建一个镜像
  3. docker run 运行一个镜像
  4. docker push 发布一个镜像,发布位置有dockerhub、阿里云镜像仓库

构建过程

基础知识

  1. 每个指令(关键字)都必须大写
  2. 执行顺序从上到下
  3. #表示注释
  4. 每个指令都会创建一个镜像层并提交

img

指令

img

说明:

FROM:基础镜像

MAINTAINER:镜像是谁写的,一般命令是姓名+邮箱

RUN:构建镜像时需要运行的命令

ADD:添加内容,用于复制新文件、目录或远程文件 URL到容器路径中。例如:在centos中添加jdk、tomcat等

COPY:COPY 指令只能从执行 docker build 所在的主机上读取资源并复制到镜像中。

WORKDIR:镜像的工作目录

VOLUME:指定挂载在主机的目录

EXPOSE:暴露的端口号

CMD:指定容器运行时要执行的命令,只允许使用一次CMD命令。使用多个CMD会抵消之前所有的命令,只有最后一个命令生效。

ENTRYPOINT:指定容器运行时要执行的命令,可以追加命令,不会被docker run的命令行指令所覆盖。如果要覆盖的话需要通过docker run --entrypoint来指定。

ONBUILD:触发指令添加到镜像中,只有在该镜像作为基础镜像时执行。

ENV:运行镜像时指定自动设置的环境变量。

构建进行

docker build -f dockerfile -t dockerfile-test .

解释:

-f dockerfile :指向编写的dockerfile 文件

-t dockerfile-test :为构建的镜像打上标签(镜像构建后的名字)

-q:不显示构建过程的信息

点:Dockerfile所在目录

命令区别

CMD 和 ENTRYPOINT 区别

CMD:指定容器运行时要执行的命令,只允许使用一次CMD命令。使用多个CMD会抵消之前所有的命令,只有最后一个命令生效。

ENTRYPOINT:指定容器运行时要执行的命令,可以追加命令,不会被docker run的命令行指令所覆盖。如果要覆盖的话需要通过docker run --entrypoint来指定。

示例:
cmd

1、编写dockerfile文件

vim dockerfile_cmd

2、使用cmd命令

FROM centos
CMD ["ls","-a"]

3、构建镜像

docker build -f dockerfile_cmd -t dockerfile_cmd .

4、运行

docker run 镜像id  #正常运行
docker run 镜像id -l #报错

5、运行结果

[root@VM-16-5-centos dockerfile]# docker run 3fdd321d31b9
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found

[root@VM-16-5-centos dockerfile]# docker run 3fdd321d31b9 -l
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "-l": executable file not found in $PATH: unknown.
ERRO[0000] error waiting for container: context canceled

entrypoint

1、编写dockerfile文件

vim dockerfile_entrypoint

2、使用cmd命令

FROM centos
CMD ["ls","-a"]

3、构建镜像

build -f dockerfile_entrypoint -t dockerfile_entrypoint .

4、运行

docker run 镜像id  #正常运行
docker run 镜像id -l #正常运行

5、运行结果

[root@VM-16-5-centos dockerfile]# docker run c06b85088f9a
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found

[root@VM-16-5-centos dockerfile]# docker run c06b85088f9a -l
total 56
drwxr-xr-x   1 root root 4096 Sep 22 06:02 .
drwxr-xr-x   1 root root 4096 Sep 22 06:02 ..
-rwxr-xr-x   1 root root    0 Sep 22 06:02 .dockerenv
lrwxrwxrwx   1 root root    7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x   5 root root  340 Sep 22 06:02 dev
drwxr-xr-x   1 root root 4096 Sep 22 06:02 etc
drwxr-xr-x   2 root root 4096 Nov  3  2020 home
lrwxrwxrwx   1 root root    7 Nov  3  2020 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Nov  3  2020 lib64 -> usr/lib64
drwx------   2 root root 4096 Sep 15  2021 lost+found

说明entrypoint可以追加 -l指令

发布镜像

DockerHub

1、注册账号

2、在服务器登录DockerHub

#登录方式一
docker login -u 账号 -p 密码
#登录方式二
docker login -u 账号 

3、提交

#提交一
git push 作者名/镜像:版本号
#提交二
git push 镜像:版本号
#提交三
git push 镜像

阿里云镜像服务

1、搜索 容器镜像服务

2、点击实例列表,选择个人或企业

3、创建命令空间(一个账号只能创建三个命名空间)

4、创建镜像仓库——》选择本地仓库

5、点击仓库进入详情页,安装文档步骤操作并提交

实战

dockerHub中实例

FROM scratch
ADD centos-7-x86_64-docker.tar.xz /

LABEL \
    org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS Base Image" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20201113" \
    org.opencontainers.image.title="CentOS Base Image" \
    org.opencontainers.image.vendor="CentOS" \
    org.opencontainers.image.licenses="GPL-2.0-only" \
    org.opencontainers.image.created="2020-11-13 00:00:00+00:00"

CMD ["/bin/bash"]

手写实例(centos + jdk +tomcat)

1、编写dockerfile文件

vim Dockerfile

注:如果不指定名称,会默认查找名字为Dockerfile,所有Dockerfile直接使用这个名字

2、编写文件内容

FROM centos

ADD jdk-8u231-linux-x64.tar.gz /usr/local
ADD apache-tomcat-7.0.68.tar.gz /usr/local

ENV MYLOCAL /usr/local
WORKDIR $MYLOCAL

ENV  JAVA_HOME /usr/local/jdk1.8.0_231
ENV  CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV CATALINA_HOME /usr/local/apache-tomcat-7.0.68
ENV CATALINA_BASE /usr/local/apache-tomcat-7.0.68

ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-7.0.68/bin/startup.sh 

3、构建镜像

 docker build -t centos_jdk8_tomcat7 .

4、启动

docker run -d -p 8081:8080 -v /usr/local/dockerfile/tomcat/webapps/:/usr/local/apache-tomcat-7.0.68/webapps -v /usr/local/dockerfile/tomcat/logs/:/usr/local/apache-tomcat-7.0.68/logs centos_jdk8_tomcat7

5、创建项目演示

  • 在webapps创建test文件

    mkdir test
    
  • 创建WEB-INF文件

    mkdir WEB-INF
    
  • 创建web.xml

    vim web.xml

     <?xml version="1.0" encoding="UTF-8"?>
      <web-app xmlns="http://java.sun.com/xml/ns/javaee"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                                   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
               version="2.5">
    
      </web-app>
    
  • 在test目录下创建jsp

    vim index.jsp

    <%@page language=“java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <metacharset="UTF-8">
    <title>测试</title>
    </head>
    <body>
    hello world</br>
       <%System.out.println("hahha")%>
    </body>
    
  • 访问页面

    http://ip:8081/test
    

    流程总结

    img

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值