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

文章目录

  • 一、基本了解
    • 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 [email protected]'
#
# # 镜像操作指令
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 .

docker基础6——制作镜像(dockerfile)_第1张图片
3.使用构建镜像启动容器,网页访问。

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

docker基础6——制作镜像(dockerfile)_第2张图片

1.2 基于alpine制作镜像

  • 官网,需要学习安装包的相关命令。
    docker基础6——制作镜像(dockerfile)_第3张图片

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

#基础镜像信息
FROM alpine

# 维护者信息
LABEL MAINTAINER="MQ <[email protected]>"

##定义变量
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

docker基础6——制作镜像(dockerfile)_第4张图片

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

docker run -d  --name qingjun1  nginx:v1

docker基础6——制作镜像(dockerfile)_第5张图片

二、常用指令

指令 格式 释义
FROM FROM 或FROM : 指定基础镜像。
同一个Dockerfile中创建多个镜像可以使用多个FROM指令。
LABEL MAINTAINER LABEL MAINTAINER 指定维护者信息。
RUN RUN
RUN [“executable”,“param1”,“param2”]
指定要执行的命令。
推荐使用格式二。
CMD CMD [“executable”,“param1”,“param2”]
CMD command param1 param2
CMD [“param1”,“param2”]提供给ENTRYPOINT的默认参数
指定启动容器时默认要执行的命令。
会被docker run指定参数覆盖。
EXPOSE EXPOSE […] 将容器内的应用端口信息显示出来,方便维护。
ENV ENV 指定环境变量,会被后续RUN指令使用,并在容器运行时保持。
ADD ADD 将本地的内容复制到容器中的
可以是Dockerfile所在目录的一个相对路径(文件或目录)、
一个URL、一个tar文件(会自动解压为目录)。
COPY COPY 作用与ADD一样,区别是不会解压tar包,只是单纯复制。
ENTRYPOINT ENTRYPOINT [“executable”,“param1”,“param2”]
ENTRYPOINT command param1 param2(在shell中执行)
指定启动容器时默认要执行的命令。
不会被docker run后面的指定参数覆盖,
并且这些参数会被传递给ENTRYPOINT指定的程序。
VOLUME VOLUME [“/data”] 创建一个可以从本地主机或其他容器挂载的挂载点,不实用。
USER USER daemon 指定运行容器时的用户名或UID,
后续的RUN也会使用指定用户。
WORKDIR WORKDIR /path/to/workdir 进入目录命令,作用与cd相同。
为后续的RUN、CMD、ENTRYPOINT指令配置工作目录。
ONBUILD ONBUILD [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

docker基础6——制作镜像(dockerfile)_第6张图片

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。
docker基础6——制作镜像(dockerfile)_第7张图片

你可能感兴趣的:(docker,docker,容器,运维,linux)