dockerfile制作

简介:

一、Dockerfile 简介及书写规则 

Dockfile 是一种被Docker 程序解释的脚本,Dockerfile 由一条一条的指令组成,每条指令对应Linux 下面的一条命令。Docker 程序将这些Dockerfile 指令翻译真正的Linux 命令。Dockerfile 有自己书写格式和支持的命令,Docker 程序解决这些命令间的依赖关系,Docker 程序将读取Dockerfile,根据指令生成定制的image。

Dockerfile 的指令是忽略大小写的,建议使用大写,使用 # 作为注释,每一行只支持一条指令,每条指令可以携带多个参数。

Dockerfile 的指令根据作用可以分为两种,构建指令和设置指令。构建指令用于构建image,其指定的操作不会在运行image 的容器上执行;设置指令用于设置image 的属性, 其指定的操作将在运行image 的容器中执行

1、FROM(指定基础image) 构建指令

必须指定且需要在Dockerfile 其他指令的前面。后续的指令都依赖于该指令指定的image。FROM 指令指定的基础image 可以是官方远程仓库中的,也可以位于本地仓库。

格式:FROM 镜像 | FROM 镜像:tag

2、MAINTAINER(用来指定镜像创建者信息) 构建指令

用于将image 的制作者相关的信息写入到image 中。当我们对该image 执行docker inspect 命令时,输出中有相应的字段记录该信息。

3、RUN(安装软件用) 构建指令

RUN 可以运行任何被基础image 支持的命令。如基础image 选择了ubuntu, 那么软件管理部分只能使用ubuntu 的命令

4、CMD(设置container 启动时执行的操作) 设置指令

用于container(容器)启动时指定的操作。该操作可以是执行自定义脚本, 也可以是执行系统命令。该指令只能在文件中存在一次,如果有多个,则只执行最后一条

5、ENTRYPOINT(设置container 启动时执行的操作) 设置指令

指定容器启动时执行的命令,可以多次设置,但是只有最后一个有效

6、USER(设置container 容器的用户) 设置指令

设置启动容器的用户,默认是root 用户

7、EXPOSE(指定容器需要映射到宿主机器的端口)设置指令

该指令会将容器中的端口映射成宿主机器中的某个端口。

8、ENV(用于设置环境变量) 构建指令

在image 中设置一个环境变量

9、ADD(从src 复制文件到container 的dest 路径) 构建指令

所有拷贝到container 中的文件和文件夹权限为0755,uid 和gid 为0;如果是一个目录,那么会将该目录下的所有文件添加到container 中,不包括目录;如果文件是可识别的压缩格式,则docker 会帮忙解压缩(注意压缩格式);如果<src>是文件且<dest>中不使用斜杠结束,则会将<dest>视为文件,<src>的内容会写入<dest>;如果<src>是文件且<dest> 中使用斜杠结束,则会<src>文件拷贝到<dest>目录下。

10、VOLUME(指定挂载点)) 设置指令

使容器中的一个目录具有持久化存储数据的功能,该目录可以被容器本身使用,也可以共享给其他容器使用

11、WORKDIR(切换目录) 设置指令

可以多次切换(相当于cd 命令),对RUN,CMD,ENTRYPOINT 生效

12、ONBUILD(在子镜像中执行)

ONBUILD 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行

 二、使用Dockerfile 创建sshd 镜像模板

 导入镜像

[root@localhost ~]# cat centos-7-x86_64.tar.gz |docker import - centos:7

sha256:b19b83cf0649f2e4ed3819ba57c62745c53e537c498a117a3e5c6c033778e2da

[root@localhost ~]# docker images

REPOSITORY                  TAG                 IMAGE ID            CREATED              SIZE

centos                      7                   b19b83cf0649        About a minute ago   589.4 MB

[root@localhost ~]# mkdir sshd_dockerfile

[root@localhost ~]# cd sshd_dockerfile/

[root@localhost sshd_dockerfile]# vi run.sh

#!/bin/bash

/usr/sbin/sshd -D

