Docker_dockerfile

  • Dockerfile指令大全

在这里插入图片描述
在这里插入图片描述* ### 普通用户ssh免密登陆完美解决(Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password))

vi /etc/ssh/sshd_config
修改为PubkeyAuthentication yes(如果前面有#,就去掉#)
service sshd restart重启sshd服务后再次连接就行了
  • 批量删除容器

#xargs有承接上面执行结果的作用,直接承接到docker rm 后面
docker ps -a|grep -v v1|grep -v v2|awk '{print$1}'|xargs docker rm

或者

docker rm -f $(docker ps -q)#docker ps -q表示正在运行的容器id

进入docker后,内核可以用,但是提示指令不存在的原因是因为系统是精简版

在这里插入图片描述

  • 对于微内核版本的centos进行Dockerfile安装

FROM centos #以一个镜像为基础,在此镜像上修改
MAINTAINER dc<daicong.xmu@gmail.com> #拥有名及邮箱

ENV my_path /usr/local #设置环境变量
WORKDIR $my_path #设置进入容器的落脚点
RUN  yum install vim -y #-y表示同意全自动选择
RUN yum install net-tools -y

EXPOSE 80
CMD echo $my_path #CMD表示在shell里面的执行命令的意思
CMD echo"success-----------ok"
#启动时执行最后一个命令,即进入/bin/bash,类似于运行一个容器要执行docker run -it mycentos:v1.1 /bin/bash
CMD /bin/bash

执行Dockerfile1文件的命令(格式docker built -f 文件路径 -t 镜像取名:标签 .)一定不要忘记后面有个点,表示当前文件夹

docker  build  -f path/Dockerfile1  -t  mycentos:v1 .
  • 查看镜像修改的历史

docker history 镜像ID#可查看镜像的一步一步修改的历史
  • 关于CMD和ENTRYPOINT区别

  • 1、CMD
    CMD不等于command,它不是命令!!!它就是个参数而已
CMD表示启动这个容器后就会自动执行这个指令
比如在dockerfile中加入
CMD ls -l
当启动这个容器后,会自动执行这个指令docker run -it mycentos:ip 会打印出ls -l的内容
Dockerfile中
CMD curl myip.ipip.net#查询本机的地址
#查ip方式
#curl cip.cc
#curl myip.ipip.net

比如启动这个容器后会自动执行查询本机的地址 但是如果想在启动容器后立马再执行一个指令ls表示查看当前文件信息docker run -it mycentos:ip -i 相当于CMD ls相当于执行的是

Dockerfile中
CMD curl myip.ipip.net#查询本机的地址
CMD -i
#查ip方式
#curl cip.cc
#curl myip.ipip.net

但是实际的执行效果会执行CMD -i,而不会执行CMD curl -i myip.ipip.net,因为会被覆盖
CMD和ENTRYPOINT区别

The main purpose of a CMD is to provide defaults for an executing container. These defaults can include an executable, or they can omit the executable, in which case you must specify an ENTRYPOINT instruction as well.
意思是,cmd给出的是一个容器的默认的可执行体。也就是容器启动以后,默认的执行的命令。重点就是这个“默认”。意味着,如果docker run没有指定任何的执行命令或者dockerfile里面也没有entrypoint,那么,就会使用cmd指定的默认的执行命令执行。同时也从侧面说明了entrypoint的含义,它才是真正的容器启动以后要执行命令。所以这句话就给出了cmd命令的一个角色定位,它主要作用是默认的容器启动执行命令。(注意不是“全部”作用)

这也是为什么大多数网上博客论坛说的“cmd会被覆盖”,其实为什么会覆盖?因为cmd的角色定位就是默认,如果你不额外指定,那么就执行cmd的命令,否则呢?只要你指定了,那么就不会执行cmd,也就是cmd会被覆盖。

  • 2、ENTRYPOINT是以追加补全指令的方式存在(只能以原指令补全,不能用新指令)
  • 这种方法完全不会有CMD的方法错误,会以追加的方式进行指令的执行
Dockerfile中
ENTRYPOINT curl myip.ipip.net#查询本机的地址
执行docker run -it mycentos:ip -i
相当于执行curl -i myip.ipip.net

只能以原指令补全,不能用新指令

执行docker run -it mycentos:ip ls
实际上不会执行ls指令

但是!!!

这种情况下可以用新指令,但是通过管道符后,前面的指令(curl myip.ipip.net)不会显示出来,只会显示后面的指令(ls)(无论cmd还是entrypoint)

docker run -it mycentos:ip|ls
相当于执行curl myip.ipip.net|ls#只会显示ls效果

子类继承父类的镜像的触发器

  • 子类在父类镜像的基础上进行改进,会触发triggers
ONBUILD RUN  echo"father onbuild .......886" 

在这里插入图片描述

自测安装Tomcat

在这里插入图片描述

答案

在这里插入图片描述
注:
CP就是简单的复制粘贴
ADD表示复制并且自动解压缩
在这里插入图片描述

-d后台运行
-p端口映射
--name自定义容器运行名称(不用机器分配)
-v卷的一一映射(多各-v可以多对多映射)
--privileged=true写权限不够则用这个命令即可
最后加上要运行的容器名。

这里很重要!!!

  • -v卷的一一映射(多各-v可以多对多映射),相当于在本地的test文件夹下添加修改文件夹或者文件,相应的会同步到容器的test文件下,便于更新!!!(如果没同步可以执行一下docker restart,不用每次都执行,一般会快速自动同步),catlina日志也会同步从容器导出到本机
  • exec隔空取物的功能

docker exec 容器ID ls -l#在容器外面可以对容器内部执行指令

相当于

docker attach 容器ID #先进入容器
ls -l#再执行命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值