docker自主搭建httpd,编译式安装,上传docker hub方法
[root@localhost yum.repos.d]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@localhost yum.repos.d]# ls //配置好源,和docker的安装包
CentOS-Base.repo epel-modular.repo epel-testing-modular.repo
docker-ce.repo epel.repo epel-testing.repo
[root@localhost yum.repos.d]# dnf -y install --allowerasing docker-ce
//安装docker
[root@localhost ~]# systemctl start docker
//启动docker
[root@localhost ~]# docker version //看docker的版本
Client: Docker Engine - Community
Version: 20.10.14
API version: 1.41
Go version: go1.16.15
Git commit: a224086
Built: Thu Mar 24 01:47:44 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[root@localhost ~]# cd /etc/docker/ //进到这个目录下配置加速器
[root@localhost docker]# ls
key.json
[root@localhost docker]# vi daemon.json
[root@localhost docker]# cat daemon.json
{
"registry-mirrors": ["https://6somtdrl.mirror.aliyuncs.com"]
}
[root@localhost ~]# docker search busybox //在网上查看busybox的安装包有哪些
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
busybox Busybox base image. 2579 [OK] radial/busyboxplus
[root@localhost ~]# docker pull busybox //拉取镜像,默认不接版本表示拉取名叫最新的版本
[root@localhost ~]# docker images //查看拉取下来的版本信息
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 1a80408de790 12 days ago 1.24MB
[root@localhost ~]# docker run -it --name test1 busybox //开启一个叫test1的docker进程镜像是busybox
/ #
[root@localhost ~]# docker ps //到另外一台虚拟机上查看当前的docker进程,可以看到test1已启动
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2534bf5f2b97 busybox "sh" 20 seconds ago Up 19 seconds test1
创建网站:
[root@localhost ~]# docker run -it --name test1 busybox
/ # pwd //查看当前位置
/
/ # mkdir data //创建一个叫data的文件夹
/ # echo "hello world" > data/index.html //写一个文件到现在创建的index.html下
/ # cat data/index.html //看一下/data/index.html下的文件
hello world
[root@localhost ~]# docker run -it --name test2 busybox //对面起一台test2
/ # ls //这里面没有test1的data文件夹,得出结论,他们互不干扰
bin dev etc home proc root sys tmp usr var
/ #
/ # exit //退出(退出后,当前的test2自动退出,但不删除)
[root@localhost ~]# docker ps -a //查看docker的进程下有哪些
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68bdcc2771f1 busybox "sh" 3 minutes ago Exited (0) About a minute ago test2
2534bf5f2b97 busybox "sh" 18 minutes ago Up 18 minutes test1
[root@localhost ~]# docker rm test2 //删除docker的test2容器(空格可接多个名称删除)
test2
[root@localhost ~]# docker ps -a //核实,已删除
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2534bf5f2b97 busybox "sh" 20 minutes ago Up 20 minutes test1
[root@localhost ~]# docker run -d httpd //创建一个docker,不给名字,的httpd服务
//如果没装httpd服务,则开始自动安装httpd服务
Unable to find image 'httpd:latest' locally
latest: Pulling from library/httpd
1fe172e4850f: Pull complete
e2fa1fe9b1ec: Pull complete
60dd7398e74e: Pull complete
ea2ca81c6d4c: Pull complete
f646c69a26ec: Pull complete
Digest: sha256:e02a2ef36151905c790efb0a8472f690010150f062639bd8c0760e7b1e884c07
//这是id号
Status: Downloaded newer image for httpd:latest
e8f352a872ba053d22d6a8b73deecaf38167a9b7f383931658c95b3463837300
[root@localhost ~]# docker run -d httpd
f656c852b67989335ad2f32e80ec3a258c96d255bf97ccf2e5501fe0a224a04a
[root@localhost ~]# docker run -d httpd
4321e512ff40fee7778ca287f9c7f0ebf252c951da241b9292191402ba97515e
[root@localhost ~]# docker run -d httpd
4f3a2c97911b273cd700405df426957310eb1df5d89424a2580da6ab7c192071
^[[A[root@localhost ~]# docker run -d httpd
afb7dd5af5a09ae9b79716964908a793f18e9575f2ef852b21507dd32dc3cc1c
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
afb7dd5af5a0 httpd "httpd-foreground" About a minute ago Up About a minute 80/tcp distracted_booth
4f3a2c97911b httpd "httpd-foreground" About a minute ago Up About a minute 80/tcp elastic_grothendieck
4321e512ff40 httpd "httpd-foreground" About a minute ago Up About a minute 80/tcp blissful_raman
f656c852b679 httpd "httpd-foreground" About a minute ago Up About a minute 80/tcp cranky_thompson
e8f352a872ba httpd "httpd-foreground" About a minute ago Up About a minute 80/tcp dazzling_blackwell
2534bf5f2b97 busybox "sh" 25 minutes ago Up 25 minutes test1
[root@localhost ~]# docker ps -q //docker 带-q查询,查询前面的id号
afb7dd5af5a0
4f3a2c97911b
4321e512ff40
f656c852b679
e8f352a872ba
2534bf5f2b97
[root@localhost ~]# docker rm -f $(docker ps -q|head -5)
//docker 删除绝对文件里面的docker id号 ,的前5个(个人理解)
afb7dd5af5a0
4f3a2c97911b
4321e512ff40
f656c852b679
e8f352a872ba
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2534bf5f2b97 busybox "sh" 30 minutes ago Up 30 minutes test1
创建镜像:
[root@localhost ~]# docker run -it --name test1 busybox
/ # pwd
/
/ # mkdir data
/ # echo "hello world" > data/index.html
/ # cat data/index.html
hello world
/ #
//保证docker还在运行
[root@localhost ~]# docker commit -p test1
//-p,暂停test1,并生成镜像,但是会没有名字和版本号
sha256:1a4b397b2b44b54544ff10e7710467a10c16205709be90263705743946bc9d26
[root@localhost ~]# docker images //第一个就是我们刚刚做的镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 1a4b397b2b44 8 seconds ago 1.24MB
httpd latest c30a46771695 5 days ago 144MB
busybox latest 1a80408de790 12 days ago 1.24MB
[root@localhost ~]# docker tag 1a4b397b2b44 test1:v6.66
//docker刚刚第一个的id打上tag标签,名叫test1,版本号为v6.66
[root@localhost ~]# docker run -it --name test2 test1:v6.66
/ # ls
bin data dev etc home proc root sys tmp usr var
/ # cat data/index.html
hello world
/ # exit
//安装这个镜像,查看下面是否有data目录,然后看一下里面文件确实是之前创建的,这表示成功创建了个镜像,但这个镜像一退出会立即停止掉
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f43a297dfad5 test1:v6.66 "sh" 3 minutes ago Exited (0) 2 minutes ago test2
2534bf5f2b97 busybox "sh" 2 hours ago Up 2 hours test1
[root@localhost ~]# docker start test2
test2
//启动咱们的test2,查看,确实已启动
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f43a297dfad5 test1:v6.66 "sh" 5 minutes ago Up 24 seconds test2
2534bf5f2b97 busybox "sh" 2 hours ago Up 2 hours test1
我想退出后还保持运行状态:
[root@localhost ~]# docker stop test2 //现场停掉test2
test2
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f43a297dfad5 test1:v6.66 "sh" 20 minutes ago Exited (137) 10 seconds ago test2
2534bf5f2b97 busybox "sh" 2 hours ago Exited (137) 19 seconds ago test1
[root@localhost ~]# docker exec -it test2 /bin/sh //在停止状态下是进不去的
Error response from daemon: Container f43a297dfad560c6ffab67ceee03afcad922c3d22cd78dd0125c8fbbb78d29f6 is not running
[root@localhost ~]# docker run -itd --name test3 test1:v6.66
//创建一个test3的docker,加上-itd表示退出后继续执行,用test1的镜像
//-it是交互模式,加上d的话表示后台运行模式(不能单独-d运行,因为sh命令不支持在后台单独运行,-it相当于给一个平台,连平台都没有,那么在这个平台上的sh是无法运行的,但是有些程序可以)
255f8170d5736632016ae9cce061e7b03e5fd6b4eafd1c22611f0e938cc2f323
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
255f8170d573 test1:v6.66 "sh" 12 seconds ago Up 12 seconds test3
f43a297dfad5 test1:v6.66 "sh" 24 minutes ago Exited (137) 3 minutes ago test2
2534bf5f2b97 busybox "sh" 2 hours ago Exited (137) 4 minutes ago test1
[root@localhost ~]# docker exec -it test3 /bin/sh
/ #
/ # exit
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
255f8170d573 test1:v6.66 "sh" 2 minutes ago Up 2 minutes test3
f43a297dfad5 test1:v6.66 "sh" 26 minutes ago Exited (137) 6 minutes ago test2
2534bf5f2b97 busybox "sh" 3 hours ago Exited (137) 6 minutes ago test1
//可以看到退出后仍在运行
[root@localhost ~]# docker run -d httpd //可以看到httpd支持后台运行,因为他默认有程序
73cb6caec14d6d215e3a3ba3e8e765a5be457d20cff1bf2b75f45ea1a9272433
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
73cb6caec14d httpd "httpd-foreground" 10 seconds ago Up 9 seconds 80/tcp inspiring_goldwasser
255f8170d573 test1:v6.66 "sh" 10 minutes ago Up 10 minutes test3
登录上传镜像:
[root@localhost ~]# docker login
//登录,不带地址为默认的docker hub,-p-u,一个是指定用户,一个是指定密码
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: feigeaq
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 images
REPOSITORY TAG IMAGE ID CREATED SIZE
test1 v6.66 1a4b397b2b44 2 hours ago 1.24MB
httpd latest c30a46771695 6 days ago 144MB
busybox latest 1a80408de790 12 days ago 1.24MB
[root@localhost ~]# docker push test1:v6.66
The push refers to repository [docker.io/library/test1]
779a631c37ad: Preparing
eb6b01329ebe: Preparing
denied: requested access to the resource is denied
//直接上传会报错,镜像不能用
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
feigeaq/test1 6.66 1a4b397b2b44 3 hours ago 1.24MB
test1 v6.66 1a4b397b2b44 3 hours ago 1.24MB
feigeaq/busybox 6.66 1a4b397b2b44 3 hours ago 1.24MB
httpd latest c30a46771695 6 days ago 144MB
busybox latest 1a80408de790 12 days ago 1.24MB
[root@localhost ~]# docker push feigeaq/busybox:6.66
//改名,格式为账户加busybox加版本号才能上传
The push refers to repository [docker.io/feigeaq/busybox]
779a631c37ad: Pushed
eb6b01329ebe: Pushed
6.66: digest: sha256:ce826f32e01167c4fe4667a511795d3ecb2000fa62da7efa3c4a92fc0f78e076 size: 734
作业:
1.配置好本机的CentOS 镜像和Epel 镜像,为阿里源
[root@localhost ~]# cd /etc/yum.repos.d/
[root@lch yum.repos.d]# ls
CentOS-Base.repo epel-modular.repo epel-testing-modular.repo
docker-ce.repo epel.repo epel-testing.repo
[root@localhost yum.repos.d]# dnf -y install --allowerasing docker-ce
//安装docker
[root@localhost ~]# systemctl start docker
//启动docker
[root@localhost ~]# cd /etc/docker/ //进到这个目录下配置加速器
[root@localhost docker]# ls
key.json
[root@localhost docker]# vi daemon.json
[root@localhost docker]# cat daemon.json
{
"registry-mirrors": ["https://6somtdrl.mirror.aliyuncs.com"]
}
[root@localhost ~]# docker pull centos:8 //拉取centos8镜像
[root@localhost ~]# docker images //看有哪些镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 8 5d0da3dc9764 7 months ago 231MB
[root@localhost ~]# docker run -it --name httpd centos:8 /bin/bash //创建一个httpd的docker服务,这里千万不能带-d,否则会出不知名的错误
[root@aeff38b6697b /]#
[root@aeff38b6697b /]# cd /etc/yum.repos.d/
[root@d1040fce381b yum.repos.d]# ls
CentOS-Linux-AppStream.repo CentOS-Linux-FastTrack.repo
CentOS-Linux-BaseOS.repo CentOS-Linux-HighAvailability.repo
CentOS-Linux-ContinuousRelease.repo CentOS-Linux-Media.repo
CentOS-Linux-Debuginfo.repo CentOS-Linux-Plus.repo
CentOS-Linux-Devel.repo CentOS-Linux-PowerTools.repo
CentOS-Linux-Extras.repo CentOS-Linux-Sources.repo
[root@d1040fce381b yum.repos.d]# rm -rf *
[root@d1040fce381b yum.repos.d]# ls
[root@d1040fce381b yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
[root@d1040fce381b yum.repos.d]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
[root@d1040fce381b yum.repos.d]# yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
[root@d1040fce381b yum.repos.d]# sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
[root@d1040fce381b yum.repos.d]# sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
[root@d1040fce381b yum.repos.d]# yum clean all
[root@d1040fce381b yum.repos.d]# yum makecache
//下载apache安装包
[root@localhost ~]# wget https://downloads.apache.org/apr/apr-1.7.0.tar.gz
[root@localhost ~]# wget https://downloads.apache.org/apr/apr-util-1.6.1.tar.gz
[root@localhost ~]# wget https://downloads.apache.org/httpd/httpd-2.4.53.tar.gz
//将安装包上传到httpd容器上
[root@localhost ~]# docker cp httpd-2.4.53.tar.gz httpd:/usr/src/
[root@localhost ~]# docker cp apr-util-1.6.1.tar.gz httpd:/usr/src/
[root@localhost ~]# docker cp apr-1.7.0.tar.gz httpd:/usr/src/
[root@localhost ~]# docker exce -it httpd /bin/bash
[root@d1040fce381b ~]# ls /usr/src/
apr-1.7.0.tar.gz apr-util-1.6.1.tar.gz debug httpd-2.4.53.tar.gz kernels
//准备apache的基础环境
[root@d1040fce381b ~]# yum groups mark install 'Development Tools' -y
[root@d1040fce381b ~]# yum -y install openssl-devel pcre-devel expat-devel libtool gcc gcc-c++ make
[root@d1040fce381b ~]# useradd -r -M -s /sbin/nologin apache
//编译安装httpd,此操作和之前编译httpd一样
[root@d1040fce381b ~]# cd /usr/src/
[root@d1040fce381b src]# tar -xf apr-1.7.0.tar.gz
[root@d1040fce381b src]# cd apr-1.7.0
[root@d1040fce381b apr-1.7.0]# vi configure
cfgfile="${ofile}T"
trap "$RM \"$cfgfile\"; exit 1" 1 2 15
$RM "$cfgfile" //将此行加上注释,或者删除此行
[root@d1040fce381b apr-1.7.0]# ./configure --prefix=/usr/local/apr
[root@d1040fce381b apr-1.7.0]# make
[root@d1040fce381b apr-1.7.0]# make install
[root@d1040fce381b apr-1.7.0]# cd ..
[root@d1040fce381b src]# tar -xf apr-util-1.6.1.tar.gz
[root@d1040fce381b src]# cd apr-util-1.6.1
[root@d1040fce381b apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
[root@d1040fce381b apr-util-1.6.1]# make
[root@d1040fce381b apr-util-1.6.1]# make install
[root@d1040fce381b apr-util-1.6.1]# cd ..
[root@d1040fce381b src]# tar -xf httpd-2.4.53.tar.gz
[root@d1040fce381b src]# cd httpd-2.4.53
[root@d1040fce381b 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=prefork
[root@d1040fce381b httpd-2.4.53]# make
[root@d1040fce381b httpd-2.4.53]# make install
//设置环境变量 做映射关系 头文件 man文件
[root@d1040fce381b httpd-2.4.53]# echo 'export PATH=/usr/local/apache/bin:$PATH' > /etc/profile.d/apache.sh
[root@d1040fce381b httpd-2.4.53]# source /etc/profile.d/apache.sh
[root@d1040fce381b httpd-2.4.53]# yum -y install which
[root@d1040fce381b httpd-2.4.53]# which httpd
/usr/local/apache/bin/httpd
[root@d1040fce381b httpd-2.4.53]# ln -s /usr/local/apache/include/ /usr/include/apache
[root@lch conf]# vi httpd.conf
#ServerName www.example.com:80 // 此行取消注释
[root@d1040fce381b ~]# apachectl start
[root@d1040fce381b ~]# 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@d1040fce381b ~]# echo "/usr/sbin/httpd -DFOREGROUND" > start.sh
[root@d1040fce381b ~]# chmod a+x start.sh //给启动脚本添加运行权限
//制作镜像
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d1040fce381b centos:8 "/bin/bash" 54 minutes ago Up 50 minutes httpd
[root@localhost ~]# docker commit -p -c 'CMD ["/bin/bash","/start.sh"]' d1040fce381b feigeaq/httpd:v1.0
sha256:95d3c31094384d922ebe113bc4bb48a53156974fa92d380e534aed2385acc417
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
feigeaq/httpd v1.0 95d3c3109438 39 seconds ago 749MB
centos 8 5d0da3dc9764 7 months ago 231MB
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d1040fce381b centos:8 "/bin/bash" 58 minutes ago Up 54 minutes httpd
[root@localhost ~]# docker stop httpd
httpd
//验证
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# docker run -dit -p 80:80 --name web feigeaq/httpd:v1.0 /bin/bash
d72748777112a65378dba45888f2460c5d38f3718a620702bd336e88e40553cf
[root@localhost ~]# . /start.sh
[root@localhost ~]# docker exec -it web /bin/bash
[root@d72748777112 /]#
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d72748777112 feigeaq/httpd:v1.0 "/bin/bash" 38 seconds ago Up 37 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp web
如果想上传到自己的docker hub里就参考文章的开头哈,这里不做概述:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通