Dockerfile配置web环境

2018-07-30  本文已影响0人  CapybaraJ

完全是一个空荡荡的镜像,没有使用mysql或者Apache镜像,用的是docker hub上的centos镜像,太他喵干净了,我简直哭了
dockerfile文件分为三个步骤:

#Dockerfile
FROM    centos:7
LABEL   "xxx" <xxx@xxx.cn>
#安装Apache
RUN     yum install -y httpd
#安装MySQL,mariadb就相当于MySQL吧
RUN     yum install -y mariadb-server mariadb       
EXPOSE  3306   
#安装php5.6
RUN     rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm \
        && rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
RUN     yum install -y php56w.x86_64 php56w-cli.x86_64 php56w-common.x86_64 \ 
        php56w-gd.x86_64 php56w-ldap.x86_64 php56w-mbstring.x86_64 \ 
        php56w-mcrypt.x86_64 php56w-mysql.x86_64 php56w-pdo.x86_64
# run.sh主要是启动和配置脚本
COPY    run.sh /root/
RUN     chmod 755 /root/run.sh
#abc.tar.gz是我的web项目,add命令会自动解压的
ADD     abc.tar.gz /var/www/html/
COPY    abc.sql /root/abc.sql

ENTRYPOINT  "/root/run.sh"

说明:php5.6那个安装,我试了一下,目前就这个源比较好用。

# run.sh内容如下
#!/bin/bash
# 主要是mysql启动命令,因为不能使用service,所以用的mysqld_safe,用的用户是root
mysql_install_db
mysqld_safe --defaults-file=/etc/my.cnf --user=root &
# 使用条件判断使得该语句一定能被执行,这句话是设置MySQL密码的,因为默认为空啊
while true
    do 
        mysql -e "update mysql.user set password = password('xxx') where user='root'; FLUSH privileges;" &>/dev/null && break
        sleep 1
    done
# 创建我的数据库
while true
    do 
        mysql -uroot -pxxx -e "create database abc;" &>/dev/null && break
        sleep 1
    done
mysql -uroot -pxxx abc < /root/abc.sql
# 启动Apache
httpd -k start
/bin/bash

最后说一下docker配置的命令,对于构建我们这个环境,足够了:

docker build -t centos:tagname .    //构建docker镜像,最后那个点不要忘了
docker run --rm -i -t centos:tagname    //运行镜像
docker attach xxx   //查看镜像
cat /etc/hosts  //查看ip

最后,如果你实在是想用systemctl这类命令,尝试一下解决办法,我没测过:
配置centos7解决 docker Failed to get D-Bus connection 报错
将你的CMD或者entrypoint设置为/usr/sbin/init即可。会自动将dbus等服务启动起来。

在创建docker容器时添加--privileged
docker run --privileged -ti -e "container=docker" -v /sys/fs/cgroup:/sys/fs/cgroup centos /usr/sbin/init

最后感谢黑暗势力对我的悉心指导,我没把他气死感觉我还是善良的:)

上一篇 下一篇

猜你喜欢

热点阅读