Docker build创建指定容器镜像

2023-05-16

Docker build: Build an image from a Dockerfile.

按照Dockerfile文件所定义内容创建临时性容器,把Docker中所定义的每行命令在临时容器中执行,然后生成镜像分层,所有命令执行结束后,生成一个新的镜像,中间过程为commit。

一行命令就是一个分层,一行命令多条命令就涉及到镜像优化。

一次一次的commit执行情况就是pause暂停打包、暂停打包、暂停打包……的过程。

Docker build执行的Dockerfile文件,执行的却是docker commit操作。

Dockerfile原理:在Dockerfile定义所要执行的命令,使用docker build创建镜像,过程中会按照Dockerfile所定义的内容打开临时性容器(使用docker commit容器),把Dockerfile文件中的命令全部执行完毕,就得到一个容器应用镜像。

执行的命令越多,最终得到的容器应用镜像越大,所以要做优化。

Dockerfile关键字:

1、FROM:指定基础镜像;

2、MAINTAINER: 用来指定镜像创建者;

3、RUN:运行命令;

4、CMD:设置container启动时执行的操作;(如果容器镜像有此命令,启动容器时不要手动再让容器执行其他的命令。)

5、ENTRYPOINT:设置Container启动时执行的操作;

6、USER:设置容器中的用户;

7、EXPOSE:指定容器需要映射到宿主机的端口;

8、ENV:设置环境变量;

9、ADD:从宿主机的src复制文件到container的dest路径;

10、VOLUME:指定挂载点;

11、WORKDIR: 在子镜像中执行工作路径切换;

12、ONBUILD:

这些关键字都是要理解的。

1、示例:

目的: 通过Dockerfile创建一个可以在启动容器时就直接启动httpd应用的镜像。

步骤:

1、创建一个文件夹(目录),用于存储Dockerfile所使用的文件;

2、在此目录中创建Dockerfile文件及制作镜像所使用的文件,比如网站的首页,启动apache启动的脚本;

3、在此目录中,使用docker build创建镜像,读取Dockerfile文件;

4、验证:使用创建的镜像启动容器。

过程:

第一步:创建test目录:

mkdir test

第二步:进入目录并创建用于启动httpd的脚本文件:

cd test

vim run-httpd.sh

#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/httpd -D FOREGROUND

第三步:创建用于测试httpd是否可用的index.html:

vim index.html

It's work!

第四步:创建Dockerfile:

FROM centos:7
MAINTAINER "chang_chunhua@qq.com"
RUN yum clean all && yum install -y httpd
ADD run-httpd.sh /run-httpd.sh
RUN chmod -v +x /run-httpd.sh
ADD index.html /var/www/html
EXPOSE 80
WORKDIR /
CMD ["/bin/bash","run-httpd.sh"]

说明:centos:8已经停服。

第五步:使用docker build创建容器应用镜像,镜像名称为centos-base-httpd,版本为v1。

[root@vm1 test]# docker build -t centos-base-httpd:v1 .
Sending build context to Docker daemon  4.096kB
Step 1/9 : FROM centos:7
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987
Status: Downloaded newer image for centos:7
 ---> eeb6ee3f44bd
Step 2/9 : MAINTAINER "chang_chunhua@qq.com"
 ---> Running in c26b1ca650a4
Removing intermediate container c26b1ca650a4
 ---> e796b74765c8
Step 3/9 : RUN yum clean all && yum install -y httpd
 ---> Running in 13bb29923568
Loaded plugins: fastestmirror, ovl
Cleaning repos: base extras updates
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
 * base: mirrors.tuna.tsinghua.edu.cn
 * extras: mirrors.tuna.tsinghua.edu.cn
 * updates: mirrors.tuna.tsinghua.edu.cn
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-97.el7.centos.5 will be installed
--> Processing Dependency: httpd-tools = 2.4.6-97.el7.centos.5 for package: httpd-2.4.6-97.el7.centos.5.x86_64
--> Processing Dependency: system-logos >= 7.92.1-1 for package: httpd-2.4.6-97.el7.centos.5.x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-97.el7.centos.5.x86_64
--> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-97.el7.centos.5.x86_64
--> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-97.el7.centos.5.x86_64
--> Running transaction check
---> Package apr.x86_64 0:1.4.8-7.el7 will be installed
---> Package apr-util.x86_64 0:1.5.2-6.el7 will be installed
---> Package centos-logos.noarch 0:70.0.6-3.el7.centos will be installed
---> Package httpd-tools.x86_64 0:2.4.6-97.el7.centos.5 will be installed
---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package           Arch        Version                       Repository    Size
================================================================================
Installing:
 httpd             x86_64      2.4.6-97.el7.centos.5         updates      2.7 M
