zoukankan      html  css  js  c++  java
  • DockerFile构建步骤及命令

    DockerFile

    dockerfile就是用来构建docker镜像的构建文件,命令脚本

    构建步骤:
    1、编写一个 dockerfile 文件
    2、docker build 构建成一个镜像
    3、docker run 运行镜像
    4、docker push 发布镜像(DockerHub、阿里云镜像仓库)

    很多官方镜像都是基础包,很多功能没有,需要自己搭建镜像

    基础知识:
    1、每个保留关键字(指令)都必须是大写字母
    2、执行从上到下顺序执行
    3、# 表示注释
    4、每个指令都会创建提交一个新的镜像层,并提交

    关系:
    DockerFile:构建文件,定义了一切的步骤,源代码
    DockerImages:通过 DockerFile 构建生成的镜像
    DockerContainer:容器就是镜像运行起来提供服务
    DockerFile常用指令

    FROM # 基础镜像,一切从这里开始构建
    MAINTAINER # 维护者信息,镜像是谁写的,姓名+邮箱
    RUN # 镜像构建的时候需要运行的命令
    ADD # 添加内容
    WORKDIR # 镜像的工作目录
    VOLUME # 挂载的目录
    EXPOSE # 保留端口配置
    CMD # 指定容器启动的时候运行的命令,只有最后一个生效,可被替代
    ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
    ONBUILD # 当构建一个被继承 DockerFile 这个时候就会运行 ONBUILD 指令,触发指令
    COPY # 类似 ADD ,将文件拷贝到镜像中
    ENV # 构建的时候设置环境变量
    

    测试

    # 编写自己的 DockerFile 文件
    FROM centos
    
    MAINTAINER zhangsan<1234567890@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
    # dockerfile 构建镜像
    docker build -f dockerfile文件路径 -t 镜像名:[tag] .
    


    查看本地镜像变更历史
    docker history 镜像id

    CMD 与 ENTRYPOINT 区别

    CMD 指定这个容器启动的时候要运行的命令,只有最后一个生效,可被替代
    ENTRYPOINT 指定这个容器启动的时候要运行的命令,可以追加命令

    测试CMD

    # CMD dockerfile 文件编写
    FROM centos
    
    CMD ["ls","-a"]
    # 想追加命令 -l => ls -al 
    [root@VM-4-6-centos dockerfile]# docker run e07c1b169ee5 -l
    docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.
    # CMD的情况下 -l 替换了 CMD ["ls","-a"] 命令,-l 不是命令所以报错
    

    测试ENTRYPOINT

    # ENTRYPOINT dockerfile 文件编写
    FROM centos
    ENTRYPOINT ["ls","-a"]
    # 追加命令,直接拼接在 ENTRYPOINT 命令的后边,-l => ls -al
    [root@VM-4-6-centos dockerfile]# docker run 11e57c775083 -l
    total 56
    drwxr-xr-x   1 root root 4096 Aug 15 07:30 .
    drwxr-xr-x   1 root root 4096 Aug 15 07:30 ..
    -rwxr-xr-x   1 root root    0 Aug 15 07:30 .dockerenv
    lrwxrwxrwx   1 root root    7 Nov  3  2020 bin -> usr/bin
    drwxr-xr-x   5 root root  340 Aug 15 07:30 dev
    drwxr-xr-x   1 root root 4096 Aug 15 07:30 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 Dec  4  2020 lost+found
    

    例子:dockerfile 制作 tomcat 镜像
    1、准备镜像文件 tomcat压缩包,jdk压缩包

    2、编写dockerfile文件,官方命名Dockerfile,build会自动寻找这个文件,可以不需要-f指定文件名

    # dockerfile编写
    FROM centos
    MAINTAINER zhangsan<1234567890@qq.com>
    
    COPY readme.txt /usr/local/readme.txt
    
    ADD jdk-8u301-linux-x64.tar.gz /usr/local/
    ADD apache-tomcat-8.5.69.tar.gz /usr/local/
    
    RUN yum -y install vim
    
    ENV MYPATH /usr/local
    WORKDIR $MYPATH
    
    ENV JAVA_HOME /usr/local/jdk1.8.0_301
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.69
    ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.69
    ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
    
    EXPOSE 8080
    
    CMD /usr/local/apache-tomcat-8.5.69/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.69/logs/catalina.out
    
    

    3、构建镜像
    docker build -t mytomcat:1.0 .
    4、启动镜像

    docker run -d -p 8080:8080 --name mytomcat -v /home/tomcat-test/test:/usr/local/apache-tomcat-8.5.69/webapps/test -v /home/tomcat-test/tomcatlogs:/usr/local/apache-tomcat-8.5.69/logs mytomcat:1.0
    

    5、访问测试

    6、发布项目(因为做了卷挂载,可以直接在本地发布项目)
    在test目录下新建WEB-INF目录,再新建web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
    
    </web-app>
    

    在test目录下新建index.jsp

    <%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>my test file</title>
    </head>
    <body>
    this is a test file
    <%
    System.out.println("----this is a test file----");
    %>
    </body>
    </html>
    

    访问成功!

    日志

    dockerHub发布镜像

    发布到dockerhub

    1、登录docker账户
    docker login -u 账户名 -p 密码

    2、提交镜像
    docker push 镜像名

    提交出现 denied: requested access to the resource is denied
    镜像名重复,使用 docker tag 镜像id 镜像名 修改,镜像名一般为 账户号/镜像名:版本号

    发布到阿里云镜像服务

    1、登录阿里云,找到容器镜像服务


    2、创建命名空间

    4、创建镜像仓库

    选择本地仓库

    点击进入容器仓库

    提交操作步骤

  • 相关阅读:
    项目分析时找不到函数调用只有16进制数
    firebase消息推送配置
    布局错乱到原点的问题
    人脸识别部分文章地址笔记
    查看奔溃分析
    iOS App 后台任务的坑(奔溃原因分析)
    轨迹优化
    X SqlServer 事务日志传输 【将备份目录设置到辅助服务器】
    X sql server2014 发布与订阅的配置方法介绍包括【推送订阅】与【请求订阅】
    X SQL SERVER 使用订阅发布同步数据库 【推送订阅】
  • 原文地址:https://www.cnblogs.com/2393920029-qq/p/15125482.html
Copyright © 2011-2022 走看看