[root@localhost sshd_dockerfile]# ssh-keygen -t rsa    //在宿主机上生成ssh 密钥对

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa): 回车

Created directory '/root/.ssh'.

Enter passphrase (empty for no passphrase): 回车

Enter same passphrase again:  回车

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

ab:04:76:36:a0:76:6a:d5:ad:a8:6e:ed:07:ca:96:01 root@localhost.localdomain

The key's randomart image is:

+--[ RSA 2048]----+

|                 |

|                 |

|    .            |

|E  . o .         |

| .o = = S        |

| ..=.= o .       |

| .o=..o .        |

| .*.....         |

| +o....          |

+-----------------+

[root@localhost sshd_dockerfile]# cat ~/.ssh/id_rsa.pub > ./authorized_keys

[root@localhost sshd_dockerfile]# pwd

/root/sshd_dockerfile

[root@localhost sshd_dockerfile]# vi Dockerfile

 FROM centos:7

MAINTAINER from abc@163.com      //设置基础镜像

#RUN yum -y instlal openssh-server    // 作者信息

RUN mkdir -p /var/run/sshd          // 安装ssh服务,此镜像已安装,可以注释掉

RUN mkdir -p /root/.ssh

RUN sed -ri 's/session required pan_loginuid.so/#session required pan_loginuid.so/g' /etc/pan.d/sshd

RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key

RUN  ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key

RUN  ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ""

ADD authorized_keys /root/.ssh/authorized_keys    //复制配置文件到相应位置

ADD run.sh /run.sh

RUN chmod 755 /run.sh   //保证有执行权限

EXPOSE 22              // 开放端口

CMD ["/run.sh"]         // 运行容器时执行的脚本

[root@localhost ~]# grep pam_loginuid.so /etc/pam.d/sshd //可以再打开一个终端,找到文件进行复制

session    required     pam_loginuid.so

 

[root@localhost sshd_dockerfile]# ls

authorized_keys  Dockerfile  run.sh

 

[root@localhost sshd_dockerfile]# docker build -t sshd:1 ./   //创建镜像,取名为sshd,tag 为1,以当前目录下的Dockerfile 为准

Sending build context to Docker daemon 4.096 kB

Step 1 : FROM centos:7

 ---> b19b83cf0649

Step 2 : MAINTAINER from abc@163.com

 ---> Using cache

 ---> d78926f7aa7a

Step 3 : RUN mkdir -p /var/run/sshd

 ---> Using cache

 ---> 57f134b7c800

Step 4 : RUN mkdir -p /root/.ssh

 ---> Using cache

 ---> 9c77b88dc36b

Step 5 : RUN sed -ri 's/session    required    pam_loginuid.so/#session    required    pam_loginuid.so/g' /etc/pam.d/sshd

 ---> Running in 537659b149a8

 ---> 07880e20fece

Removing intermediate container 537659b149a8

Step 6 : RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

 ---> Running in 87732838ce5a

Enter passphrase (empty for no passphrase): Enter same passphrase again: Generating public/private rsa key pair.

Your identification has been saved in /etc/ssh/ssh_host_rsa_key.

Your public key has been saved in /etc/ssh/ssh_host_rsa_key.pub.

The key fingerprint is:

0b:ef:a6:92:68:e2:3a:7a:fb:78:41:af:e3:c9:e0:6a root@537659b149a8

The key's randomart image is:

+--[ RSA 2048]----+

|                 |

|                 |

|                 |

|    .            |

|   . .. S        |

|    . .o .       |

|  .. +  o        |

|oE++*. ..        |

|OB+==o.o.        |

+-----------------+

 ---> 3e538a147e31

Removing intermediate container 87732838ce5a

Step 7 : RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key

 ---> Running in 5f19b0617a2f

Enter passphrase (empty for no passphrase): Enter same passphrase again: Generating public/private dsa key pair.

Your identification has been saved in /etc/ssh/ssh_host_dsa_key.

Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.

The key fingerprint is:

67:cb:e0:33:84:26:d0:9f:e3:0c:9d:7d:bf:43:d2:ac root@537659b149a8

The key's randomart image is:

