Dockerfile创建apache镜像(alpine)

alpine系统

alpine系统是什么

Alpine Linux 是一个基于 musl libc 和 busybox 的面向安全的轻量级 Linux 发行版。

alpine系统的特点

  • 小巧:基于Musl libc和busybox,和busybox一样小巧,最小的Docker镜像只有5MB;
  • 安全:面向安全的轻量发行版;
  • 简单:提供APK包管理工具,软件的搜索、安装、删除、升级都非常方便。
  • 适合容器使用:由于小巧、功能完备,非常适合作为容器的基础镜像。

alpine镜像下载

alpine官网

alpine国内源

清华大学:https://mirror.tuna.tsinghua.edu.cn/alpine/
阿里云:https://mirrors.aliyun.com/alpine/
网易:http://mirrors.163.com/

更换apk源

sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories

alpine基础命令

apk update      //更新最新镜像源列表

apk search      //查找所以可用软件包

apk search -v       //查找所以可用软件包及其描述内容

apk search -v ‘acf*’      //通过软件包名称查找软件包

apk search -v -d ‘docker’         //通过描述文件查找特定的软件包

apk add openssh         //安装一个软件

apk add openssh openntp vim         //安装多个软件

apk add --no-cache mysql-client         //不使用本地镜像源缓存,相当于先执行update,再执行add

apk info                //列出所有已安装的软件包

apk info -a zlib        //显示完整的软件包信息

apk info --who-owns /sbin/lbu           //显示指定文件属于的包

apk upgrade                 //升级所有软件

apk upgrade openssh         //升级指定软件

apk upgrade openssh openntp vim         //升级多个软件

apk add --upgrade busybox               //指定升级部分软件包

apk del openssh             //删除一个软件

服务管理

alpine没有使用fedora的systemctl来进行服务管理,使用的是RC系列命令:

rc-update           //主要用于不同运行级增加或者删除服务

rc-status           //主要用于运行级的状态管理

rc-service          //主用于管理服务的状态

rc-status -a        //列出系统所有服务

关闭系统

reboot      //重启系统

poweroff    //关机

dockerfile创建apache镜像

创建好目录结构

#下载好需要使用的包
[root@localhost ~]# wget http://mirrors.aliyun.com/apache/apr/apr-1.7.0.tar.gz https://mirrors.aliyun.com/apache/apr/apr-util-1.6.1.tar.gz https://mirrors.aliyun.com/apache/httpd/httpd-2.4.54.tar.gz

#创建好一个目录存放包和dockerfile
[root@localhost ~]# mkdir httpd
[root@localhost ~]# cd httpd
[root@localhost httpd]# mkdir files
[root@localhost httpd]# touch Dockerfile
[root@localhost httpd]# cd
[root@localhost ~]# mv *.tar.gz httpd/files/

编写一个entrypoint.sh的脚本

[root@localhost httpd]# cd files/
[root@localhost files]# vim entrypoint.sh
#!/bin/bash

sed -i '/^ServerName/s/#//g' /usr/local/apache/conf/httpd/conf

exec "$@"
[root@localhost files]# chmod +x entrypoint.sh

编写dockerfile

FROM alpine

LABEL MANTAINER "zxr 2428341246@qq.com"

ENV apr_version=1.7.0 apr_util_version=1.6.1 httpd_version=2.4.54

ADD files/* /tmp/

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
    apk update && \
    adduser -SHs /sbin/nologin apache && \
    apk add --no-cache -U gcc libc-dev make expat-dev pcre-dev openssl-dev libtool && \
    cd /tmp/apr-${apr_version} && \
    sed -i '/$RM "$cfgfile"/d' configure && \
    ./configure --prefix=/usr/local/apr && \
    make && make install && \
    cd /tmp/apr-util-${apr_util_version} && \
    ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && \
    make && make install && \
    cd /tmp/httpd-${httpd_version} && \
    ./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 && \
    mv /tmp/entrypoint.sh / && \
    apk del gcc make && \
    rm -rf /tmp/* /var/cache/*

EXPOSE 80
WORKDIR /usr/local/apache
CMD ["/usr/local/apache/bin/httpd","-D","FOREGROUND"]
ENTRYPOINT ["/bin/bash","/entrypoint.sh"]

创建镜像

[root@localhost ~]# docker build -t xinruizhong/httpd:v2 httpd/
[root@localhost ~]# docker images
REPOSITORY          TAG       IMAGE ID       CREATED         SIZE
xinruizhong/httpd   v2        d884889149e6   5 hours ago    122MB
alpine              latest    c059bfaa849c   9 months ago   5.59MB

创建容器,链接外部存储,并测试

[root@localhost ~]# mkdir /html/
[root@localhost ~]# cd /html/
[root@localhost html]# echo "hello world" > index.html
[root@localhost html]# cat index.html
hello world
[root@localhost ~]# docker run -dit --name web -p 80:80 -v /html/://usr/local/apache/htdocs/:Z xinruizhong/httpd:v2
3d718a9c1cca735057e99eca5fc3f3da69bccf0fa113997cb6fe05187e2bc94a
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS         PORTS                               NAMES
3d718a9c1cca   xinruizhong/httpd:v2   "/bin/bash /entrypoi…"   7 seconds ago   Up 6 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   web
[root@localhost ~]# curl 192.168.111.139:80
hello world

Dockerfile创建apache镜像(alpine)

上传镜像

Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.

Username: xinruizhong
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.

Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@localhost ~]# docker push xinruizhong/httpd:v2
The push refers to repository [docker.io/xinruizhong/httpd]
2efef2815df1: Layer already exists
6128a159deec: Layer already exists
8d3ac3489996: Layer already exists
v2: digest: sha256:7e1c94047ee828de88d62c8a146effe0befc71d66ac608a49ba9f33a9ffbb551 size: 952

Dockerfile创建apache镜像(alpine)

Original: https://www.cnblogs.com/Their-own/p/16643514.html
Author: 事愿人为
Title: Dockerfile创建apache镜像(alpine)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611372/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球