2023-05-09
linux
00
请注意,本文编写于 507 天前,最后修改于 507 天前,其中某些信息可能已经过时。

目录

dockerfile
1、dockerfile流程
2、dockerfile打包命令
3、dockerfile内部命令
查看dockerfile运行历史
4、docker网络
——link
5、自定义docker网络

dockerfile

1、dockerfile流程

  • 手动编写一个dockerfile文件
  • 使用 docker build 命令构建
  • 使用docker run 命令执行

1、dockerfile是用来构建docker镜像的构建文件,是有一系列命令和参数构成的脚本,类似于shell脚本。

image-20220614193028059

2、dockerfile打包命令

shell
#编写好dockerfile文件之后要把这个dockerfile打包成镜像 命令是 docker build -f dockerfile -t 镜像名:版本 . #结尾的那个.指的是当前路径下 #还有一种方法 docker build -t 镜像名:版本号 /root/Dockerfile/ #这样写的话dockerfile文件名必须是Dockerfile #这两种方法的区别是: #第一种是使用-f指定文件名 路径必须是当前目录下,但是dockerfile文件名可以随意起 #第二种是可以在任意路径下运行,但是路径下的dockerfile文件名必须叫“Dockerfile”

3、dockerfile内部命令

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

CMD 和ENTRYPOINT区别

shell
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效可被替代 ENTRYPOINT # 指定这个容器启动的时候要运行的命令, 可以追加命令 VOLUME用法: #VOLUME ["/data","/usr/local/nginx/html"]
  1. 编写Dockerfile文件,官方命名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

查看dockerfile运行历史

shell
docker history 镜像名:版本号/ID号

4、docker网络

解决无法使用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

image-20220615162027687

不指定网卡的情况下是使用docker0网卡的,所以不指定网卡的情况下容器和容器之间的网络都是通过docker0进行转发的,所以都是互通的

image-20220615163746720

docker0是/16位的,可以有个ip地址可用

Docker中的所有的网络接口都是虚拟的,虚拟的转发效率高!(内网传递文件!)

只要容器删除,对应的网桥也就一起没了

shell
docker 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的问题:它不支持容器名链接访问!

5、自定义docker网络

网络模式

shell
bridge:桥接模式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了

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:ZYW

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 ™ 许可协议。转载请注明出处!