通过对总体原理了解后,我们来做下具体应用布署的实践。

  • 通过yaml创建pod

apiVersion: v1
kind: Pod
metadata:
  name: mytomcat
  labels:
    app: tomcat_label ----可以作为service找到它的标志
spec:
  containers:
    - name: tomcat
      image: dualvenregistry:5000/tomcat:v1
      ports:
        - containerPort: 8080

  • 通过yaml创建Service

apiVersion: v1
kind: Service
metadata:
  name: mytomcat-service
spec:
  ports:
  - port : 8081
    nodePort : 8888
    targetPort: 8080
    protocol: TCP
  selector:
    app: tomcat_label
  type: NodePort

  • port ,nodePort ,targetPort, containerPort

docker中的应用port,就是containerPort;

docker中通过 -P暴露出-expose里设定的端口,就会让它原封不动暴露出来;-p就可以手动指派。最后暴露出来的端口就是targetPort.

而service用于集群里服务的内访问端口,port.

最后,如果要独立暴露出来访问,就是nodePort

  • docker网络知识

安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host

host:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

Container:创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。

None:该模式关闭了容器的网络功能。

Bridge:此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。

  • dockerfile里的几个命令

RUN 指令通常用于安装应用和软件包。

RUN 在当前镜像的顶部执行命令,并通过创建新的镜像层。Dockerfile 中常常包含多个 RUN 指令。

RUN 有两种格式:

  1. Shell 格式:RUN

  2. Exec 格式:RUN ["executable", "param1", "param2"

CMD

CMD 指令允许用户指定容器的默认执行的命令。

此命令会在容器启动且 docker run 没有指定其他命令时运行。

如果 docker run 指定了其他命令,CMD 指定的默认命令将被忽略

如果 Dockerfile 中有多个 CMD 指令,只有最后一个 CMD 有效

  1. Exec 格式:CMD ["executable","param1","param2"]
    这是 CMD 的推荐格式。

  2. CMD ["param1","param2"] 为 ENTRYPOINT 提供额外的参数,此时 ENTRYPOINT 必须使用 Exec 格式

  3. Shell 格式:CMD command param1 param2

ENTRYPOINT 指令可让容器以应用程序或者服务的形式运行。

ENTRYPOINT 看上去与 CMD 很像,它们都可以指定要执行的命令及其参数。不同的地方在于 ENTRYPOINT 不会被忽略,一定会被执行,即使运行 docker run 时指定了其他命令

ENTRYPOINT 有两种格式:

  1. Exec 格式:ENTRYPOINT ["executable", "param1", "param2"] 这是 ENTRYPOINT 的推荐格式。

  2. Shell 格式:ENTRYPOINT command param1 param2

在为 ENTRYPOINT 选择格式时必须小心,因为这两种格式的效果差别很大。

/mydata/storage_data/storage001:/fastdfs/store_path --net=host -e TRACKER_SERVER=127.0.0.1:22122 season/fastdfs storage

这里面注意-e 传递参数进入到entrypoint.sh里可以使用;storage也只是作为entrypoint接收到的参数使用。

  • 对已经生成的docker进行运行参数的修改

必须先systemctl stop docker(不然你即使修改了下述,也会被系统改回来)

然后更改/var/lib/docker/container/******/config****.or host***

systemctl start docker 

 docker start tracker

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