+--[ DSA 1024]----+

|                 |

|   .             |

|  . .            |

|   . o =         |

|    o O S +o     |

|     * + *.o+    |

|      o + o+.    |

|         oE ..   |

|            ..   |

+-----------------+

 ---> 400b4f436b11

Removing intermediate container 5f19b0617a2f

Step 8 : ADD authorized_keys /root/.ssh/authorized_keys

 ---> f5d422a10648

Removing intermediate container d5d65efba938

Step 9 : ADD run.sh /run.sh

 ---> 59ded99a900d

Removing intermediate container 252405d68ebd

Step 10 : RUN chmod 755 /run.sh

 ---> Running in 8ebbf6f4bff4

 ---> 9dbbaaee5a5b

Removing intermediate container 8ebbf6f4bff4

Step 11 : EXPOSE 22

 ---> Running in d813e1d3a730

 ---> e96b802d43e8

Removing intermediate container d813e1d3a730

Step 12 : CMD /run.sh

 ---> Running in 36b6bdb72dcc

 ---> b84b454d5977

Removing intermediate container 36b6bdb72dcc

Successfully built b84b454d5977

[root@localhost sshd_dockerfile]# docker images

REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE

sshd                        1                   b84b454d5977        35 seconds ago      589.4 MB

centos                      7                   b19b83cf0649        30 minutes ago      589.4 MB

[root@localhost sshd_dockerfile]# docker run -d -p 2222:22 sshd:1

824413feb77f3e7858525b86e0783e1b2d426ac0f854ef4bf27bdd8a70b66a13

[root@localhost sshd_dockerfile]# docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES

824413feb77f        sshd:1              "/run.sh"           11 seconds ago      Up 9 seconds        0.0.0.0:2222->22/tcp   evil_meninsky

[root@localhost ~]# ssh 192.168.20.2 -p 2222

The authenticity of host '[192.168.20.2]:2222 ([192.168.20.2]:2222)' can't be established.

RSA key fingerprint is 0b:ef:a6:92:68:e2:3a:7a:fb:78:41:af:e3:c9:e0:6a.

Are you sure you want to continue connecting (yes/no)? Yes   //首次需要确认连接

Warning: Permanently added '[192.168.20.2]:2222' (RSA) to the list of known hosts.

[root@824413feb77f ~]# ss -anpt |grep 22   //ss 命令,类似于centos6 系的netstat 命令

LISTEN     0      128          *:22                       *:*                   users:(("sshd",pid=5,fd=3))

ESTAB      0      0      172.17.0.2:22                 192.168.20.2:39775               users:(("sshd",pid=6,fd=3))

LISTEN     0      128         :::22                      :::*                   users:(("sshd",pid=5,fd=4))

[root@824413feb77f ~]# 登出   //按ctrl+d 退出

Connection to 192.168.20.2 closed.

使用Dockerfile 制作的sshd 镜像模板以完成,生成镜像,上传至仓库或保存下来,供日后使用,此处采用docker save 方法导出到本地

[root@localhost ~]# docker save -o centos7_sshd.tar sshd:1

[root@localhost ~]# ls

anaconda-ks.cfg  centos7_sshd.tar        centos-aaa.tar  mysql5.tar  sshd_dockerfile

backup.tar       centos-7-x86_64.tar.gz  centos.tar      nginx.tar   tomcat.tar

[root@localhost ~]# ls centos7_sshd.tar

centos7_sshd.tar

[root@localhost ~]#

其他的镜像模板与以上相同,不同的是Dockerfile 以及run.sh,根据镜像的系统与要做的服务镜像里的服务,编写不同的配置Dockerfile 和run.sh






      本文转自Mr_chen  51CTO博客,原文链接:http://blog.51cto.com/metis/1945272 ,如需转载请自行联系原作者



