docker基础6——制作镜像(dockerfile)

news2024/12/21 10:34:50

文章目录

  • 一、基本了解
    • 1.1. 基于centos构建镜像
    • 1.2 基于alpine制作镜像
  • 二、常用指令
  • 三、制作httpd镜像

一、基本了解

  • Dockerfile 是一个文本格式的配置文件,可以使用Dockerfile 快速创建自定义镜像。
  • Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。
  • 可以通过 .dockerignore 文件(每一行添加一条匹配模式)来让Docker忽略路径下的目录和文件。
  • Dockerfile分为四部分:
    1. 基础镜像信息。
    2. 维护者信息。
    3. 镜像操作指令。
    4. 容器启动时默认要执行的指令。

1.1. 基于centos构建镜像

1.编写dockerfile。

cat Dockerfile

# This dockerfile uses the ubuntu image
# VERSION 2 - EDITION 1
# Author: seancheng
# Command format: Instruction [arguments / command] ...

# 第一行必须指定基于的基础镜像
FROM centos:7

# 维护者信息
LABEL MAINTAINER='seancheng xianshangxian@126.com'
#
# # 镜像操作指令
RUN yum clean all && yum -y install epel-release
RUN yum -y install nginx
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
#
# # 容器启动时默认要执行的指令
CMD /usr/sbin/nginx                    

2.构建镜像。

docker build -t nginx:v1 .

在这里插入图片描述
3.使用构建镜像启动容器,网页访问。

docker run -d -p 8080:80   nginx:v1

在这里插入图片描述

1.2 基于alpine制作镜像

  • 官网,需要学习安装包的相关命令。
    在这里插入图片描述

1.编写Dokckfile,需要提前上传nginx二进制安装包。

#基础镜像信息
FROM alpine

# 维护者信息
LABEL MAINTAINER="MQ <2571798411@qq.com>"

##定义变量
ENV version 1.24.0
ENV install_path /usr/local/src
ENV PATH $install_path/nginx/sbin:$PATH

#暴露端口
EXPOSE 80 443

# 镜像操作指令
ADD file/nginx-$version.tar.gz $install_path

WORKDIR $install_path/nginx-$version

RUN echo 'https://mirrors.ustc.edu.cn/alpine/v3.12/main/' > /etc/apk/repositories && \
    echo 'https://mirrors.ustc.edu.cn/alpine/v3.12/community/' >> /etc/apk/repositories && \
    addgroup -S nginx && \
    adduser -DHS -s /sbin/nologin -G nginx nginx && \
    apk add --no-cache gcc libc-dev make pcre-dev openssl-dev openssl gd-dev zlib-dev && \
    ./configure  --prefix=$install_path/nginx --user=nginx --group=nginx && make && make install

# 容器启动时默认要执行的指令
CMD ["-g", "daemon off;"]
ENTRYPOINT ["nginx"]

2.构建镜像。

docker build -t nginx:v1 /opt/nginx

在这里插入图片描述

3.使用该镜像启动一个容器。

docker run -d  --name qingjun1  nginx:v1

在这里插入图片描述

二、常用指令

指令格式释义
FROMFROM <image>或FROM <imagge>:<tag>指定基础镜像。
同一个Dockerfile中创建多个镜像可以使用多个FROM指令。
LABEL MAINTAINERLABEL MAINTAINER <name email_address>指定维护者信息。
RUNRUN <command>
RUN [“executable”,“param1”,“param2”]
指定要执行的命令。
推荐使用格式二。
CMDCMD [“executable”,“param1”,“param2”]
CMD command param1 param2
CMD [“param1”,“param2”]提供给ENTRYPOINT的默认参数
指定启动容器时默认要执行的命令。
会被docker run指定参数覆盖。
EXPOSEEXPOSE <port> [<port>…]将容器内的应用端口信息显示出来,方便维护。
ENVENV <key> <value>指定环境变量,会被后续RUN指令使用,并在容器运行时保持。
ADDADD <src> <dest>将本地的<src>内容复制到容器中的<dest>。
<src>可以是Dockerfile所在目录的一个相对路径(文件或目录)、
一个URL、一个tar文件(会自动解压为目录)。
COPYCOPY <src> <dest>作用与ADD一样,区别是不会解压tar包,只是单纯复制。
ENTRYPOINTENTRYPOINT [“executable”,“param1”,“param2”]
ENTRYPOINT command param1 param2(在shell中执行)
指定启动容器时默认要执行的命令。
不会被docker run后面的指定参数覆盖,
并且这些参数会被传递给ENTRYPOINT指定的程序。
VOLUMEVOLUME [“/data”]创建一个可以从本地主机或其他容器挂载的挂载点,不实用。
USERUSER daemon指定运行容器时的用户名或UID,
后续的RUN也会使用指定用户。
WORKDIRWORKDIR /path/to/workdir进入目录命令,作用与cd相同。
为后续的RUN、CMD、ENTRYPOINT指令配置工作目录。
ONBUILDONBUILD [INSTRUCTION]配置当前创建的镜像作为其他镜像的基础镜像时,所执行的操作指令。
使用ONBUILD指令的镜像,需要给镜像标注明,方便别人使用,
例如ruby:1.9-onbuild。

