使用podman进行Dockerfile创建Alpine镜像

使用podman进行Dockerfile创建Alpine镜像

先拉取一个alpine并运行

[root@localhost ~]# podman pull alpine
Writing manifest to image destination
Storing signatures
9c6f0724472873bb50a2ae67a9e7adcb57673a183cea8b06eb778dca859181b5
[root@localhost ~]# podman run -it alpine
进入alpine并修改配置源
/ # cd /etc/apk
/etc/apk # cat repositories 
https://dl-cdn.alpinelinux.org/alpine/v3.16/main
https://dl-cdn.alpinelinux.org/alpine/v3.16/community
/etc/apk # sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/reposito
ries 
修改完成后更新一下源
/etc/apk # apk update
fetch https://mirrors.aliyun.com/alpine/v3.16/main/x86_64/APKINDEX.tar.gz
fetch https://mirrors.aliyun.com/alpine/v3.16/community/x86_64/APKINDEX.tar.gz
v3.16.2-116-g2169fbddca [https://mirrors.aliyun.com/alpine/v3.16/main]
v3.16.2-118-g015d8ff923 [https://mirrors.aliyun.com/alpine/v3.16/community]
OK: 17025 distinct packages available
/etc/apk # 
创建一个apache用户
/etc/apk # adduser -SHs /sbin/nologin apache
把 /httpd/下的files复制到alpine的/tmp中,并在alpine中解压
[root@localhost ~]# cd httpd/
[root@localhost httpd]# podman cp files f24c987392c5:/tmp/
/etc/apk # cd /tmp/
/tmp # ls
files
/tmp # tar xf files/apr-1.7.0.tar.gz
/tmp # tar xf files/apr-util-1.6.1.tar.gz
/tmp # tar xf files/httpd-2.4.54.tar.gz

创建一个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

[root@localhost ~]# cd httpd
[root@localhost ~]# vim Dockerfile
[root@localhost httpd]# cat Dockerfile 
FROM alpine

LABEL MANTAINER "niebr 2951232847@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 httpd]# 
创建镜像
[root@localhost ~]# podman build -t daojiang/httpd:v2.0 httpd
Successfully tagged localhost/daojiang/httpd:v2.0
6b5f4078a7028e498c4c3146a3dd6e05b80d3d3c438b38657c56e3d63e66d76f
[root@localhost ~]# podman images
REPOSITORY                 TAG         IMAGE ID      CREATED        SIZE
localhost/daojiang/httpd   v2.0        6b5f4078a702  4 minutes ago  120 MB
localhost/daojiang/httpd   v1.3        b768dd94b6ee  23 hours ago   417 MB
docker.io/library/alpine   latest      9c6f07244728  3 weeks ago    5.83 MB
docker.io/library/busybox  latest      beae173ccac6  8 months ago   1.46 MB
[root@localhost ~]# 
上传镜像
[root@localhost ~]# podman login
Username: daojiang
Password: 
Login Succeeded!
[root@localhost ~]# podman push daojiang/httpd:v2.0
Getting image source signatures
Copying blob 11caf4a3a85f done  
Copying blob 43a48a3dce65 done  
Copying blob 994393dc58e7 skipped: already exists  
Copying config 6b5f4078a7 done  
Writing manifest to image destination
Storing signatures
[root@localhost ~]# 

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 	//关机

posted @   niebangrui  阅读(519)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
点击右上角即可分享
微信分享提示