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

一、基本了解

  • 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。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Docker build方式是一种制作Docker镜像的方法。在这种方式下,需要提前配置一个Dockerfile文件,该文件记录了镜像应该以哪个基础镜像基础,并指定了需要进行的操作。通过执行构建命令,Docker会根据Dockerfile文件的指令逐步构建镜像。 下面是使用Docker build方式制作镜像的步骤: 1. 新建一个目录作为制作Docker镜像的目录,可以使用命令"mkdir -p /docker-build"来创建目录。 2. 在该目录中创建一个Dockerfile文件,并在其中配置镜像基础镜像和需要进行的操作。比如,如果你想创建一个含有Apache服务的镜像,可以在Dockerfile中指定基础镜像为某个Linux发行版,然后安装和配置Apache服务。 3. 执行构建命令,通过命令"docker build -t <镜像名> <Dockerfile所在目录>"来构建镜像。其中<镜像名>是你给镜像起的名字,<Dockerfile所在目录>是Dockerfile文件所在的目录路径。 使用Docker build方式可以更加灵活和可控地制作镜像,可以通过配置Dockerfile文件来定义镜像的构建过程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Docker详解(八)——Docker镜像制作](https://blog.csdn.net/weixin_40228200/article/details/124171663)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百慕卿君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值