Installing for dependencies:
 apr               x86_64      1.4.8-7.el7                   base         104 k
 apr-util          x86_64      1.5.2-6.el7                   base          92 k
 centos-logos      noarch      70.0.6-3.el7.centos           base          21 M
 httpd-tools       x86_64      2.4.6-97.el7.centos.5         updates       94 k
 mailcap           noarch      2.1.41-2.el7                  base          31 k

Transaction Summary
================================================================================
Install  1 Package (+5 Dependent packages)

Total download size: 24 M
Installed size: 32 M
Downloading packages:
Public key for apr-1.4.8-7.el7.x86_64.rpm is not installed
warning: /var/cache/yum/x86_64/7/base/packages/apr-1.4.8-7.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Public key for httpd-tools-2.4.6-97.el7.centos.5.x86_64.rpm is not installed
--------------------------------------------------------------------------------
Total                                              1.7 MB/s |  24 MB  00:14
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
 Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
 Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
 Package    : centos-release-7-9.2009.0.el7.centos.x86_64 (@CentOS)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : apr-1.4.8-7.el7.x86_64                                       1/6
  Installing : apr-util-1.5.2-6.el7.x86_64                                  2/6
  Installing : httpd-tools-2.4.6-97.el7.centos.5.x86_64                     3/6
  Installing : centos-logos-70.0.6-3.el7.centos.noarch                      4/6
  Installing : mailcap-2.1.41-2.el7.noarch                                  5/6
  Installing : httpd-2.4.6-97.el7.centos.5.x86_64                           6/6
  Verifying  : httpd-tools-2.4.6-97.el7.centos.5.x86_64                     1/6
  Verifying  : mailcap-2.1.41-2.el7.noarch                                  2/6
  Verifying  : apr-1.4.8-7.el7.x86_64                                       3/6
  Verifying  : apr-util-1.5.2-6.el7.x86_64                                  4/6
  Verifying  : httpd-2.4.6-97.el7.centos.5.x86_64                           5/6
  Verifying  : centos-logos-70.0.6-3.el7.centos.noarch                      6/6

Installed:
  httpd.x86_64 0:2.4.6-97.el7.centos.5

Dependency Installed:
  apr.x86_64 0:1.4.8-7.el7
  apr-util.x86_64 0:1.5.2-6.el7
  centos-logos.noarch 0:70.0.6-3.el7.centos
  httpd-tools.x86_64 0:2.4.6-97.el7.centos.5
  mailcap.noarch 0:2.1.41-2.el7

Complete!
Removing intermediate container 13bb29923568
 ---> c1b6b195b759
Step 4/9 : ADD run-httpd.sh /run-httpd.sh
 ---> 1f85b533d455
Step 5/9 : RUN chmod -v +x /run-httpd.sh
 ---> Running in bd3ef63efe8a
mode of '/run-httpd.sh' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
Removing intermediate container bd3ef63efe8a
 ---> 938f5dcddad5
Step 6/9 : ADD index.html /var/www/html
 ---> 026c49eb2266
Step 7/9 : EXPOSE 80
 ---> Running in bb9b4ff22bf7
Removing intermediate container bb9b4ff22bf7
 ---> 50c117e5c73b
Step 8/9 : WORKDIR /
 ---> Running in ef989d3ca39b
Removing intermediate container ef989d3ca39b
 ---> e12ce12352d9
Step 9/9 : CMD ["/bin/bash","run-httpd.sh"]
 ---> Running in 94f40a65dbe4
Removing intermediate container 94f40a65dbe4
 ---> 62581b44dd05
Successfully built 62581b44dd05
Successfully tagged centos-base-httpd:v1

第六步:验证,使用上述创建的镜像启动容器:

docker run -d centos-base-httpd:v1

使用docker run --help 查看-d命令的意思:

-d:Run container in background and print container ID。

另外需要注意的是后面不再需要如/bin/bash的命令了,因为/bin/bash的命令比CMD命令优先级要高。

