一.配置docker
安装docker
[root@localhost yum.repos.d]# yum -y install wget vim //安装wget和vim
[root@localhost yum.repos.d]# ls
CentOS-Base.repo epel.repo epel-testing.repo
epel-modular.repo epel-testing-modular.repo redhat.repo
[root@localhost yum.repos.d]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo //下载docker源
[root@localhost yum.repos.d]# ls
CentOS-Base.repo epel.repo redhat.repo
docker-ce.repo epel-testing-modular.repo
epel-modular.repo epel-testing.repo
[root@localhost ~]# dnf makecache //建立缓存
[root@localhost ~]# dnf -y install docker-ce //安装docker-ce
配置docker加速器
[root@localhost ~]# ls /etc/docker //查看配置文件
ls: 无法访问'/etc/docker': 没有那个文件或目录
[root@localhost ~]# systemctl enable --now docker //开启docker,并且加入开机自启
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
[root@localhost ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vend>
Active: active (running) since Sun 2022-04-24 20:26:50 CST
[root@localhost ~]# ls /etc/docker //再次查看,则已经有了配置文件
key.json
[root@localhost ~]# cd /etc/docker/
[root@localhost docker]# ls
key.json
[root@localhost docker]# vim daemon.json
[root@localhost docker]# cat daemon.json
{
"registry-mirrors": ["https://onmth88j.mirror.aliyuncs.com"]
}
[root@localhost docker]# systemctl daemon-reload
[root@localhost docker]# systemctl restart docker
二.创建容器
1.拉取contos镜像
[root@localhost ~]# docker pull centos
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 7 months ago 231MB
[root@localhost ~]# docker run -it --name http centos /bin/bash //使用centos镜像配置httpd容器
[root@8cf8e374dcce /]#
2.下载Apache源码,并且复制到容器中
//开启另一台终端,下载httpd的源码包
[root@localhost ~]# wget https://downloads.apache.org/httpd/httpd-2.4.53.tar.gz
[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 ~]# mkdir anzhuang
[root@localhost ~]# mv *.gz anzhuang/
[root@localhost ~]# ls
anaconda-ks.cfg anzhuang
[root@localhost ~]# docker cp anzhuang http:/usr/src/
3.准备工作
//查看复制到容器内的源码包
[root@8cf8e374dcce /]# cd /usr/src/
[root@8cf8e374dcce src]# ls
anzhuang debug kernels
[root@8cf8e374dcce src]# ls anzhuang/
apr-1.7.0.tar.gz apr-util-1.6.1.tar.gz httpd-2.4.53.tar.gz
[root@8cf8e374dcce src]# cd anzhuang/
//解压源码包
[root@8cf8e374dcce anzhuang]# tar xf apr-1.7.0.tar.gz
[root@8cf8e374dcce anzhuang]# tar xf apr-util-1.6.1.tar.gz
[root@8cf8e374dcce anzhuang]# tar xf httpd-2.4.53.tar.gz
//更换本地yum源为阿里云yum源
[root@8cf8e374dcce ~]# cd /etc/yum.repos.d/
[root@8cf8e374dcce 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@8cf8e374dcce yum.repos.d]# rm -rf *
[root@8cf8e374dcce yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
[root@8cf8e374dcce yum.repos.d]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
[root@8cf8e374dcce yum.repos.d]# yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
[root@8cf8e374dcce yum.repos.d]# sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
[root@8cf8e374dcce yum.repos.d]# sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
[root@8cf8e374dcce ~]# yum clean all
[root@8cf8e374dcce ~]# yum makecache
//下载依赖包
[root@8cf8e374dcce ~]# yum -y install gcc make expat-devel pcre-devel openssl-devel
//创建一个名为apache的系统用户,并且不生成家目录,拒绝登录
[root@8cf8e374dcce ~]# useradd -r -M -s /sbin/nologin apache
[root@8cf8e374dcce ~]# id apache
uid=998(apache) gid=996(apache) groups=996(apache)
4.编译安装httpd
[root@8cf8e374dcce anzhuang]# cd apr-1.7.0
[root@8cf8e374dcce apr-1.7.0]# vi configure
$RM "$cfgfile"
[root@8cf8e374dcce apr-1.7.0]# ./configure --prefix=/usr/local/apr
[root@8cf8e374dcce apr-1.7.0]# make && make install
[root@8cf8e374dcce anzhuang]# cd apr-util-1.6.1
[root@8cf8e374dcce apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@8cf8e374dcce apr-util-1.6.1]# make && make install
[root@8cf8e374dcce anzhuang]# cd httpd-2.4.53
[root@8cf8e374dcce 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@8cf8e374dcce httpd-2.4.53]# make && make install
5.配置httpd
//修改环境变量
[root@8cf8e374dcce httpd-2.4.53]# ls /usr/local/apache/
bin cgi-bin error icons logs manual
build conf htdocs include man modules
[root@8cf8e374dcce httpd-2.4.53]# echo 'export PATH=/usr/local/apache/bin:$PATH' > /etc/profile.d/apache.sh
[root@8cf8e374dcce httpd-2.4.53]# source /etc/profile.d/apache.sh
[root@8cf8e374dcce httpd-2.4.53]# which httpd
/usr/local/apache/bin/httpd
//取消警告信息
[root@8cf8e374dcce ~]# cd /usr/local/apache/conf/
[root@8cf8e374dcce conf]# ls
extra httpd.conf magic mime.types original
[root@8cf8e374dcce conf]# vim httpd.conf
ServerName www.example.com:80 //取消这一行的注释
//开启Apache
[root@8cf8e374dcce conf]# apachectl start
[root@8cf8e374dcce conf]# ss -antl //查看端口,默认为80端口
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@localhost ~]# docker commit -a 'sean <1@2.com>' -c 'CMD ["/usr/local/apache/bin/httpd","-D","FOREGROUND"]' -p http httpd:v0.1
sha256:c36539197455ff19ba7865b70340b2060a13e7c9827370b0d613ed1312974328
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd v0.1 c36539197455 13 seconds ago 647MB
centos latest 5d0da3dc9764 7 months ago 231MB
//使用制作的镜像,创造容器
[root@localhost ~]# docker run -d --name web -p 80:80 httpd:v0.1
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
51c59d69f9bb httpd:v0.1 "/usr/local/apache/b…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, :::80->80/tcp web
浏览器输入ip地址,即可看到默认页面
效果图:
缩减镜像大小
删除镜像中,不需要的东西,即可缩小
[root@8cf8e374dcce /]# du -sh *
0 bin
0 dev
2.4M etc
0 home
0 lib
0 lib64
0 lost+found
0 media
0 mnt
0 opt
du: cannot read directory 'proc/32190/map_files': Permission denied
du: cannot read directory 'proc/32191/map_files': Permission denied
du: cannot read directory 'proc/32192/map_files': Permission denied
du: cannot read directory 'proc/32193/map_files': Permission denied
du: cannot read directory 'proc/32194/map_files': Permission denied
du: cannot access 'proc/32205/task/32205/fd/4': No such file or directory
du: cannot access 'proc/32205/task/32205/fdinfo/4': No such file or directory
du: cannot access 'proc/32205/fd/4': No such file or directory
du: cannot access 'proc/32205/fdinfo/4': No such file or directory
0 proc
32K root
4.0K run
0 sbin
0 srv
0 sys
12K tmp
537M usr
82M var
[root@8cf8e374dcce /]# cd /var
[root@8cf8e374dcce var]# du -sh *
0 adm
55M cache
0 crash
0 db
0 empty
0 ftp
0 games
0 gopher
0 kerberos
26M lib
0 local
0 lock
1.7M log
0 mail
0 nis
0 opt
0 preserve
0 run
0 spool
0 tmp
0 yp
[root@8cf8e374dcce var]# cd cache/
[root@8cf8e374dcce cache]# ls
bpf dnf ldconfig private
[root@8cf8e374dcce cache]# rm -rf *
[root@8cf8e374dcce cache]# ls
[root@8cf8e374dcce cache]#
[root@8cf8e374dcce /]# cd /usr/
[root@8cf8e374dcce usr]# du -sh *
36M bin //程序
0 games
14M include //头文件
41M lib //库文件
126M lib64
56M libexec
47M local
11M sbin
59M share
151M src //软件包解压包,可删除
0 tmp
[root@8cf8e374dcce usr]# cd src/
[root@8cf8e374dcce src]# ls
anzhuang debug kernels
[root@8cf8e374dcce src]# rm -rf anzhuang/
[root@8cf8e374dcce src]# ls
debug kernels
[root@8cf8e374dcce usr]# yum -y remove gcc make //删除编译工具
//再次从另一个终端制作镜像,可看到镜像大小大幅度缩减
[root@localhost ~]# docker commit -a 'sean <1@2.com>' -c 'CMD ["/usr/local/apache/bin/httpd","-D","FOREGROUND"]' -p http httpd:v0.2
sha256:84bb7db27aea9938c9b67baa6e8682c1b8ef1d1860cb383d86759ba8d76167e7
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd v0.2 84bb7db27aea 6 seconds ago 354MB
httpd v0.1 c36539197455 58 minutes ago 647MB
centos latest 5d0da3dc9764 7 months ago 231MB