kubernetes基础之docker file文件详解(百分之百空手接白刃篇)
  zZHnZavbRDNq 2023年11月02日 36 0


docker file让你有意想不到的收获

针对这个docker file自己也是找了好久,想着怎么可以用自己的话,讲出来。当你学习一个东西的时候,不是因为你学会了他就过,而是你还要试着给别人讲出来,这样你才算真的懂了。

首先让我们来了解一下什么是dockerfile?

kubernetes基础之docker file文件详解(百分之百空手接白刃篇)_centos

其次就是让我们来好好的heppy一下这个所谓的docker file

  • Dockerfile文件说明

kubernetes基础之docker file文件详解(百分之百空手接白刃篇)_centos_02

dockerfile构建镜像的思路

这里以构建一个nginx镜像为列


kubernetes基础之docker file文件详解(百分之百空手接白刃篇)_docker_03




  • (1)上传nginx包,并解压,这个用add命令最好,因为add命令本身带有解压功能
  • (2)通过yum升级一下或者安装一下nginx服务的依赖服务
  • (3)到nginx压缩包目录下
  • (4)开始进行–config && make && make install编译
  • (5)复制nginx.conf配置文件到指定目录下面,这个用copy就可以了
  • (6)复制网站首页或者网站数据到指定目录下面,这个看情况所定,用add或者copy,看实际需要
  • (7)删除无用的包,为镜像减负
  • (8) 启动nginx,配合deam off命令,让他从后台变成在前台一直运行,写到cmd命令里面
  • 完成
展示一些常用的指令。

常用命令

在file中的作用

FROM

指定基础镜像

MAINTAINER

维护者信息

RUN

构建镜像时执行的命令

ADD

将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget

COPY

功能类似ADD,但是是不会自动解压文件,也不能访问网络资源

CMD

构建容器后调用,也就是在容器启动时才进行调用

ENTRYPOINT

配置容器,使其可执行化。配合CMD可省去"application"

LABEL

用于为镜像添加元数据

ENV

设置环境变量

EXPOSE

指定于外界交互的端口

VOLUME

用于指定持久化目录

WORKDIR

工作目录,类似于cd命令

USER

指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户

ARG

用于指定传递给构建运行时的变量

ONBUILD

用于设置镜像触发器

图显的方式理解

kubernetes基础之docker file文件详解(百分之百空手接白刃篇)_docker_04

直接上docler file文件解释

[root@localhost ~]# cat Dockerfile 

# This my first nginx Dockerfile
# Version 1.0

# 告诉dockerfile我的基础镜像是谁
FROM centos

#MAINTAINER 维护者信息
MAINTAINER shiliandenanhai 

#ENV 设置环境变量     告诉dockerfile,我所需要的命令在哪里去找,如果你不写这个的话,那下面启动nginx命令一定要是绝对路径
ENV PATH /usr/local/nginx/sbin:$PATH

#ADD  文件放在当前目录下,拷过去会自动解压
ADD nginx-1.16.1.tar.gz /usr/local/  

#RUN 执行以下命令 
RUN rm -rf /usr/local/nginx-1.16.1.tar.gz
RUN yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel && yum clean all
RUN useradd -s /sbin/nologin -M www

#WORKDIR 相当于cd
WORKDIR /usr/local/nginx-1.16.1 
RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
WORKDIR /usr/local/nginx/

##修改下nginx的配置文件
RUN grep -Ev "#|^$" ./conf/nginx.conf.default > ./conf/nginx.conf 

#EXPOSE 映射端口
EXPOSE 80

#CMD 运行以下命令,配合daemon off让nginx保持一致在前台运行
CMD ["./sbin/nginx","-g", "daemon off;"]

具体实操过程

[root@localhost ~]# docker image  rm nginx nginx:v1    #清理所有镜像
Untagged: nginx:latest
Untagged: nginx@sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aa
Deleted: sha256:f6d0b4767a6c466c178bf718f99bea0d3742b26679081e52dbf8e0c7c4c42d74
Deleted: sha256:4dfe71c4470c5920135f00af483556b09911b72547113512d36dc29bfc5f7445
Deleted: sha256:3c90a0917c79b758d74b7040f62d17a7680cd14077f734330b1994a2985283b8
Deleted: sha256:a1c538085c6f891424160d8db120ea093d4dda393e94cd4713e3fff3c82299b5
Deleted: sha256:a3ee2510dcf02c980d7aff635909612006fd1662084d6225e52e769b984abeb5
Deleted: sha256:cb42413394c4059335228c137fe884ff3ab8946a014014309676c25e3ac86864
Untagged: nginx:v1
Deleted: sha256:b9ffb514da6132b9e0c65112148f73e8528182f7f24027bf27d481113857861e
Deleted: sha256:8f6cb55ae698dfc2dc74577775f1bcbed1d48f72213bb6097207631cce9db58a