验证容器及httpd是否可用:

docker inspect 6a6 # 查看容器的IP地址

curl http://172.17.0.11
It's working!

案例二:把nginx容器化:

1)要求通过基础镜像做nginx应用镜像;

2)使用nginx应用镜像启动容器的时候,nginx要求启动;

3)验证nginx服务是否启动。

第一步:创建一个目录:

mkdir nginxtest

cd nginxtest

第二步:创建测试文件:

[root@localhost nginxtest]# echo 'nginx s running!!!' >> index.html
[root@localhost nginxtest]# ls
index.html

第三步:创建Dockerfile文件:

FROM centos:7

MAINTAINER "chang_chunhua@qq.com"

RUN yum clean all && yum install -y yum-plugin-ovl && yum -y install epel-release

RUN yum -y install nginx

ADD index.html /usr/share/nginx/html/

RUN echo "daemon off;" >> /etc/nginx/nginx.conf

EXPOSE 80

CMD /usr/sbin/nginx

第四步:使用docker build命令创建nginx镜像:

docker build -t centos-nginx:v1 .

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker build创建指定容器镜像 的相关文章

  • [手把手超简单]教你搭建Novel AI服务器

    此NovelAI基于秋葉aaaki的版本 百度网盘链接 百度网盘 请输入提取码 百度网盘为您提供文件的网络备份 同步和分享服务 空间大 速度快 安全稳固 xff0c 支持教育网加速 xff0c 支持手机端 注册使用百度网盘即可享受免费存储空
  • [Linux,AI绘画]搭建Stable-Diffusion

    最近的AI绘画很火 我们也来搭建一个 在linux下安装Stable Diffusion 1 首先我们下载或者克隆Stable Diffusion Webui 大概3MB git clone https github com AUTOMAT
  • CPU硬解Stable-Diffusion

    很多小伙伴说 哎呀 我没有显卡 哎呀 我显存是AMD的 哎呀 我没有足够的显存 那这一期 将带来CPU和内存运算SD 其实很简单 我们只需要将 COMMANDLINE ARGS 环境变量设置为 skip torch cuda test 然后
  • [Linux容器]手把手搭建Stable-Diffusion容器

    最近的AI绘画可谓是特别火呀 这一期带大家使用容器搭建Stable Diffusion 1 首先我们安装Docker Debian sudo apt update amp amp sudo apt install y docker io R
  • [开源]一篇文章带你搭建自己的开源镜像站

    前言 在使用编程语言 开源软件 类UNIX系统时 我们常常会用到各类包管理器 Package Manager eg apt yum dnf pip pacman 而这些包管理器的源一般在各类网络镜像站 但在实际生产环境时 我们往往需要使用公
  • Kubernetes 集群 Worker 节点启停

    说明 有时候某一台服务器需要关机或者维护 xff0c 就需要停止上面的集群 保证其他节点上资源充足 停止节点 1 停止节点调度 span class token comment 等同于 span kubectl uncordon lt 节点
  • 利用栈简单实现回文串判断

    题目 编程实现程序 xff0c 相关功能包括 xff1a 输入一串字符 xff0c 使用单链表进行存储 xff0c 然后设计算法通过数据结构栈来帮助判断上述已知单链表中字符序列是否为回文 xff0c 如果是 xff0c 则输出 此链表中的字
  • WSL2运行stable-diffsuion容器

    首先安装wsl2 debian发行版 更新源安装docker sudo sed i 39 s deb debian org mirrors tuna Tsinghua edu cn 39 etc apt sources list amp a
  • Debian编译安装PHP8.1

    wget c https www php net distributions php 8 2 0 tar xz amp amp sudo sed i 39 s deb debian org mirrors tuna tsinghua edu
  • C语言之洛谷刷题之路---顺序结构

    一顺序结构 B2002 Hello World include lt stdio h gt int main printf 34 Hello World n 34 return 0 B2025 输出字符菱形 include lt stdio
  • C++ 百钱百鸡问题

    百钱百鸡问题 xff0c 又叫百钱买百鸡 xff0c 是一个著名的数学问题 xff0c 主要内容是 xff1a 用100元钱买100只鸡 xff0c 公鸡 母鸡 小鸡都要有 公鸡5元1只 xff1b 母鸡3元1只 xff1b 小鸡1元3只
  • 2022最新VMware虚拟机下载·Linux系统装配·镜像文件下载·联网使用一条龙--------希望可以帮到你们

    小新一枚 xff0c 请前辈赐教 xff0c 友友批评 xff0c 这是我小小的经验 xff0c 如有纰漏 xff0c 还望海涵 前期工作准备 xff1a 1 下好VMware安装包和镜像文件 xff08 Windows11建议vm17兼容
  • C++用怎么把一个字符串和一个字符数组拼接到一起

    第一种方法用到 xff1a copy函数 xff1a 字符串名 copy 数组名 xff0c 截取字符长度 xff0c 从第几个字符的前一位截取 xff1b xff08 因为数组arr第一个元素是arr 0 xff09 strlen函数 x
  • 虚拟机Linux中目录的命令(2)

    今天想和大家分享 xff0c 我们在远程登陆Linux中进行的一些命令 分为创建目录 xff0c 删除空目录 xff0c 创建文件 xff0c 删除目录和文件 xff0c 复制 xff0c 移动 名称功能参数是否有重命名功能mkdir 创建
  • C语言初阶小练习(7)——指针(1)

    以下所有题都是用指针实现的 xff0c 你可能会想 xff0c 这些题目不用指针也可以写出来 xff0c 干嘛要多次一举呢 xff1f 非也 xff0c 这些只是初级指针 xff0c 先把基础打好 xff0c 后来指针的用途可大着呢 xff
  • C语言初阶小练习(8)——指针(2)

    还是一些指针小练习 xff0c 接上次 C语言小练习 xff08 7 xff09 指针 xff08 1 xff09 一起来看看吧 目录 编写程序输入n个整数 xff0c 查找并删除重复的数字 xff0c 打印结果 查找其中出现了多少个连续数
  • 推荐几个代码自动生成器,神器!!!

    20个代码生成框架 老的代码生成器的地址 xff1a https www cnblogs com skyme archive 2011 12 22 2297592 html 以下是大家推荐的最近很火爆的代码生成器神器 如果有更好的希望大家多
  • linux 安装discuz出现“ mysqli_connect()不支持advice_mysqli_connect ”解决方法

    由于不了解php相关技术 xff0c 所以在安装discuz的时候遇到了很多麻烦 xff0c 记录下 首先 xff0c 我的环境是CentOS6 5 xff0c 在安装discuz的时候需要yum很多东西 yum install php p
  • Ubuntu 22.04 LTS下Miniconda安装+换源(踩坑向)

    1 安装Miniconda 我使用的是Python3 8 xff0c 如果需要去其他对应版本 xff0c 请查看 Miniconda conda documentation 下载 wget https repo anaconda com m
  • FreeBSD修改为国内源

    禁用原来的FreeBSD conf ee etc pkg FreeBSD conf 将 enabled yes 改为 enabled no 保存 ESC 然后 a gt a 即可 创建另外一个 FreeBSD conf mkdir p us

