文章目录
- 一、基本了解
- 1.1. 基于centos构建镜像
- 1.2 基于alpine制作镜像
- 二、常用指令
- 三、制作httpd镜像
一、基本了解
- Dockerfile 是一个文本格式的配置文件,可以使用Dockerfile 快速创建自定义镜像。
- Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。
- 可以通过 .dockerignore 文件(每一行添加一条匹配模式)来让Docker忽略路径下的目录和文件。
- Dockerfile分为四部分:
- 基础镜像信息。
- 维护者信息。
- 镜像操作指令。
- 容器启动时默认要执行的指令。
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
二、常用指令
指令 | 格式 | 释义 |
---|---|---|
FROM | FROM <image>或FROM <imagge>:<tag> | 指定基础镜像。 同一个Dockerfile中创建多个镜像可以使用多个FROM指令。 |
LABEL MAINTAINER | LABEL MAINTAINER <name email_address> | 指定维护者信息。 |
RUN | RUN <command> RUN [“executable”,“param1”,“param2”] | 指定要执行的命令。 推荐使用格式二。 |
CMD | CMD [“executable”,“param1”,“param2”] CMD command param1 param2 CMD [“param1”,“param2”]提供给ENTRYPOINT的默认参数 | 指定启动容器时默认要执行的命令。 会被docker run指定参数覆盖。 |
EXPOSE | EXPOSE <port> [<port>…] | 将容器内的应用端口信息显示出来,方便维护。 |
ENV | ENV <key> <value> | 指定环境变量,会被后续RUN指令使用,并在容器运行时保持。 |
ADD | ADD <src> <dest> | 将本地的<src>内容复制到容器中的<dest>。 <src>可以是Dockerfile所在目录的一个相对路径(文件或目录)、 一个URL、一个tar文件(会自动解压为目录)。 |
COPY | COPY <src> <dest> | 作用与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
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。