实验环境
一台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 nginxnginx-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 nginxnginx 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]# lsjdk-8u91-linux-x64.tar.gz
[root@CentOS7-02 tomcat]# tar zxf jdk-8u91-linux-x64.tar.gz
[root@CentOS7-02 tomcat]# lsjdk1.8.0_91
jdk-8u91-linux-x64.tar.gz
2.托入tomcat软件包(还是上面的目录)
[root@CentOS7-02 tomcat]# ls | grep apacheapache-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
#镜像中移动位置,重命名为 tomcatRUN 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 tomcattomcat 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]# lscentOS7.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
#初始化mariadbmysql_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]# lscentOS7.repo db_init.sh Dockerfile run.sh
4)生成镜像
[root@CentOS7-02 mariadb]# docker build -t mariadb:ajbn .
[root@CentOS7-02 mariadb]# docker images | grep mariadbmariadb 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)]>
exitBye
实验完毕 !