随机推荐

  • 关于51单片机的中断

    1 中断的要求 1 中断源有中断请求 Ask for instructions of the CPU interrupt request source called interrupt source 2 此中断源的中断允许位为1 The i
  • 华为机试_HJ5 进制转换【简单】

    描述 写出一个程序 xff0c 接受一个十六进制的数 xff0c 输出该数值的十进制表示 数据范围 xff1a 保证结果在 1 le n le 2 31 1 1 n 231 1 输入描述 xff1a 输入一个十六进制的数值字符串 输出描述
  • bootstrap实现 — 个人简介

    实现 xff1a bootstrap 效果图 xff1a 源码 xff1a lt DOCTYPE html gt lt html gt lt head gt lt meta charset 61 34 utf 8 34 gt lt titl
  • 计蒜客--T1079--打表+控制输出

    假设有 N 盏灯 xff08 NN为不大于 5000 的正整数 xff09 xff0c 从 1 到 N 按顺序依次编号 xff0c 初始时全部处于开启状态 xff1b 有 M 个人 xff08 M 为不大于 N的正整数 xff09 也从 1
  • Authentication plugin ‘caching_sha2_password‘ 服务端也无法连接问题彻底解决

    在网上搜索了很多的帖子 xff0c 发现描述的都是外部客户端无法登录到mysql上 xff0c 登录上服务器以后连接更改配置的方式 xff0c 但是 xff01 xff01 xff01 xff01 xff01 我现在是服务器连接也报错啊啊啊
  • Hexo分类及标签显示

    Hexo根目录配置 config yml category map Blogs categories Blogs Tech categories Tech Tools categories Tools Other categories Ot
  • IDEA查看历史记录

    方法一 文件内 Ctrl 43 右键 Local History Show History xff0c 显示当前文件的本地修改历史 方法二 一 xff1a 在文件内 xff0c 按 Ctrl 43 Shift 43 A 弹出全部搜索对话框
  • SpringBoot-JPA整合ShardingShpere自定义分布式主键

    分布式主键简介 在分布式环境下 xff0c 由于分库分表导致数据水平拆分后无法使用单表自增主键 xff0c 因此我们需要一种全局唯一id生成策略作为分布式主键 当前有如下解决方案 UUID xff08 Universally Unique
  • Gitlab的安装与配置

    安装开始时 xff0c 需确认服务器最小配置是2核4G xff0c 因为gitlab软件比较大 1 配置yum源 xff1a vim etc yum repos d gitlab repo gitlab name 61 gitlab ce
  • Error creating bean with name ‘org.springframework.aop.aspectj.AspectJPointcutAdvisor#0

    问题 xff1a nested exception is org springframework beans factory BeanCreationException Error creating bean with name 39 or
  • Vue前端项目开发页面(二)

    前端界面开发 开发工具版本 64 vue cli 4 5 13 新建Login vue登陆页 1 在 vue exemples 项目 xff0c 选中components目录右键 New Vue Component xff0c 名称为 Lo
  • SpringBoot整合WebSocket

    概述 HTTP 协议是一种无状态的 无连接的 单向的应用层协议 它采用了请求 响应模型 通信请求只能由客户端发起 xff0c 服务端对请求做出应答处理 WebSocket和HTTP一样 xff0c 都是一种网络通信协议 比起HTTP只能由客
  • SpringBoot整合MybatisPlus使用IPage实现分页

    概述 MybatisPlus 提供了分页的功能 IPage内部原理是基于拦截器 xff0c 但是这个拦截的是方法以及方法中的参数 xff0c 这个也会判断是否是查询操作 如果是查询操作 xff0c 才会进入分页的处理逻辑 进入分页逻辑处理后
  • SpringBoot统一异常处理

    概述 SpringBoot 提供了 64 ControllerAdvice 64 RestControllerAdvice 注解可以实现统一异常处理 xff0c 只需要在定义异常类加上以上注解即可 自定义异常处理 定义统一异常处理 span
  • 萌新学习算法——并查集基础

    并查集 在算法设计中 xff0c 将一个集合和另外一个集合合并时 xff0c 就会用到并查集 假如不用并查集 xff0c 你可能会用到集合和列表来实现 xff0c 这样会使代码看起来很复杂 xff0c 而且执行效率不高 xff0c 下面用洛
  • linux中断及其底半部-s5p6818开发平台

    中断分为两个部分 xff1a 中断顶部 xff08 top half xff09 和中断底半部 xff08 bootom half xff09 一 中断顶部 xff08 top half xff09 中断上半部需要处理一下三种情况 xff1
  • Windows如何查看.db数据库文件

    从android应用导出的 db文件 xff0c 想在Windows电脑端看 xff0c 可以用SQLite Expert Professional这个软件查看 xff0c 网上说用FireFox的插件sqlite manager xff0
  • Ubuntu工具-01 UEX

    UltraEdit是Windows旗下一款流行的老牌文本 HEX编辑器 xff08 非开源 xff09 UltraEdit正被移植到Linux平台 该移植名为UEX xff0c 意即UltraEdit for Linux UltraEdit
  • Ubuntu工具-2 OBS Studio

    文章目录 1 下载并安装1 1 Flathub安装1 2 Snap安装1 3 PPA源方式安装1 3 1 检查OpenGL版本 xff0c 其版本必须高于 96 3 3 96 1 3 2 安装虚拟摄像机驱动1 3 3 安装ffmpeg库1
  • Docker build创建指定容器镜像

    Docker build xff1a Build an image from a Dockerfile 按照Dockerfile文件所定义内容创建临时性容器 xff0c 把Docker中所定义的每行命令在临时容器中执行 xff0c 然后生成