docker build
命令构建docker run
命令执行1、dockerfile是用来构建docker镜像的构建文件,是有一系列命令和参数构成的脚本,类似于shell脚本。
shell#编写好dockerfile文件之后要把这个dockerfile打包成镜像 命令是
docker build -f dockerfile -t 镜像名:版本 . #结尾的那个.指的是当前路径下
#还有一种方法
docker build -t 镜像名:版本号 /root/Dockerfile/ #这样写的话dockerfile文件名必须是Dockerfile
#这两种方法的区别是:
#第一种是使用-f指定文件名 路径必须是当前目录下,但是dockerfile文件名可以随意起
#第二种是可以在任意路径下运行,但是路径下的dockerfile文件名必须叫“Dockerfile”
shellFROM # 基础镜像,一切从这里开始构建 MAINTAINER # 镜像是谁写的, 姓名+邮箱 RUN # 镜像构建的时候需要运行的命令 ADD # 步骤, tomcat镜像, 这个tomcat压缩包!添加内容 WORKDIR # 镜像的工作目录 VOLUME # 挂载的目录 EXPOSE # 保留端口配置 CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效可被替代 ENTRYPOINT # 指定这个容器启动的时候要运行的命令, 可以追加命令 ONBUILD # 当构建一个被继承DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令子镜像继承父镜像时,父镜像触发相应的动作 COPY # 类似ADD, 将我们文件拷贝到镜像中 ENV # 构建的时候设置环境变量!
CMD 和ENTRYPOINT区别
shellCMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令, 可以追加命令
VOLUME用法:
#VOLUME ["/data","/usr/local/nginx/html"]
Dockerfile
, build会自动寻找这个文件,就不需要-f指定了!shell[root@iZ2zeg4ytp0whqtmxbsqiiZ tomcat]# cat Dockerfile FROM centos MAINTAINER xiaofan<594042358@qq.com> COPY readme.txt /usr/local/readme.txt ADD jdk-8u73-linux-x64.tar.gz /usr/local/ ADD apache-tomcat-9.0.37.tar.gz /usr/local/ RUN yum -y install vim ENV MYPATH /usr/local WORKDIR $MYPATH ENV JAVA_HOME /usr/local/jdk1.8.0_73 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.37 ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.37 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin EXPOSE 8080 CMD /usr/local/apache-tomcat-9.0.37/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.37/bin/logs/catalina.out
shelldocker history 镜像名:版本号/ID号
解决无法使用ip a:apt-get update && apt-get -y install iproute2
解决无法使用ping:apt update && apt install -y iproute2 && apt install iputils-ping
我们没启动一个docker容器, docker就会给docker容器分配一个ip, 我们只要安装了docker,就会有一个网卡 docker0桥接模式,使用的技术是veth-pair技术!
docker容器之间是可以通信的
shell
不指定网卡的情况下是使用docker0网卡的,所以不指定网卡的情况下容器和容器之间的网络都是通过docker0进行转发的,所以都是互通的
docker0是/16位的,可以有个ip地址可用
Docker中的所有的网络接口都是虚拟的,虚拟的转发效率高!(内网传递文件!)
只要容器删除,对应的网桥也就一起没了
shelldocker run -dit -P --name nginx03 --link nginx02 nginx:latest
#创建nginx03时连接到nginx02
使用docker exec -it nginx03 ping nginx02 #是可以ping通的
但是docker exec -it nginx02 ping nginx03 #时ping不通的
本质探究:--link 就是我们在hosts配置中增加了一个172.17.0.3 tomcat02 f22ed47ed1be
我们现在玩Docker已经不建议使用--link了!
自定义网络!不使用Docker0!
Docker0的问题:它不支持容器名链接访问!
网络模式
shellbridge:桥接模式docker0(默认网络模式) none:不配置网络 host:和宿主机共享网络 container:容器网络连通!(用的少,局限很大)
测试
shell# 我们直接启动的命令默认有一个 --net bridge,而这个就是我们的docker0
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat01 --net bridge tomcat
# docker0特点,默认,容器名不能访问, --link可以打通连接!
# 我们可以自定义一个网络!
# --driver bridge
# --subnet 192.168.0.0/16 可以支持255*255个网络 192.168.0.2 ~ 192.168.255.254
# --gateway 192.168.0.1
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
26a5afdf4805d7ee0a660b82244929a4226470d99a179355558dca35a2b983ec
[root@iZ2zeg4ytp0whqtmxbsqiiZ ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
30d601788862 bridge bridge local
226019b14d91 host host local
26a5afdf4805 mynet bridge local
7496c014f74b none null local
我们自己创建的网络就ok了
本文作者:ZYW
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 ™ 许可协议。转载请注明出处!