三、制作httpd镜像

1.文件结构,需要准备httpd离线安装包。

wget https://downloads.apache.org/apr/apr-1.7.4.tar.gz
wget https://downloads.apache.org/apr/apr-util-1.6.3.tar.gz
wget https://downloads.apache.org/httpd/httpd-2.4.57.tar.gz

在这里插入图片描述

2.编写Dockerfile。

//编写dockerfile
cat Dockerfile 

FROM alpine
ENV PATH /usr/local/apache/bin:$PATH
COPY file /usr/src/
COPY script /tmp/
WORKDIR /usr/src/

RUN /bin/sh /tmp/install.sh && \
    rm -rf /tmp/*

EXPOSE 80 443
CMD ["-X"]
ENTRYPOINT ["httpd"]


//编写脚本。
cat script/install.sh 
#!/bin/sh
echo 'https://mirrors.ustc.edu.cn/alpine/v3.12/main/' > /etc/apk/repositories && \
echo 'https://mirrors.ustc.edu.cn/alpine/v3.12/community/' >> /etc/apk/repositories && \
apk update && \
apk add --no-cache -U gcc g++ make openssl-dev pcre-dev expat-dev libtool && \
addgroup -S apache && \
adduser -DHS -s /sbin/nologin -G apache apache && \
tar xf apr-1.7.4.tar.gz && \
tar xf apr-util-1.6.3.tar.gz && \
tar xf httpd-2.4.57.tar.gz && \
sed -i '/$RM "$cfgfile"/d' apr-1.7.4/configure && \
cd apr-1.7.4 && \
./configure --prefix=/usr/local/apr && make && make install && \
cd ../apr-util-1.6.3 && \
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr &&
make && make install && \
cd ../httpd-2.4.57 && \
./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util/ \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork && \
make && make install && \
sed -i '/^#ServerName/s/#//g' /etc/httpd24/httpd.conf && \
rm -rf /usr/src/* /var/cache/* && \
apk del gcc g++ make

3.构建镜像。

docker build -t httpd:v2 apache

4.使用构建的镜像部署容器。

docker run -d --name httpd2  httpd:v2

5.查看容器IP,访问容器IP。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/788663.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python实现HBA混合蝙蝠智能算法优化XGBoost分类模型(XGBClassifier算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蝙蝠算法是2010年杨教授基于群体智能提出的启发式搜索算法&#xff0c;是一种搜索全局最优解的有效方法…

PROFINET转TCP/IP网关profinet网线接头接法

大家好&#xff0c;今天要和大家分享一款自主研发的通讯网关&#xff0c;捷米JM-PN-TCPIP。这款网关可是集多种功能于一身&#xff0c;PROFINET从站功能&#xff0c;让它在通讯领域独领风骚。想知道这款网关如何实现PROFINET和TCP/IP网络的连接吗&#xff1f;一起来看看吧&…

MySQL:JDBC编程

在实际开发中&#xff0c;SQL很少是手动输入的&#xff0c;绝大多数的SQL都是通过代码&#xff0c;自动执行的。这个时候就需要其他编程语言来操作数据库服务器。 自己写一个数据库客户端是非常容易的&#xff0c;各种数据库本身就提供了一系列的API&#xff0c;但是自己写一个…

ActivityWatch配置跨平台同步(放弃)

老版本探索 老版本启动aw_qt.exe报错如下&#xff1a; 解决方案: ActivityWatch\activitywatch\PyQt5\Qt\plugins\platforms 复制到 ActivityWatch\activitywatch 下面重新启动aw_qt.exe即可解决 最新版 具体内容如下&#xff1a; Traceback (most recent call last): …

【前端】解决element-ui的form组件resetFields()方法不生效的问题

问题 使用element-ui的form组件&#xff0c;在输入栏较多的时候&#xff0c;有时resetFields只能重置一部分输入框的值 解决 给每个值赋值初始值为空即可 例如&#xff0c;需要清除的:model"queryForm.bgnTime"、:model"queryForm.endTime"等一系列的值…

基于Java+SpringBoot+vue前后端分离阿博图书馆管理系统设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

【Boost搜索引擎项目】

文章目录 一、项目流程二、项目展示 一、项目流程 1.编写数据去标签模块–parser.cc 将去标签之后干净文档以title\3content\3url\ntitle\3content\3url\n格式放入同一文件中。 2.建立索引模块–index.hpp 读取处理好的行文本文件进行分词、权重计算等操作&#xff0c;在内存中…

ICMP_1靶场详解

ICMP_1靶场复盘 这个靶场还是很有意思的&#xff0c;尤其在提权阶段。 靶场下载地址&#xff1a;https://download.vulnhub.com/icmp/icmp.ova.gz arp-scan --localnet首先扫描ip&#xff0c;登陆后发现是个这样的页面。 我们发现这个页面在提醒我们的就是出现了monitorr 然…

如何部署MHA高可用MySQL数据库

目录 一、MHA概念 MHA 的组成 MHA 的特点 MHA工作原理 二、部署MySQL数据库MHA高可用 第一步 关闭所有防火墙和安全机制 第二步 修改主数据库配置文件 第三步 修改从数据库的配置文件 第四步 重启服务 第五步 优化所有数据库路径 第六步 授权所有数据库节点 第七步…

nodejs+vue+elementui在线课程知识点管理系统

前端技术&#xff1a;nodejsvueelementui,视图层其实质就是vue页面&#xff0c;通过编写vue页面从而展示在浏览器中&#xff0c;编写完成的vue页面要能够和控制器类进行交互&#xff0c;从而使得用户在点击网页进行操作时能够正常。 可以设置中间件来响应 HTTP 请求。 对于之前…

C++ 使用tinyxml库处理XML文件

文章目录 前言一、下载tinyxml二、创建一个XML文件三、XML文件增加数据四、修改XML文件五、解析XML文件六、XML文件删除数据总结 前言 TinyXML是一个开源的解析XML的解析库&#xff0c;能够用于C&#xff0c;能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件&…

解决使用@Field注解配置分词器失效问题(Spring Data Elasticsearch)

问题复现&#xff1a;插入数据时&#xff0c;实体类配置的Field注解没有生效 实体类&#xff1a; package cn.aopmin.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.data.annotation.Id; import…

机器学习李宏毅学习笔记38

文章目录 前言一、生成式学习二、各个击破和一次到位的对比1.各个击破&#xff08;Autoregressive(AR) model&#xff09;2.一次到位&#xff08;Non-autoregressive(NAR) model&#xff09; 总结 前言 生成式学习两种策略&#xff1a;各个击破/一次到位 有结构的生成物比如语…

【vue3】常见的使用vue3创建项目的几种方法

1、使用ui界面创建&#xff0c;winr打开命令提示符&#xff0c;输入vue ui 2、winr打开命令提示符&#xff0c;输入vue create 项目名称 3、使用脚手架创建 其中方法一&#xff0c;方法二是使用npm run serve来运行的&#xff0c;方法三是使用npm run dev运行的

基于MOT数据集的高精度行人检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于MOT数据集的高精度行人检测系统可用于日常生活中检测与定位行人目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的行人目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练数据集&…

react native 本地存储 AsyncStorage

An asynchronous, unencrypted, persistent, key-value storage system for React Native. Async Storage 只能用来储存字符串数据&#xff0c;所以为了去储存object类型的数据&#xff0c;得先进行序列化&#xff08;JSON.stringify()&#xff09;当你想要使用数据的时候&…

redis(9):spring里面使用redis

1 创建一个mave项目 自行创建一个maven项目 2 修改pom.xml <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven…

Python电商爬虫保姆级入门教程(纯新手向)

图灵Python课堂 长沙图灵教育于2001年开始进入教育行业&#xff0c;立足泛IT类职业教育&#xff0c;以打造高新技术人才为宗旨&#xff0c;专注于提供多层次、个性化的职业技能培训课程&#xff0c;为各行业培养技术开发、应用和管理等岗位的中高端人才&#xff0c;致力于成为…

vue全局状态管理工具 Pinia 的使用

先了解一下关于Pinia的一些故事&#xff0c;面试把这些讲给面试官挺加分的&#xff0c;同时这是我持续学习下去的动力 1.为什么叫Pinia&#xff1f; 官网解释是西班牙语中的 pineapple&#xff0c;即“菠萝”&#xff0c;菠萝花是一组各自独立的花朵&#xff0c;它们结合在一起…

王道考研数据结构--4.1.顺序队列

目录 前言 1.顺序队列的定义 2. 顺序队列的结构 3.顺序队列的操作 3.1定义顺序队列 3.2初始化 3.3入队 3.4出队 3.5遍历求表长 3.6清空&#xff0c;销毁队列 4.完整代码 前言 日期&#xff1a;2023.7.25 书籍&#xff1a;2024年数据结构考研复习指导&#xff08;王道…