Docker制作镜像
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,Docker制作镜像本章结构Docker镜像的分层Dockerfile基本创建方法Dockerfile创建各种应用容器Docker镜像的分层Dockerfile中的每个指令都会创建一个新的镜像层镜像层
千家信息网最后更新 2025年12月01日Docker制作镜像
Docker制作镜像
本章结构
- Docker镜像的分层
- Dockerfile基本创建方法
- Dockerfile创建各种应用容器
Docker镜像的分层
Dockerfile中的每个指令都会创建一个新的镜像层
镜像层将被缓存和复用
当Dockerfile的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像缓存就会失效
某一层的镜像缓存失效之后,它的镜像层缓存都会失效
镜像层是不可变的,如果在某一层中添加一个文件,然后在下一层中删除它,则镜像中依然会包含该文件
Docker镜像的创建
Docker镜像
- 是应用发布的标准格式
- 可支撑一个Docker容器的运行
Docker镜像的创建方法
- 基于已有镜像创建
- 基于本地模板创建
- 基于Dockerfile创建
基于已有镜像创建
将容器里面运行的程序及运行环境打包生成新的镜像
docker create -it centos /bin/bashdocker commit -m "new" -a "daoke" a19597abf62d daoke:centos- -m:说明信息
- -a:作者信息
- -p:生成过程中停止容器的运行
基于本地模板创建
通过导入操作系统模板文件生成新的镜像
使用wget命令导入为本地镜像
wget http://123.56.134.27/pub/package/LAMP-C7/nginx-1.12.0.tar.gzcat nginx-1.12.0.tar.gz | docker import - docker:new导入成功后可查看本地镜像信息
docker images | grep new基于Dockerfile创建
Dockerfile是由一组指令组成的文件
Dockerfile结果四部分
- 基础影响信息
- 维护者信息
- 镜像操作指令
- 容器启动时执行指令
使用Dockerfile创建镜像并在容器中运行
指令 含义 FROM镜像 指定新镜像所基于的镜像,第一条指令必须为FROM指令,每创建一个镜像就需要FFROM指令。 MAINTAINER 名字 说明新镜像的维护人信息 RUN命令 在所基于的镜像上执行命令,并提交到新的镜像中 CMD[ "要运行的程序","参数1,"参数2 "] 指令启动容器时要运行的命令或者脚本,Dockerfile只能有一条CMD命令,如果指定多条则只能最后f被执行 EXPOSE 端口号 指定新镜像加载到Docker时要开启的端口 ENV环境变量变量值 设置一个环境变量的值,会被后面的RUN使用 ADD源文件/目录目标文件/目录 将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,或者是f URL COPY源文件/目录目标文件/目录 将本地主机上的文件/目录复制到目标地点,源文件/目录要与DGckerfile在相同的目录中 VOLUME ["目录"] 在容器中创建一个挂载点 USER用户名/UID 指定运行容器时的用户 WORKDIR 路径 为后续的RUN、CMD、ENTRYPOINT指定工作目录 ONBUILD 命令 指定所生成的镜像作为一个基础镜像时所要运行的命令 HEALTHCHECK 健康检查
Dockerfile创建各种应用容器
Dockerfile创建apache镜像容器
mkdir apachecd apache/vim Dockerfile#基于的基础镜像FROM centos#维护镜像的用户信息MAINTAINER The project #镜像操作指令安装apache软件RUN yum -y update //更新yum仓库RUN yum -y install httpd#开启80端口EXPOSE 80#复制网站首页文件ADD index.html /var/www/html/index.html#将执行脚本复制到镜像中ADD run.sh /run.shRUN chmod 755 /run.sh#启动容器时执行脚本CMD ["/run.sh"][root@localhost opt]# vim run.sh#!/bin/bashrm -rf /run/httpd/*exec /usr/sbin/apachectl -D FOREGROUNDecho "this is web" index.html//生成镜像docker build -t httpd:centos .//新镜像运行容器docker run -d -p 1216:80 httpd:centos Dockerfile创建ssh镜像容器
mkdir sshdcd sshd/vim Dockerfile#基于的基础镜像FROM centos#维护镜像的用户信息MAINTAINER this is project #重新加载yum源RUN yum -y update#安装必要软件包RUN yum -y install openssh* net-tools lsof telnet passwd#为root用户设置密码RUN echo '123456' | passwd --stdin root#修改配置文件RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config#生成秘钥RUN ssh-keygen -t rsa -f /etc/ssh/sshd_host_rsa_keyRUN sed -i '/^scssion\s\+required\s\+pam_loginuid.so/s/^/#/' /etc/pam.d/sshdRUN mkdir -P /root/.ssh && chown root.root /root && chmod 700 /root/.ssh#开启20端口EXPOSE 22#启动容器CMD ["/usr/sbin/sshd","-D"]//生成镜像docker build -t sshd:new .//启动容器并修改root密码docker run -d -P sshd:newssh localhost -p 32770 Dockerfile基于sshd镜像容器创建systemctl镜像容器
mkdir systemctl cd systemctl vim Dockerfile#基于的基础镜像FROM sshd:newENV container dockerRUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \systemd-tmpfile-setup.service ] || rm -f $i; done); \rm -f /lib/systemd/system/multi-user.target.wants/*; \rm -f /etc/systemd/system/*.wants/*; \rm -f /lib/systemd/system/local-fs.target.wants/*; \rm -f /lib/systemd/system/sockets.target.wants/*udev*; \rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \rm -f /lib/systemd/system/basic.target.wants/*; \rm -f /lib/systemd/system/anaconda.target.wants/*;VOLUME [ "/sys/fs/cgroup" ]CMD ["/usr/sbin/init"]//生成镜像docker build -t local/c7-systemd:latest .//privileged container内的root拥有真正的root权限。否责,container内的root只是外部的一个普通用户权限docker run --privileged -ti -v /sys/fs/cgroup:sys/fs/cgroup:ro local/c7-systemd:latest /sbin/init//进入容器 docker exec -it 镜像IP bash
镜像
容器
指令
文件
目录
运行
信息
生成
命令
用户
基础
源文件
目标
缓存
变量
模板
环境
端口
脚本
应用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全与信息化测评考试
游戏软件开发的工具
连云港江苏服务器服务商云主机
绍兴软件开发平台
米猪网络技术有限公司
智能软件开发专业大学排名
金山区网络技术服务是什么
光庭信息嵌入式软件开发
购买服务器怎么做分录
桂阳学it软件开发学费
软件开发中的功能如何计费
三个以上常用的数据库
php本地数据库怎么打开
多层从属关系数据库如何设计
南昌机器人rpa软件开发公司
市局检查机关网络安全
湖北挑水郎网络技术有限公司
vs2013数据库编程
安徽现代软件开发工业
中望无法建立与许可证服务器连接
河北省软件开发费用测算
互联网经济与金融科技
江苏安卓软件开发大概多少钱
党支部开展网络安全宣传周活动
常用的软件开发模式
linux服务器设置电池选项
网络技术交付
网络安全维护工程师简称
网络安全防范口诀
vs2013数据库编程