千家信息网

如何理解docker基础镜像和dockerfile

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,如何理解docker基础镜像和dockerfile ,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。制作基础镜像注意:需要在CentOS6
千家信息网最后更新 2025年12月02日如何理解docker基础镜像和dockerfile

如何理解docker基础镜像和dockerfile ,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

制作基础镜像

注意:需要在CentOS6下操作

准备工作

yum -y install febootstrap

下载ISO镜像文件到服务器

mkdir /mnt/centos6/

mount -o loopCentOS-6.8-x86_64-bin-DVD1.iso /mnt/centos6/

安装基础包

挑选包

febootstrap -i bash -i yum -i iputils -i iproute -i openssh-server -i gcc -i libgcc centos6 centos68file:///mnt/centos6/

(-i 安装package, centos6 操作系统版本,centos68安装目录,最后是源地址,必须是http://、ftp://、file://、https://、"")

febootstrap -i bash -i wget -i yum -i openssh-server -i iputils -i iproute -i gzip -i openssh-clients -i vim -i passwd -i vi -i curl -i sudo -i tar -i zip -i unzip -i dos2unix -i unix2dos -i net-tools -i initscripts -i telnet -i openssl -i gcc -i libtinfo -i libc -i libssh3 -i libsepol -i cmake -i ncurses-devel -i make -i libxml2-devel -i libxslt-devel -i pcre-devel -i libxml2 centos7 centos7 file:///mnt/centos7/


安装基本包:

febootstrap centos6 centos68 file:///mnt/centos6/

配置

cd centos68/

vim etc/resolv.conf

; generated by /sbin/dhclient-scriptnameserver 114.114.114.114nameserver 8.8.8.8


cp -rf /root/.bash_profile /root/.bashrc root/

vim root/.bashrc

# .bashrc# User specific aliases and functionsalias rm='rm -i'alias cp='cp -i'alias mv='mv -i'alias ll='ls -l'# Source global definitionsif [ -f /etc/bashrc ]; then    ./etc/bashrcfi


chroot ./

yum upgrade -y

如果不需要使用sshd服务,下面不需要配置

CentOS6 生成sshd的key:service sshd restart

CentOS7的话,从其他centos7机器上,把/etc/ssh/ssh_host_*拷贝过来,启动是执行/sbin/sshd -D

配置sshd

etc/ssh/sshd_conf修改

UseDNS no

cat etc/pam.d/sshd

#%PAM-1.0auth      required pam_sepermit.soauth      include      password-authaccount   required     pam_nologin.soaccount   include      password-authpassword  include      password-auth# pam_selinux.so close should be the firstsession rule#session   required     pam_selinux.so close#session   required     pam_loginuid.so# pam_selinux.so open should only befollowed by sessions to be executed in the user context#session   required     pam_selinux.so openenv_paramssession   optional     pam_keyinit.so forcerevokesession   include      password-auth


yum clean all

exit


更改时区为中国cp /usr/share/zoneinfo/Asia/Shanghai etc/localtime

echo > root/.viminfo

echo > root/.bash_history

压缩打包成tar.gz格式

tar --numeric-owner -zcvf /opt/centos6.tar.gz *

需要注意的是,文件打包支持的类型只有(.tar,.tar.gz, .tgz, .bzip, .tar.xz, or .txz)这几种。

导入到docker

注意:在docker机器上执行

dockerimport centos6.tar.gz centos6

编写Dockerfile

注意:在docker机器上执行

cd dockerfile/nginx

注意:下面的env、cgroup的影响范围仅限于在dockerfile中

from centos6:20170620maintainer lykopsenv PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/bin:/sbin/env PWD /root/add nginx.repo /etc/yum.repos.d/run yum install nginx -yrun echo /usr/sbin/nginx >>/etc/rc.localrun echo 'sleep 50000000000000000' >>/etc/rc.localcmd sh /etc/rc.local

命令不应该立即退出,否则造成容器关闭

生成image

docker build -t centos6:nginx .

docker create centos6:nginx

dockerfile基础知识

概念

Dockerfile来解决自动化部署的问题

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

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

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

基本命令

1、FROM

构建指令,指定基础image,后续的指令都依赖于该指令指定的image。

FROM 【:

2、MAINTAINER

构建指令,用于将image的制作者相关的信息写入到image中。

MAINTAINER

3、RUN

构建指令,RUN可以运行任何被基础image支持的命令。

RUN

RUN ["executable", "param1", "param2" ... ]

4、CMD

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

CMD ["executable","param1","param2"]

CMD command param1 param2

当Dockerfile指定了ENTRYPOINT,那么使用下面的格式:

CMD ["param1","param2"]

ENTRYPOINT指定的是一个可执行的脚本或者程序的路径,该指定的脚本或者程序将会以param1和param2作为参数执行。所以如果CMD指令使用上面的形式,那么Dockerfile中必须要有配套的ENTRYPOINT。

5、ENTRYPOINT

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

ENTRYPOINT["executable", "param1", "param2"]

ENTRYPOINTcommand param1 param2

该指令的使用分为两种情况,一种是独自使用,另一种和CMD指令配合使用。

当独自使用时,CMD指令和ENTRYPOINT会互相覆盖,只有最后一个CMD或者ENTRYPOINT有效。

CMD指令配合使用来指定ENTRYPOINT的默认参数,这时CMD指令不是一个完整的可执行命令,仅仅是参数部分;ENTRYPOINT指令只能使用JSON方式指定执行命令,而不能指定参数。

FROM ubuntu

CMD ["-l"]

ENTRYPOINT ["/usr/bin/ls"]

6、USER

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

USER daemon

7、EXPOSE

设置指令,该指令会将容器中的端口映射成宿主机器中的某个端口。当你需要访问容器时,可以不是用容器的IP地址而是使用宿主机器的IP地址和映射后的端口。要完成整个操作需要两个步骤,首先在Dockerfile使用EXPOSE设置需要映射的容器端口,然后在运行容器时指定-p选项加上EXPOSE设置的端口,这样EXPOSE设置的端口号会映射成宿主机器中的一个端口号。端口映射是docker比较重要的一个功能,原因在于每次运行容器时,容器的IP地址随机生成的。

8、ENV

构建指令,在image中设置一个环境变量。

ENV

设置了后,后续的RUN命令都可以使用,container启动后,可以通过docker inspect查看这个环境变量,也可以通过在docker run --env key=value时设置或修改环境变量。

假如你安装了JAVA程序,需要设置JAVA_HOME,那么可以在Dockerfile中这样写:

ENV JAVA_HOME /path/to/java/dirent

9、ADD

构建指令,所有拷贝到容器中的文件和文件夹权限为0755,uid和gid为0;如果是一个目录,会将该目录下的所有文件添加到容器中,不包括目录;如果文件是可识别的压缩格式,则docker会自动解压;如果是文件且中不使用斜杠结束,则会将视为文件,的内容会写入;如果是文件且中使用斜杠结束,则会文件拷贝到目录下。

10、VOLUME

设置指令。

VOLUME [""]

11、WORKDIR(切换目录)

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

WORKDIR /path/to/workdir

看完上述内容,你们掌握 如何理解docker基础镜像和dockerfile 的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

指令 容器 命令 文件 基础 程序 机器 目录 端口 参数 运行 镜像 地址 格式 脚本 支持 生成 内容 变量 只有 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 查询行程码显示服务器内部错误 2050年学校网络安全工作总结 软件开发企业怎么能保证安全 云服务器打不开防火墙 云南朝花夕拾互联网科技有限公司 技术环境网络安全 长城超云服务器发票 杭州在线内训软件开发 福州大学网络安全学院在哪 跃动数据网络技术公司 飞机不安全事件服务器 数据库提供服务的例子 软件数据库怎么复制粘贴 我是网络安全卫士的简笔画 手机网络安全软件工程师 流量卡打开显示无法连接服务器 轴流风机数据库 上海应用技术大学数据库考试 计算机网络技术导论第二版 怎样验证备份数据库是不是有效 软件开发创造性思维 数据库关系和普通表的区别 国家网络安全宣传周主题日分别是 广州服务器电源直销 互联网科技行业财务发展前景 网络安全日板报 达内互联网网络安全工程师学习 东华理工软件开发 德安网络安全 遵义网络安全系统怎么收费
0