Docker使用dockerfile自动构建LAMP环境镜像

  • 每个不同服务的容器单独创建一个目录创建dockerfile文件:

    [root@docker dockerfile]# mkdir -p /opt/dockerfile/lamp

  • dockerfile文件内容如下:

    [root@docker lamp]# cat dockerfile
    FROM centos:6.9
    RUN mv /etc/yum.repos.d/*.repo /tmp && echo -e "[ftp]\nname=ftp\nbaseusr=ftp://172.17.0.1/centos6.9\ngpgcheck=0"> /etc/yum.repos.d/ftp.repo && yum makecache fast && yum install openssh-server httpd mysql mysql-server php php-mysql -y
    RUN /etc/init.d/sshd start && echo "123456"|passwd root --stdin && /etc/init.d/mysqld start && /etc/init.d/httpd start
    RUN mysql -e "grant all on *.* to root@'%' identified by '123'; grant all on *.* to discuz@'%' identified by '123'; create database discuz charset utf8;"
    COPY init.sh /
    ADD bbs.tar.gz /var/www/html/
    ADD https://mirrors.aliyun.com/centos/7.6.1810/od/x86_64/Packages/centos-bookmarks-7-1.e17.noarch.rpm /tmp
    EXPOSE 22 80 
    CMD ["/bin/bash","/init.sh"]
    
  • 运行一个容器后边只能写一条命令,脚本内容如下:

    [root@docker lamp]# cat init.sh
    #!/bin/bash
    /etc/init.d/mysqld start
    /etc/init.d/httpd start
    /usr/sbin/sshd -D
    
  • 开始构建镜像:

    [root@docker lamp]# docker build --network=host -t name dockerfilepath

  • dockerfile常用命令说明:

    FROM:基础镜像信息
    RUN:后面跟构建镜像过程中运行的命令
    EXPOSE:当容器内安装有多个服务是指定向外暴露的端口
    CMD:使用镜像启动容器时运行的命令
    COPY:从dockerfile所在目录,拷贝目标文件到容器的制定目录下。可以支持通配符,如果拷贝的是目录,只拷贝目录下的子文件子目录
    ADD:可以自动解压本地.tar*的软件包到目标目录下和指定源文件为URL地址
    VOLUME:设置数据卷,用来挂载文件目录。如果容器设置了卷则每次运行都会自动生成一个随机ID的卷在当前目录下,在dockerfile中设置可以达到备份数据的作用
    ENV:环境变量。在脚本定义了一个变量后运行容器是使用-e  “$VAR=VALUE”;在dockerfile中:$VAR VALUE指定默认值
    

猜你喜欢

转载自blog.csdn.net/nmb_jiang/article/details/105163708