• Docker Command and Dockerfile


    镜像相关命令

    # 下载镜像
    docker pull xxx
    # 搜素镜像
    docker search xxx
    # 查看已经下载了哪些镜像
    docker images
    # 查看已下载镜像的id
    docker images -q 
    
    # 删除镜像 
    docker rmi containerId/SOURCE_IMAGE[:TAG]
    #删除所有镜像
    docker rmi $(docker images -q)
    docker images -q | xargs docker rmi 
    
    # 删除tag为<none>的镜像
    docker rmi | xargs docker images | awk '{if ($2 == "<none>" )print $3}' | xargs docker rmi -f
    

    容器相关的命令

    # 载入一个本地镜像 
    docker load -i tomcat-8.0-jre.tar
    # 启动一个容器 
    docker run -dp 8080:8080 tomcat-8.0-jre --name tomcat 
    # 查看正在运行的容器
    docker ps
    # 查看全部容器的id
    docker ps -q
    # 查看全部容器
    docker ps -a 
    #运行 重启 停止 杀掉容器
    docker start/restart/stop/kill containerId/name
    
    # 删除已创建的容器
    docker rm containerId/name:tag
    docker rm $(docker ps -q)
    
    # 查看日志
    docker logs containerId/name
    # 实时显示日志
    docker logs -tf containerId/name
    # 行首添加时间 的日志
    docker logs -tail  5 containerId/name
    
    # 查看容器资源情况
    docker top containerId
    # 进入容器的交互模式
    docker exec -it containerId bash
    
    # 复制 容器中的文件、目录到 宿主机
    docker cp containerId:/root/test.txt /root/
    
    # 复制 宿主机的文件、目录到 容器中
    docker cp a.txt containerId:/root/
    
    # 打包一个镜像
    docker commit -m "description xx" -a "author" containerId SOURCE_IMAGE[:TAG]
    docker save redis:latest -o redis-cluster.tar
    
    # 上传到docker hub仓库
    docker tag redis:latest docker.io/whalefall541/redis:0.01
    docker push docker.io/whalefall541/redis:0.01
    
    # 查看docker 网络配置
    docker network ls
    
    # 创建自定义网桥
    docker mynetwork create mynetwork
    # 将容器指定到 创建的网桥上
    docker run -dp 80:80 --network mynetwork redis
    # 删除网桥
    docker newnetwork rm mynetwork
    # 查看网桥
    docker inpsect mynetwork
    
    # 数据卷指定
    # docker run -dp 80:80 tomcat -v /root/webapps:/root/webapps
    docker run -dp 80:80 tomcat -v aa:/root/webapps
    # 数据卷创建
    docker volume create volume_1
    # 删除所有未使用的卷
    docker volume prune 
    docker rm volume_1
    # 查看数据卷
    docker inspect volume_1
    

    Dockerfile

    • ADD
    • COPY
    • ENV
    • EXPOSE
    • FROM
    • LABEL
    • STOPSIGNAL
    • USER
    • VOLUME
    • WORKDIR
    • ONBUILD (when combined with one of the supported instructions above)

    详细教程请看官网 Dockerfile

    how-cmd-and-entrypoint-interact

    Understand how CMD and ENTRYPOINT interact

    Both CMD and ENTRYPOINT instructions define what command gets executed when running a container.
    There are few rules that describe their co-operation.

    1. Dockerfile should specify at least one of CMD or ENTRYPOINT commands.

    2. ENTRYPOINT should be defined when using the container as an executable.

    3. CMD should be used as a way of defining default arguments for an ENTRYPOINT command
      or for executing an ad-hoc command in a container.

    4. CMD will be overridden when running the container with alternative arguments.

    The table below shows what command is executed for different ENTRYPOINT / CMD combinations:

    No ENTRYPOINT ENTRYPOINT exec_entry p1_entry ENTRYPOINT ["exec_entry", "p1_entry"]
    No CMD error, not allowed /bin/sh -c exec_entry p1_entry exec_entry p1_entry
    CMD ["exec_cmd", "p1_cmd"] exec_cmd p1_cmd /bin/sh -c exec_entry p1_entry exec_entry p1_entry exec_cmd p1_cmd
    CMD ["p1_cmd", "p2_cmd"] p1_cmd p2_cmd /bin/sh -c exec_entry p1_entry exec_entry p1_entry p1_cmd p2_cmd
    CMD exec_cmd p1_cmd /bin/sh -c exec_cmd p1_cmd /bin/sh -c exec_entry p1_entry exec_entry p1_entry /bin/sh -c exec_cmd p1_cmd

    Note

    If CMD is defined from the base image, setting ENTRYPOINT will
    reset CMD to an empty value. In this scenario, CMD must be defined in the
    current image to have a value.

    You can override the ENTRYPOINT setting using --entrypoint,
    but this can only set the binary to exec (no sh -c will be used).

    一个简单的案例

    拷贝springboot文件到 容器并 指定spring配置文件运行

    FROM java
    ENV JARNAME="demo-0.0.1-SNAPSHOT.jar"
    WORKDIR /root/app
    RUN /bin/bash -c "echo 'aaaa' >> 1.txt"
    EXPOSE 80
    VOLUME ["/root/app"]
    ENTRYPOINT ["java","-jar","demo-0.0.1-SNAPSHOT.jar", "-Dspring.config.location"]
    CMD ["application.yml"]
    
    #ENTRYPOINT ["echo","/root"]
    #CMD ["/root/app"]
    
    docker build -t springboot:0.01 .
    docker run -v /dockerlearn/dockerfilelearn:/root/app -p 80:80 --network rediscluster_default --rm springboot:0.01
    
    

    Note

    1. 如果 ENTRYPOINT ["exec_entry", "p1_entry"] 后面还有
      CMD ["p1_cmd", "p2_cmd"] 那么CMD中的参数将全部追加到 ENTRYPOINT
      docker run 后面跟参数时会覆盖掉CMD中的参数
    2. CMD ENTRYPOINT 数组形式 都是exec模式,不支持解析本地变量
      如果想解析 使用这个命令 ENTRYPOINT ["sh","-c","java -jar $JARNAME"]
    3. 如果使用了ENTRYPOINT ["sh","-c",..] 或者直接使用 ENTRYPOINT "echo Hello world"
      那么直接就无法覆盖参数了

    参考文献

    1. Dockerfile
    2. how-cmd-and-entrypoint-interact
  • 相关阅读:
    The Country List
    hdoj1215--七夕节(数学)
    Poj 1654--Area(叉积)
    Poj2229--Sumsets(递推)
    数据预处理 center&scale&box-cox
    caret 分类回归树 用法
    ensemble 的2篇入门 文章
    数组 array 矩阵 list 数据框 dataframe
    R list frame, matrix
    R 如何 隐藏坐标轴
  • 原文地址:https://www.cnblogs.com/whalefall541/p/15318270.html
Copyright © 2020-2023  润新知