1.docker安装
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
[root@localhost yum.repos.d]# sed -i 's@https://download.docker.com@https://mirrors.tuna.tsinghua.edu.cn/docker-ce@g' docker-ce.repo
[root@localhost yum.repos.d]# yum install -y docker-ce //正常安装
[root@localhost yum.repos.d]# yum install -y docker-ce --allowerasing //--allowerasing自动替换冲突包
docker加速
[root@localhost ~]# systemctl start docker
[root@localhost ~]# cat > /etc/docker/daemon.json <<EOF
> {
> "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
> }
> EOF
[root@localhost ~]# systemctl restart docker
2.准备工作
下载源码包
[root@localhost ~]# wget https://downloads.apache.org/httpd/httpd-2.4.53.tar.gz https://downloads.apache.org/apr/apr-1.7.0.tar.gz https://downloads.apache.org/apr/apr-util-1.6.1.tar.gz
布置容器
[root@localhost ~]# docker pull centos //拉取centos
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 7 months ago 231MB
[root@localhost ~]# docker run -it --name c1 centos /bin/bash //基于centos镜像创建容器c1
#开启新的终端查看
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
834aadeb9298 centos "/bin/bash" 20 seconds ago Up 19 seconds c1
#将apache的源码包传到c1容器内
[root@localhost ~]# docker cp apr-1.7.0.tar.gz c1:/root
[root@localhost ~]# docker cp apr-util-1.6.1.tar.gz c1:/root
[root@localhost ~]# docker cp httpd-2.4.53.tar.gz c1:/root
容器内编译安装httpd
#配置阿里源
[root@834aadeb9298 /]# cd /etc/yum.repos.d/ //删除yum仓库内的官方源
[root@834aadeb9298 yum.repos.d]# rm -rf *
[root@834aadeb9298 yum.repos.d]# ls
[root@834aadeb9298 yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo //配置w为阿里源
[root@834aadeb9298 yum.repos.d]# yum makecache
[root@834aadeb9298 yum.repos.d]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
#安装依赖包
[root@834aadeb9298 ~]# yum groups mark install "Development Tools"
[root@834aadeb9298 ~]# yum -y install openssl-devel pcre-devel expat-devel libtool make vim
#解压
[root@834aadeb9298 ~]# tar xf apr-1.7.0.tar.gz
[root@834aadeb9298 ~]# tar xf apr-util-1.6.1.tar.gz
[root@834aadeb9298 ~]# tar xf httpd-2.4.53.tar.gz
#编译apr
[root@834aadeb9298 ~]# cd apr-1.7.0
[root@834aadeb9298 apr-1.7.0]# vim configure
$RM "$cfgfile" //删除或注释这一条
[root@834aadeb9298 apr-1.7.0]# ./configure --prefix=/usr/local/apr
[root@834aadeb9298 apr-1.7.0]# make
[root@834aadeb9298 apr-1.7.0]# make install
#编译apr-util
[root@834aadeb9298 ~]# cd apr-util-1.6.1
[root@834aadeb9298 apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
[root@834aadeb9298 apr-util-1.6.1]# make
[root@834aadeb9298 apr-util-1.6.1]# make install
#编译httpd
[root@834aadeb9298 httpd-2.4.53]# ./configure --prefix=/usr/local/apache --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=worker
[root@834aadeb9298 httpd-2.4.53]# make
[root@834aadeb9298 httpd-2.4.53]# make install
#设置环境变量
[root@834aadeb9298 ~]# echo 'export PATH=/usr/local/apache/bin:$PATH' > /etc/profile.d/apache.sh
[root@834aadeb9298 ~]# source /etc/profile.d/apache.sh
[root@834aadeb9298 ~]# which apachectl
/usr/local/apache/bin/apachectl
[root@834aadeb9298 ~]# which httpd
/usr/local/apache/bin/httpd
[root@834aadeb9298 ~]# ln -s /usr/local/apache/include/ /usr/include/apache //软连接
[root@834aadeb9298 ~]# vim /usr/local/apache/conf/httpd.conf
#ServerName www.example.com:80 //取消这一条的注释 取消告警信息
[root@834aadeb9298 ~]# apachectl start //开启80端口
[root@834aadeb9298 ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
优化容器
#因为已经安装了所以源码包可以删除
[root@834aadeb9298 /]# cd root/
[root@834aadeb9298 ~]# ls
anaconda-ks.cfg apr-1.7.0.tar.gz httpd-2.4.53
anaconda-post.log apr-util-1.6.1 httpd-2.4.53.tar.gz
apr-1.7.0 apr-util-1.6.1.tar.gz original-ks.cfg
[root@834aadeb9298 ~]# rm -rf *gz
[root@834aadeb9298 ~]# rm -rf apr-1.7.0 httpd-2.4.53 apr-util-1.6.1/
[root@834aadeb9298 ~]# ls
anaconda-ks.cfg anaconda-post.log original-ks.cfg
[root@834aadeb9298 ~]# dnf -y remove gcc make //卸载载编译工具
3.制作镜像
[root@localhost ~]# docker commit -a 'zjgg <1@2.com>' -c 'CMD ["/usr/local/apache/bin/httpd","-D","FOREGROUND"]' -p c1 httpd:v0.1
sha256:abdf3f5724cbb701fc709c698fb6badd1217a708beb42da3449a96575ec97d63
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd v0.1 abdf3f5724cb 8 seconds ago 412MB
centos latest 5d0da3dc9764 7 months ago 231MB
4.运行容器测试
#运行容器 名为web
[root@localhost ~]# docker run -d --name web -p 80:80 httpd:v0.1
e5ab6d65910ca588650c4d78c002bb25e9c9d804c03b7dbbee6aba57904e4f0a
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e5ab6d65910c httpd:v0.1 "/usr/local/apache/b…" 7 seconds ago Up 6 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp web
[root@localhost ~]# docker inspect web | grep "IPAddress" //查看容器详细信息 过滤出ip
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.3",
"IPAddress": "172.17.0.3",
[root@localhost ~]# curl 172.17.0.3 //访问此ip
<html><body><h1>It works!</h1></body></html>
本机也可以访问到默认页面
修改镜像名字和版本
[root@localhost ~]# docker commit -p web //使用正在运行的容器创建一个新的镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 13a121ba015f 3 seconds ago 144MB
busybox latest beae173ccac6 4 months ago 1.24MB
httpd latest dabbfbe0c57b 4 months ago 144MB
[root@localhost ~]# docker tag 13a121ba015f httpd:v0.1 //修改镜像的名字和版本
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd v0.1 13a121ba015f 24 seconds ago 144MB
busybox latest beae173ccac6 4 months ago 1.24MB
httpd latest dabbfbe0c57b 4 months ago 144MB
上传镜像
[root@localhost ~]# docker login //登录docker.hub
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: zhajigaga
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 tag httpd:v0.1 zhajigaga/httpd:20220503 //上传需要修改镜像名 httpd是官方的名字
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zhajigaga/httpd 20220503 13a121ba015f 10 minutes ago 144MB
httpd v0.1 13a121ba015f 10 minutes ago 144MB
busybox latest beae173ccac6 4 months ago 1.24MB
httpd latest dabbfbe0c57b 4 months ago 144MB
[root@localhost ~]# docker push zhajigaga/httpd:20220503 //上传
The push refers to repository [docker.io/zhajigaga/httpd]
591909df3cb2: Pushed
deefaa620a71: Mounted from library/httpd
9cff3206f9a6: Mounted from library/httpd
15e4bf5d0804: Mounted from library/httpd
1da636a1aa95: Mounted from library/httpd
2edcec3590a4: Mounted from library/httpd
20220503: digest: sha256:be26639db6193e9ae78c1e6a11adc2c2b85d34f48253663014db8ee68ca03171 size: 1572
进入网站自己的仓库可以看到