相关文章
|
前端开发 API 开发工具
批量提取某音文案
本文介绍了批量提取文案的思路, 以及操作过程中的问题的处理方法, 并给了详细的参考代码, 以及对应的文档.
666 0
|
7天前
|
人工智能 自然语言处理 JavaScript
2026年Windows+Ollama本地部署OpenClaw保姆级教程:本地AI Agent+阿里云上快速搭建
2026年OpenClaw凭借本地部署、私有化运行的特性,成为打造个人智能体的核心工具,而Ollama作为轻量级本地大模型管理工具,能让OpenClaw摆脱对云端大模型的依赖,实现**本地推理、数据不泄露、全流程私有化**的智能体验。本文基于Windows 11系统,从硬件环境准备、Ollama安装与模型定制、OpenClaw部署配置、技能扩展到常见问题排查,打造保姆级本地部署教程,同时补充阿里云OpenClaw(Clawdbot)快速部署步骤,兼顾本地私有化需求与云端7×24小时运行需求,文中所有代码命令均可直接复制执行,确保零基础用户也能快速搭建属于自己的本地智能体。
8573 68
|
4天前
|
人工智能 安全 API
CoPaw:5分钟部署你的 AI助理
源自阿里巴巴开源生态的个人 AI 助理——CoPaw。作为阿里倾力打造的开源力作,CoPaw 完美打通钉钉、飞书、Discord 等多平台对话通道,支持定时任务自动化。内置 PDF/Office 深度处理、新闻摘要等强大技能,更开放自定义扩展接口。坚持数据全程私有化部署,绝不上传云端,让每一位用户都能在大厂技术加持下,拥有安全、专属的智能助手。
|
6天前
|
人工智能 自然语言处理 机器人
保姆级教程:Mac本地搭建OpenClaw及阿里云上1分钟部署OpenClaw+飞书集成实战指南
OpenClaw(曾用名Clawdbot、Moltbot)作为2026年最热门的开源个人AI助手平台,以“自然语言驱动自动化”为核心,支持对接飞书、Telegram等主流通讯工具,可替代人工完成文件操作、日历管理、邮件处理等重复性工作。其模块化架构适配多系统环境,既可以在Mac上本地化部署打造私人助手,也能通过阿里云实现7×24小时稳定运行,完美兼顾隐私性与便捷性。
4007 7
|
5天前
|
人工智能 安全 JavaScript
阿里云上+本地部署OpenClaw(小龙虾)新手攻略:解锁10大必备Skills,零基础也能玩转AI助手
2026年,开源AI代理工具OpenClaw(昵称“小龙虾”)凭借“能实际做事”的核心优势,在GitHub斩获25万+星标,成为现象级AI工具。它最强大的魅力在于可扩展的Skills(技能包)系统——通过ClawHub插件市场的数百个技能,能让AI助手从简单聊天升级为处理办公、学习、日常事务的全能帮手。
3796 8
|
8天前
|
人工智能 JSON JavaScript
手把手教你用 OpenClaw + 飞书,打造专属 AI 机器人
手把手教你用 OpenClaw(v2026.2.22-2)+ 飞书,10分钟零代码搭建专属AI机器人!内置飞书插件,无需额外安装;支持Claude等主流模型,命令行一键配置。告别复杂开发,像聊同事一样自然对话。
4427 13
手把手教你用 OpenClaw + 飞书,打造专属 AI 机器人
|
7天前
|
人工智能 监控 机器人
2026年零门槛部署 OpenClaw(Clawdbot)接入A股数据,实现24小时股票分析保姆级教程
在AI赋能金融分析的浪潮中,OpenClaw(原Clawdbot/Moltbot)凭借开源灵活的架构,成为个人投资者打造专属智能分析助手的首选。通过接入A股实时数据,它能实现24小时市场监控、涨跌预警、潜力股推荐等核心功能,彻底解放人工盯盘的繁琐。而阿里云的稳定部署环境,更让这套系统实现全天候不间断运行,成为真正的“金融AI助手”。 本文基于OpenClaw v2026.1.25稳定版与QVeris免费A股数据接口,详细拆解阿里云OpenClaw部署步骤、A股数据接入流程、高级分析功能配置及多平台联动技巧,所有代码命令均可直接复制复用,即使无技术基础也能在1小时内完成从部署到实战的全流程。
3192 11