镜像简介:

  docker镜像基于union file system将多个目录合并挂载至一个目录给容器使用。

docker镜像只有rootfs而没有内核、运行使用的是宿主机的bootfs。

   rootfs(root file system),文件系统

   bootfs(boot file system),主要包含 bootloader 和 Kernel

一个镜像是有一层或者多层合并而成,每一层称为是一个layer。

镜像可以基于其它镜像进行重新构建,被引用的镜像称为父镜像。

一个镜像可以同时被创建为多个容器。

镜像是只读的,在容器的任何更改都不会直接修改镜像。

FROM centos:7.9.2009

#在整个dockfile文件中除了注释之外的第一行,要是FROM指令,FROM 指令用于指定当前镜像(base image)引用的父镜像(parent image)

MAINTAINER #(镜像的维护者信息,目前已经不推荐使用)

LABEL “key”=“value” #设置镜像的属性标签

LABEL author=”jack jack@gmail.com”

LABEL version=”1.0″

ADD [–chown=<user>:<group>] <src>… <dest>

#用于添加宿主机本地的文件、目录、压缩等资源到镜像里面去,会自动解压tar.gz格式的压缩包,但不会自动解压zip包

ADD –chown=root:root test /opt/test

COPY COPY [–chown=<user>:<group>] <src>… <dest>

#用于添加宿主机本地的文件、目录、压缩等资源到镜像里面去,不会解压任何压缩包

ENV MY_NAME=”John Doe” #设置容器环境变量

USER <user>[:<group>] or USER <UID>[:<GID>] #指定运行操作的用户

RUN yum install vim unzip -y && cd /etc/nginx #执行shell命令,但是一定要以非交互式的方式执行

VOLUME [“/data/data1″,”/data/data2”] #定义volume

WORKDIR /data/data1 #用于定义当前工作目录

EXPOSE <port> [<port>/<protocol>…]

#声明要把容器的某些端口映射到宿主机

CMD 和 ENTRYPOINT:

CMD有以上三种方式定义容器启动时所默认执行的命令或脚本

CMD [“executable”,”param1″,”param2″] (exec form, this is the preferred form) #推荐的可执行程序方式

CMD [“param1″,”param2”] (as default parameters to ENTRYPOINT) #作为ENTRYPOINT默认参数

CMD command param1 param2 (shell form) #基于shell命令的

 如:基于CMD #镜像启动为一个容器时候的默认命令或脚本,

• CMD [“/bin/bash”]

 ENTRYPOINT #也可以用于定义容器在启动时候默认执行的命令或者脚本,如果是和CMD命令混合使用的时候,会将CMD的命令当做参数传递给

ENTRYPOINT后面的脚本,可以在脚本中对参数做判断并相应的容器初始化操作。

 案例1:

ENTRYPOINT [“top”,”-b”]

CMD [“-c”]

等于如下一行:

ENTRYPOINT [“top”,”-b”,”-c”]

 案例2:

ENTRYPOINT [“docker-entrypoint.sh”] #定义一个入口点脚本,并传递mysqld 参数

CMD [“mysqld”]

等于如下一行:

ENTRYPOINT [“docker-entrypoint.sh”,”mysqld”]

 使用总结:

ENTRYPOINT(脚本) + CMD(当做参数传递给ENTRYPOINT)

例一: 基于ubuntu 构建Nginx镜像

Dockerfile  docker-entrypoint.sh  frontend.tar.gz  nginx-1.22.1.tar.gz  nginx.conf  sources.list

root@docker-server1:/usr/local/src/dockerfile/nginx-ubuntu# cat Dockerfile

FROM ubuntu:22.04

#ADD sources.list /etc/apt/sources.list

RUN apt update && apt  install -y iproute2  ntpdate  tcpdump telnet traceroute nfs-kernel-server nfs-common  lrzsz tree  openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev ntpdate tcpdump telnet traceroute  gcc openssh-server lrzsz tree  openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev ntpdate tcpdump telnet traceroute iotop unzip zip make

ADD nginx-1.22.1.tar.gz /usr/local/src/

RUN cd /usr/local/src/nginx-1.22.1 && ./configure –prefix=/apps/nginx && make && make install  && ln -sv /apps/nginx/sbin/nginx /usr/bin

RUN groupadd  -g 2088 nginx && useradd  -g nginx -s /usr/sbin/nologin -u 2088 nginx && chown -R nginx.nginx /apps/nginx

ADD nginx.conf /apps/nginx/conf/

ADD frontend.tar.gz /apps/nginx/html/

EXPOSE 80 443

#ENTRYPOINT [“nginx”]

#CMD [“/apps/nginx/sbin/nginx”,”-g”,”daemon off;”]

##

#ENTRYPOINT [“/apps/nginx/sbin/nginx”,”-g”,”daemon off;”]

##

#ENTRYPOINT [“/apps/nginx/sbin/nginx”]

#CMD [“-g”,”daemon off;”]

##

COPY docker-entrypoint.sh /docker-entrypoint.sh

RUN chmod a+x /docker-entrypoint.sh

ENTRYPOINT [“/docker-entrypoint.sh”]

root@docker-server1:/usr/local/src/dockerfile/nginx-ubuntu# cat docker-entrypoint.sh

#!/bin/bash

/apps/nginx/sbin/nginx  -g “daemon off;”

root@docker-server1:/usr/local/src/dockerfile/nginx-ubuntu# cat nginx.conf

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

upstream tomcat {

  server 192.168.106.131:8080;

  server 192.168.106.132:8080;

}

    server {

        listen       80;

        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {

            root   html;

            index  index.html index.htm;

        }

        location /myapp {

           proxy_pass http://tomcat;

        }

        

docker build -t  harbor.xxx.com/nginx:v1 .

业务规划及镜像分层构建:

系统base 镜像构建  system-base

Nginx 基础镜像构建 nginx-base

Nginx业务镜像构建  nginx-web1

在kubernetes业务测试环境运行nginx容器并测试

在kubernetes业务生产环境运行nginx容器并测试

nginx-ubuntu 完整镜像

system-base–>nginx-base–>nginx-web1  分层构建

root@docker-server1:/usr/local/src/dockerfile# tree -L 3

.

├── nginx-base

│   ├── Dockerfile

│   └── nginx-1.22.1.tar.gz

├── nginx-ubuntu

│   ├── Dockerfile

│   ├── docker-entrypoint.sh

│   ├── frontend.tar.gz

│   ├── nginx-1.22.1.tar.gz

│   ├── nginx.conf

│   └── sources.list

├── nginx-web1

│   ├── Dockerfile

│   ├── build-command.sh

│   ├── frontend.tar.gz

│   └── nginx.conf

├── system-base

│   └── Dockerfile

原文地址:http://www.cnblogs.com/pang-lu/p/16929534.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性