🤖
BOKE
  • 😇一个博客
  • Group 1
    • 🚗ALL
      • 😁一文搞懂Yum命令:红帽系的包管理器
      • 😆到底什么是云计算
      • 😅反弹Shell大全与原理
      • 😂SHELL基础
      • 🤣iptables
      • ☺️阿里云YUM源
      • 😉CentOS系统版本升级
      • 🥲bat笔记
      • 😍ELK
      • 🥰黑马k8s
      • 😋supervisor
      • 🤨Bash 中的 ${} 和 $() 有什么区别
      • 🧐ansible+playbook
      • 👍给ELK的kibana设置密码
      • 😁prometheus
      • 😃Linux或Windows上实现端口映射
      • 😄shell脚本大全
      • 🤪linux修改网卡名
      • 😆Openvpn问题导致我掉了三根头发
      • 😅Iptables实现阿里云NAT网关效果
    • 🚕docker
      • 😇docker搭建MySQL主从
      • 😊docker命令
      • 🙂docker文件分层与数据挂载
      • 🙃dockerfile
      • 😘B站狂神-docker
    • 🚙DevOps
      • 😌DevOps(Git+Jenkins)
      • 😛python配置git
由 GitBook 提供支持
在本页
  • 1、dockerfile流程
  • 2、dockerfile打包命令
  • 3、dockerfile内部命令
  • 查看dockerfile运行历史
  • 4、docker网络
  • ——link
  • 5、自定义docker网络

这有帮助吗?

  1. Group 1
  2. docker

dockerfile

上一页docker文件分层与数据挂载下一页B站狂神-docker

这有帮助吗?

1、dockerfile流程

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

image-20220614193028059

2、dockerfile打包命令

#编写好dockerfile文件之后要把这个dockerfile打包成镜像  命令是
docker build -f dockerfile -t 镜像名:版本 .		#结尾的那个.指的是当前路径下 

#还有一种方法
docker build -t 镜像名:版本号 /root/Dockerfile/   #这样写的话dockerfile文件名必须是Dockerfile

#这两种方法的区别是:
#第一种是使用-f指定文件名 路径必须是当前目录下,但是dockerfile文件名可以随意起
#第二种是可以在任意路径下运行,但是路径下的dockerfile文件名必须叫“Dockerfile”

3、dockerfile内部命令

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

CMD 和ENTRYPOINT区别

CMD         # 指定这个容器启动的时候要运行的命令,只有最后一个会生效可被替代
ENTRYPOINT      # 指定这个容器启动的时候要运行的命令, 可以追加命令

VOLUME用法:
#VOLUME ["/data","/usr/local/nginx/html"]
  1. 编写Dockerfile文件,官方命名Dockerfile, build会自动寻找这个文件,就不需要-f指定了!

[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运行历史

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容器之间是可以通信的

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

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

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

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

——link

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网络

网络模式

bridge:桥接模式docker0(默认网络模式)
none:不配置网络
host:和宿主机共享网络
container:容器网络连通!(用的少,局限很大)

测试

# 我们直接启动的命令默认有一个 --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了

image-20220615162027687
image-20220615163746720
🚕
🙃