• Dockerfile制作方法


    解决了3个问题:

    1、制作自己的Dockerfile。

    2、修改Dockerfile。经常遇到,同样的dockerfile别人可以,但是自己build就失败,究其原因主要是网络故障导致wget、crul等下载、安装、设置没有成功。可先下载好文件再COPY。

    3、调试Dockerfile。有的images跑不起来,刚跑起来就来个 exited with code 0,这时怎么办,需要调试

    办法:
    1、进入到容器的bash

    docker run -it name/id (bash)            # 让创建的容器立刻进入运行状态。(最后COMMAND不为bash需指定bash)
    docker exec -it container_name/id (bash) # 用于容器启动之后,执行交互型任务。(最后COMMAND不为bash需指定bash)
    docker attach  container_name/id         # 将终端依附到容器上,不能指定bash。(只对最后COMMAND为bash的才有效) 
    # COMMAND:指镜像的最后一条CMD或者ENTRYPOINT

    2、然后和系统装软件的方式一样,做一个步骤,同时在Dockerfile中记录一条,这样Dockerfile也就做出来了

    3、退出容器用exit

    详细叙述如下:
    一、针对image镜像,直接使用docker run

    docker run -ti name
    #或者 docker run -ti name bash 

    如第一条直接进入bash,说明镜像的最后一条CMD或者ENTRYPOINT就是bash,直接安装记录Dockerfile就可以了

    如第二条进入bash,说明镜像安装了bash,但是最后一条CMD或者ENTRYPOINT是其他程序。

    如:docker run -ti appelgriebsch/alpine

    -t, --tty=false 使用终端。经常和 -i一起使用。
    -i, --interactive=false 打开STDIN和容器交互。经常和 -t一起使用


    二、针对container容器

    使用ps查看运行情况,根据COMMAND 选择相应的方法

    docker ps

    2.1如果最后CMD或ENTRYPOINT为bash,以下均可

    docker run -it name/id
    docker exec -it container_name/id
    docker attach container_name/id

    2.2如果最后CMD或ENTRYPOINT不为bash,需指定bash,以下均可

    docker run -it name/id bash
    docker exec -it container_name/id bash


    三、镜像无bash,那么需先添加个bash,再使用上面的方法,如下即可:

    3.1来个dockerfile:

    FROM alpine:3.4
    USER root
    RUN apk update 
      && apk upgrade 
      && apk add bash 
      && rm -rf /var/cache/apk/*
    ENTRYPOINT ["/bin/bash"] 

    3.2然后

    docker build -t myim .

    3.3再然后

    docker run -ti myim

    可见,进入了容器的bash了,ok你懂的

    四、测试时经常用到的清除命令,如果有不能清除的 加个 -f 强制

    docker kill $(docker ps -q) ; docker rm $(docker ps -a -q) ; docker rmi -f $(docker images -q -a)  

    五:注意:转换为Dockerfile需要作少许修改,比如:

    export HTTPD_VERSION="2.4.23" -----------> ENV HTTPD_VERSION 2.4.23
    apk add --no-cache --update-cache bash ----> RUN apk add --no-cache --update-cache bash

    六:如果出现"exited with code 0"错误可以试试添加tty: true,如下:

    version: '2.0'
    services:
        face_golang:
          build: ./face
          volumes:
            - ./data/www:/var/www
          container_name: face_golang
          tty: true  

     或者在Dockerfile最后添加

    ENTRYPOINT ["sh"]
    或者
    ENTRYPOINT ["/bin/bash"]
  • 相关阅读:
    Dynamics CRM命令栏定制基础知识及手动编辑customization.xml实例
    在Dynamis CRM中打造一键保存关闭刷新案例的功能
    Dynamics CRM 客户端程序开发:自定义系统标准按钮的可用性
    cmd 获取当前登录的用户和远程连接的用户
    发生系统错误 6118
    Windows 批量修改文件后缀名
    dos命令创建批处理脚本
    3389连接痕迹清除
    创建超级隐藏用户
    lcx 内网转发
  • 原文地址:https://www.cnblogs.com/lxsky/p/6127648.html
Copyright © 2020-2023  润新知