nginx容器,tomcat容器,mariadb容器构建(离线版),以及./configure: error: C compiler cc is not found报错解决

实验环境

一台centos7 IP 192.168.100.102 宿主机

安装好docker服务,并载入centos7.4基础镜像

然后是安装Nginx时候,./configure: error: C compiler cc is not found,这个报错,是缺少gcc编译器,是兼容性的问题,
需要centos7.4或者更低版本centos7的基础镜像,

因为本例nginx服务的基础包,需要兼容性,如果使用较高的centos7,就会报错,nginx包的包名如下

nginx-1.12.0.tar.gz这个版本的nginx需要 centos7.4或者更低版本的centos7的基础镜像

[root@CentOS7-02 ~]# docker images
在这里插入图片描述

构建nginx容器

1)宿主机发布软件源

因为镜像创建的时候需要使用yum安装软件包,所以

宿主机使用http方式,发布软件源,软件源为centos7光盘

宿主机安装并开启http服务
挂载光盘,配置本地yum源
[root@CentOS7-02 ~]# yum -y install httpd && systemctl start httpd

创建共享目录
[root@CentOS7-02 ~]# cd /var/www/html/
[root@CentOS7-02 html]# mkdir centos7
[root@CentOS7-02 html]# mount /dev/cdrom centos7/
[root@CentOS7-02 html]# ls centos7/
CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7
EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL

2)创建并编写Dockerfile文件

[root@CentOS7-02 html]# cd /root/
[root@CentOS7-02 ~]# mkdir nginx
[root@CentOS7-02 ~]# cd nginx/
[root@CentOS7-02 nginx]# vim Dockerfile
(按照我,下面两张图片打,如果你不想手打,后面有打好的,可以直接复制)
在这里插入图片描述

在这里插入图片描述

(下面这是打好的,可以直接复制)

#基础镜像
FROM dadoha/centos7.4.1708

#新镜像作者信息,随意写
MAINTAINER ajbn