[root@localhost ~]# docker images   #当前没有任何的镜像
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

[root@localhost ~]# docker pull centos    #拉取一个centos镜像,这个将作为基础镜像
Using default tag: latest
latest: Pulling from library/centos
7a0437f04f83: Pull complete 
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

[root@localhost ~]# docker images    #可以看到基础镜像已经成功的下载了下来
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
centos       latest    300e315adb2f   2 months ago   209MB

[root@localhost ~]# ls   #准备好所需要的nginx源码包
  nginx-1.16.1.tar.gz 

[root@localhost ~]# vim Dockerfile    #编辑Dockerfile文件
[root@localhost ~]# cat Dockerfile   #文件内容如下
# This my first nginx Dockerfile
# Version 1.0

# Base images 基础镜像
FROM centos

#MAINTAINER 维护者信息
MAINTAINER shiliandenanhai 

#ENV 设置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH

#ADD  文件放在当前目录下,拷过去会自动解压
ADD nginx-1.16.1.tar.gz /usr/local/  
RUN rm -rf /usr/local/nginx-1.16.1.tar.gz
#RUN 执行以下命令 
RUN yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel && yum clean all
RUN useradd -s /sbin/nologin -M www

#WORKDIR 相当于cd
WORKDIR /usr/local/nginx-1.16.1 

RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install

WORKDIR /usr/local/nginx/

RUN grep -Ev "#|^$" ./conf/nginx.conf.default > ./conf/nginx.conf 

#EXPOSE 映射端口
EXPOSE 80

#CMD 运行以下命令
CMD ["./sbin/nginx","-g", "daemon off;"]

[root@localhost ~]# docker build -f /root/Dockerfile -t nginx:v1 .
Sending build context to Docker daemon  1.056MB
Step 1/13 : FROM centos
 ---> 300e315adb2f
Step 2/13 : MAINTAINER shiliandenanhai
 ---> Running in 66377b50ad24
Removing intermediate container 66377b50ad24
 ---> 244019a1688b
Step 3/13 : ENV PATH /usr/local/nginx/sbin:$PATH
 ---> Running in d01283ba67d7
Removing intermediate container d01283ba67d7
 ---> 55ae3fb8da5f
Step 4/13 : ADD nginx-1.16.1.tar.gz /usr/local/
 ---> 530750c97404
Step 5/13 : RUN rm -rf /usr/local/nginx-1.16.1.tar.gz
 ---> Running in 3b1c8bf4669b
Removing intermediate container 3b1c8bf4669b
 ---> 9a0f1ea4fce2
Step 6/13 : RUN yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel && yum clean all
 ---> Running in 4f695646faa1


******************中间省略***********************************

make[1]: Leaving directory '/usr/local/nginx-1.16.1'
Removing intermediate container 20890ab983e6
 ---> 8024bd8e38b1
Step 10/13 : WORKDIR /usr/local/nginx/
 ---> Running in edfe0deeb339
Removing intermediate container edfe0deeb339
 ---> 73b4bb58fbe8
Step 11/13 : RUN grep -Ev "#|^$" ./conf/nginx.conf.default > ./conf/nginx.conf
 ---> Running in 71655f47453a
Removing intermediate container 71655f47453a
 ---> 34750e236d24
Step 12/13 : EXPOSE 80
 ---> Running in 37e8e74ef282
Removing intermediate container 37e8e74ef282
 ---> 489af6bd5f9c
Step 13/13 : CMD ["./sbin/nginx","-g", "daemon off;"]
 ---> Running in 44bc8597b533
Removing intermediate container 44bc8597b533
 ---> be73a882a030
Successfully built be73a882a030
Successfully tagged nginx:v1    #表示成功创建nginx:v1镜像

[root@localhost ~]# docker images   #查看当前所有镜像,能看到我们所创建的镜像
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
nginx        v1        be73a882a030   50 seconds ago   415MB
centos       latest    300e315adb2f   2 months ago     209MB

[root@localhost ~]# docker run -d --name=web1 nginx:v1   #用刚刚创建的镜像创建一个容器
d815c3553a4978c2e54cca7c5e9dc65b357201954412812003764c53f1a0ca88

[root@localhost ~]# docker ps -a   #查看容器状态是up状态,没有问题
CONTAINER ID   IMAGE      COMMAND                  CREATED          STATUS          PORTS     NAMES
d815c3553a49   nginx:v1   "./sbin/nginx -g 'da…"   16 seconds ago   Up 15 seconds   80/tcp    web1

[root@localhost ~]# docker inspect web1 | grep -i ipadd  #获取容器ip
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",

[root@localhost ~]# curl 172.17.0.2    #访问容器ip,nginx可以正常的访问,ok
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

结束语

坚持加自信是成功最好的钥匙


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
zZHnZavbRDNq