首先进行简单的docker安装。制作自定义镜像,我们需要选择一个基础镜像来构建自己的镜像:其实说白了,就是执行命令在一个有基础定义的容器中安装各种程序,生成所谓的Dockerfile.第一步,我们首先要找到一个本地镜像作为基础镜像进行操作:1.如上图所示,我们使用centos作为基础镜像构建一个Dockerfile。2、第二步,我们需要建立一个存放Dockerfile文件的目录在root下建立docker_demo目录,存放Dockerfile文件和需要安装的程序文件,因为我要搭建PHP的自定义环境,所以我们创建一个PHP7压缩包,wgethttp://am1.php.net/get/php-7.0.0.tar.gz/from/this/mirror然后改名既然PHPnginx已经可用,至于COMPOSER,php安装成功后就可以自己操作了~~~接下来就是写Dockerfile了在此之前,先简单了解一下Dockerfile写的关键字格式:FROM表示根据哪个镜像运行的命令RUN安装软件要用MAINTAINER镜像的创建者CMD容器启动,但是一个Dockerfile中只能有一个CMD命令,最多规则只执行容器启动时执行的最后一个CMDENTRYPOINT命令,但是一个文件中只能有一个CMD命令Dockerfile,以及多个那些只执行最后一个。USER使用哪个用户运行容器内部服务暴露的端口EXPOSE容器,宿主机也需要在运行容器的时候做端口映射:dockerrun-d-p80:8080centos6xxx上面的命令表示,容器内的8080端口映射到宿主机的80端口ENV用于设置环境变量ADD将宿主机上的文件复制到容器中容器中对应路径,复制到的所有文件和文件夹的权限container为0755,uid和gid为0。如果文件是可识别的压缩格式,docker会帮忙解压。ADD仅在构建映像时运行一次。稍后运行容器时将不再重新加载。例如:ADDnginx-1.12.2.tar.gz/usr/local/srcVOLUME可以将本地文件夹或者其他容器的文件夹挂到容器中。WORKDIR用于切换目录,(相当于cd目录)ONBUILD指定的命令在构建镜像时不执行,而是在其子镜像中执行。学习了Dockerfile的基本命令后,我们来尝试制作这个环境。dockerpullcentos先下载一个baseimage,如果有这一步请忽略,下面是我的Dockerfile#baseimage#baseimageFROMdocker.io/centos#MAINTAINERMAINTAINERxy61521@163.com#putnginx-1.12.2.tar.gz进入/usr/local/src并解压nginx来,把nginx和PHP提前放到基础镜像的/usr/local/src目录下,方便编译安装ADDnginx-1.12。2.tar.gz/usr/local/srcADDphp-7.0.0.tar.gz/usr/local/src#runningrequiredcommand安装Nginx一系列乱七八糟的依赖包RUNyuminstall-ygccgcc-c++glibcmakeautoconfopensslopenssl-develRUNyuminstall-ylibxslt-devel-ygdgd-develGeoIPGeoIPGeoIP-develpcrepcre-develRUNuseradd-M-s/sbin/nologinnginx#将目录更改为/usr/local/src/nginx-1.12.2WORKDIR/usr/local/src/nginx-1.12.2#执行命令编译nginxRUN./configure--user=nginx--group=nginx--prefix=/usr/local/nginx--with-file-aio--with-http_ssl_module--with-http_realip_module--with-http_addition_module--with-http_xslt_module--with-http_image_filter_module--with-http_geoip_module--with-http_sub_module--with-http_dav_module--with-http_flv_module--with-http_mp4_module--with-http_gunzip_module--with-http_gzip_static_module--with-http_auth_request_module--with-http_random_index_module--with-http_secure_link_module--with-http_degradation_module--with-http_module_status&&make&&makeinstall#首先在本地安装一个MysqlRUNyuminstall-ywgetRUNwgethttp://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpmRUNrpm-ivhmysql57-community-release-el7-8.noarch.rpmRUNyuminstall-ymysql-server#此时开始安装php,宇宙实践,开始安装一些编译好的依赖包RUNyum-yinstallepel-releaseRUNyum-yinstalllibmcrypt-develRUNyum-y安装libxml2libxml2-developensslopenssl-develcurl-devellibjpeg-devellibpng-develfreetype-develWORKDIR/usr/local/src/php-7.0.0#CompileandinstallRUN./configure--prefix=/usr/local/php7--with-config-file-path=/usr/local/php7/etc--with-config-file-scan-dir=/usr/local/php7/etc/php.d--with-mcrypt=/usr/include--enable-mysqlnd--with-mysqli--with-pdo-mysql--enable-fpm--with-fpm-user=nginx--with-fpm-group=nginx--with-gd--with-iconv--with-zlib--enable-xml--enable-shmop--enable-sysvsem--enable-inline-optimization--enable-mbregex--enable-mbstring--enable-ftp--enable-gd-native-ttf--with-openssl--enable-pcntl--enable-sockets--with-xmlrpc--enable-zip--enable-soap--without-pear--with-gettext--enable-session--with-curl--with-jpeg-dir--with-freetype-dir--enable-opcache&&make&&makeinstallRUNcpphp.ini-production/usr/local/php7/etc/php.ini成功构建Dockerfile后,dockerbuild构建dockerbuild-tcentos_lnmp:v1的.在后面。代表当前目录的相对路径,也可以使用绝对路径。然后就是漫长的等待,直到镜像构建成功。此时,我们重启dockerimages,看到镜像已经构建成功(构建失败的概率很小,如果失败,删除容器。可以重新构建镜像),然后运行dockerrun-dt-p80:80centos_lnmp:v1成功后可以进入容器配置nginxphp