#yum安装必要基础包
RUN rm -rf /etc/yum.repos.d/*
ADD centOS7.repo /etc/yum.repos.d/
RUN yum -y install proc-devel net-tools gcc zlib zlib-devel make openssl-devel

#传入nginx包,
COPY nginx-1.12.0.tar.gz /
RUN tar zxf /nginx-1.12.0.tar.gz

#编译安装nginx, # WORKDIR类似切换目录的意思,
WORKDIR /nginx-1.12.0
RUN ./configure --prefix=/usr/local/nginx && make && make install

#开启端口 443是https端口
EXPOSE 80
EXPOSE 443

#修改Nginx配置文件,以非daemon方式启动
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf

#复制启动脚本WORKDIR /
ADD run.sh /
RUN chmod 755 /run.sh

#运行启动脚本
CMD ["/run.sh"]

3)其他配置

[root@CentOS7-02 nginx]# cp /etc/yum.repos.d/centOS7.repo /root/nginx/
(把本地的.repo改一下名称,为我这样,再复制)

[root@CentOS7-02 nginx]# vim centOS7.repo (改成如下)
[local]
name=centos7
baseurl=http://192.168.100.102/centos7
enabled=1
gpgcheck=0

把nginx软件包拖入,
[root@CentOS7-02 nginx]# pwd
/root/nginx
[root@CentOS7-02 nginx]# ls | grep nginx
nginx-1.12.0.tar.gz

4)编写执行脚本内容

[root@CentOS7-02 nginx]# pwd
[root@CentOS7-02 nginx]# vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx

5)生成镜像

[root@CentOS7-02 nginx]# docker build -t nginx:ajbn .
[root@CentOS7-02 nginx]# docker images | grep nginx
nginx ajbn 423f1bc9a75f 17 minutes ago 309MB

6)启动容器进行测试

[root@CentOS7-02 nginx]# docker run -d --name nginx -P nginx:ajbn
(-P(大写) 会自动映射容器中所有的端口,而-p需要一个一个的指定映射端口)

[root@CentOS7-02 nginx]# docker ps -a | grep nginx
(你们的自动映射的端口号,可能和我这里不一样,注意看 80前面的那个端口,一会去访问这个端口测试)
在这里插入图片描述

7)访问测试

浏览器访问测试

构建Tomcat容器

1)建立工作目录,并拖入相关软件

[root@CentOS7-02 ~]# cd /root/
[root@CentOS7-02 ~]# mkdir tomcat
[root@CentOS7-02 ~]# cd tomcat/

1.托入JDK,到宿主机
[root@CentOS7-02 tomcat]# ls
jdk-8u91-linux-x64.tar.gz
[root@CentOS7-02 tomcat]# tar zxf jdk-8u91-linux-x64.tar.gz
[root@CentOS7-02 tomcat]# ls
jdk1.8.0_91 jdk-8u91-linux-x64.tar.gz

2.托入tomcat软件包(还是上面的目录)
[root@CentOS7-02 tomcat]# ls | grep apache
apache-tomcat-8.5.16.tar.gz

2)编写Dockerfile

[root@CentOS7-02 tomcat]# vim Dockerfile
(按照下图打,后面也有打好的,可以直接复制)

在这里插入图片描述

(下面这些是打好的,可以直接复制)

FROM dadoha/centos7.4.1708
MAINTAINER ajbn

#设置JDK设置变量
ADD jdk1.8.0_91 /usr/local/java
ENV JAVA_HOME /usr/local/java
ENV JAVA_BIN /usr/local/java/bin
ENV JRE_HOME /usr/local/java/jre
ENV PATH $PATH:/usr/local/java/bin/:/usr/local/java/jre/bin
#注意变量名和值要在一行(可以自动换行),我这里显示成了两行,直接复制就行
ENV CLASSPATH /usr/local/java/jre/bin:/usr/local/java/lib:/usr/local/java/jre/lib/charsets.jar

#移动tomcat软件包,
COPY apache-tomcat-8.5.16.tar.gz /
RUN tar zxf /apache-tomcat-8.5.16.tar.gz

#镜像中移动位置,重命名为 tomcat
RUN mv /apache-tomcat-8.5.16 /usr/local/tomcat

#开启80端口
EXPOSE 80

#启动容器是添加并执行脚本
ADD run.sh /
RUN chmod 755 /run.sh
CMD ["/run.sh"]

3)创建启动脚本

[root@CentOS7-02 tomcat]# vim run.sh
#!/bin/bash
/usr/local/tomcat/bin/startup.sh
tailf /run

[root@CentOS7-02 tomcat]# ls
在这里插入图片描述

4)生成镜像

[root@CentOS7-02 tomcat]# docker build -t tomcat:ajbn .
[root@CentOS7-02 tomcat]# docker images | grep tomcat
tomcat ajbn 26ed44176747 42 minutes ago 598MB

5)创建容器并访问测试

[root@CentOS7-02 tomcat]# docker run -d --name tomcat -p 8888:8080 tomcat:ajbn
(把宿主机本地8888端口,转换到容器的 8080端口)
[root@CentOS7-02 tomcat]# docker ps | grep tomcat
在这里插入图片描述

浏览器访问 http://192.168.100.102:8888/

成功如下
在这里插入图片描述

构建mariadb容器

1)建立工作目录

[root@CentOS7-02 ~]# cd /root/
[root@CentOS7-02 ~]# mkdir mariadb

.repo文件,直接使用刚刚Nginx工作目录的

[root@CentOS7-02 mariadb]# cp /root/nginx/centOS7.repo /root/mariadb/
[root@CentOS7-02 mariadb]# ls
centOS7.repo

2)创建Dockerfile文件

[root@CentOS7-02 mariadb]# vim Dockerfile
(后面也有打好的,可以直接复制)
在这里插入图片描述

FROM dadoha/centos7.4.1708
MAINTAINER ajbn
RUN rm -rf /etc/yum.repos.d/*
ADD centOS7.repo /etc/yum.repos.d/

#安装mariadb数据库
RUN yum -y install mariadb-server mariadb net-tools

#设置环境变量,便于管理
ENV MARIADB_USER root
ENV MARIADB_PASS 123456
#让容器支持中文
ENV LC_ALL en_US.UTF-8

#初始化数据库
ADD db_init.sh /
RUN chmod 775 /db_init.sh
RUN /db_init.sh

#导出端口
EXPOSE 3306

#添加启动文件
ADD run.sh /
RUN chmod 775 /run.sh

#设置默认启动命令
CMD ["/run.sh"]

3)创建其他相关文件

1.编写初始化配置文件
[root@CentOS7-02 mariadb]# vim db_init.sh
(我后面也有打好的,可以直接复制)
在这里插入图片描述

(下面这些是打好的)

#!/bin/bash

#初始化mariadb
mysql_install_db --user=mysql

#sleep3的意思是,停止3秒,再运行下面的
sleep 3

#启动mariadb服务
mysqld_safe &

sleep 3
#设置root用户密码,这里变量是刚刚Dockerfile中的
mysql -e "use mysql; grant all privileges on *.* to '$MARIADB_USER'@'%' identified by '$MARIADB_PASS' with grant option;"

h=$(hostname)

mysql -e "use mysql; update user set password=password('$MARIADB_PASS') where user='$MARIADB_USER' and host='$h';"

#刷新策略,生效
mysql -e "flush privileges;"

2.编写启动文件
[root@CentOS7-02 mariadb]# vim run.sh
#!/bin/bash
mysqld_safe

应该有如下4个文件
[root@CentOS7-02 mariadb]# ls
centOS7.repo db_init.sh Dockerfile run.sh

4)生成镜像

[root@CentOS7-02 mariadb]# docker build -t mariadb:ajbn .

[root@CentOS7-02 mariadb]# docker images | grep mariadb
mariadb ajbn 404d47ef5f2e 24 minutes ago 421MB

5)创建容器并进入容器中的数据库

[root@CentOS7-02 mariadb]# docker run -d --name mariadb -p 33:3306 mariadb:ajbn
(本地33端口映射到容器3306端口)

[root@CentOS7-02 mariadb]# docker ps | grep mariadb
在这里插入图片描述

连接容器中的数据库

首先宿主机,要安装mariadb,要不然没有连接数据库命令
先把光盘挂载到本地,修改yum源

[root@CentOS7-02 mariadb]# mount /dev/cdrom /mnt/
[root@CentOS7-02 mariadb]# vim /etc/yum.repos.d/centOS7.repo (改成如下)
[local]
name=centos7
baseurl=file:///mnt
enabled=1
gpgcheck=0

[root@CentOS7-02 mariadb]# yum -y install mariadb

宿主机连接容器中的数据库
[root@CentOS7-02 mariadb]# mysql -uroot -h 192.168.100.102 -P 33 -p123456

(-P 是自己指定端口,33是宿主机映射到容器中的mariadb 3306 端口,-p是密码 ,密码是刚刚Dockerfile中的USER_PASS变量的值)

(显示,如下就是成功了,)
MariaDB [(none)]>
MariaDB [(none)]> exit
Bye

实验完毕 !

发布了54 篇原创文章 · 获赞 57 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_45308292/article/details/103361968