首先進行簡單的docker安裝。
要進行自定義鏡像,咱們須要選擇一個基礎鏡像進行構建本身的鏡像:其實說白了,就是在一個有基礎定義好的容器內,執行安裝各類程序的命令,生成 所謂的Dockerfile 文件,既然如此第一步咱們首先須要找一個本地的鏡像做爲基礎鏡像來操做便可:php
1
如上圖所示,咱們來以centos爲基礎鏡像,來構建一個Dockerfilemysql
2第二步咱們須要構建一個目錄,用於存放Dockerfile文件nginx
在root下構建docker_demo目錄,存放 Dockerfile文件以及須要安裝的程序文件便可,由於我要搭建PHP的自定義環境,因此咱們再來搞一個PHP7的壓縮包便可c++
wget http://am1.php.net/get/php-7.0.0.tar.gz/from/this/mirror
而後更名字 sql
如今PHP nginx都有了,至於COMPOSER能夠在php安裝成功之後再自行操做便可~~~docker
接下來就是編寫Dockerfile文件了,在此以前,簡單瞭解下Dockerfile編寫的關鍵字格式:
FROM 表明基於哪一個鏡像
RUN 安裝軟件使用
MAINTAINER 鏡像的建立者
CMD 容器啓動時執行的命令,可是一個Dockerfile中只能有一條CMD命令,多條則只執行最後一條CMD
ENTRYPOINT 容器啓動時執行的命令,可是一個Dockerfile中只能有一條CMD命令,多條則只執行最後一條
USER 使用哪一個用戶運行container
EXPOSE 容器內部服務暴露的端口,主機上還須要在run容器時,作端口映射:centos
docker run -d -p 80:8080 centos6xxx
上邊命令表示把容器內部的8080端口映射到主機80端口上
ENV 用來設置環境變量
ADD 將主機上的文件拷貝到container內的對應路徑,全部拷貝到容器中的文件和文件夾權限爲0755,uid和gid爲0,若是文件是可識別的壓縮格式,則docker會幫忙解壓縮,ADD只有在build鏡像的時候運行一次,後面運行container的時候不會再從新加載了。
例子如:session
ADD nginx-1.12.2.tar.gz /usr/local/src
VOLUME 能夠將本地文件夾或者其餘容器的文件夾掛在到容器內。
WORKDIR 切換目錄使用,(至關於cd目錄)
ONBUILD 指定的命令在構建鏡像時不執行,而是在它的子鏡像中執行。
學完了Dockerfile基礎命令,咱們來試着搞一搞這個環境.php7
docker pull centos
首先下載一個基礎鏡像,若是有這一步請忽略,下面是個人Dockerfiledom
# base image # 基礎鏡像 FROM docker.io/centos # MAINTAINER編寫者 MAINTAINER xy61521@163.com # put nginx-1.12.2.tar.gz into /usr/local/src and unpack nginx 來吧nginx 和PHP提早都放進基礎鏡像的/usr/local/src目錄下,方便編譯安裝 ADD nginx-1.12.2.tar.gz /usr/local/src ADD php-7.0.0.tar.gz /usr/local/src # running required command 安裝Nginx的一系列亂七八糟的依賴包 RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel RUN yum install -y libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel RUN useradd -M -s /sbin/nologin nginx # change dir to /usr/local/src/nginx-1.12.2 WORKDIR /usr/local/src/nginx-1.12.2 # execute command to compile nginx RUN ./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_stub_status_module && make && make install #先裝個本地Mysql RUN yum install -y wget RUN wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm RUN rpm -ivh mysql57-community-release-el7-8.noarch.rpm RUN yum install -y mysql-server #截止此,開始安裝php,宇宙慣例,開始安裝一些編譯的依賴包 RUN yum -y install epel-release RUN yum -y install libmcrypt-devel RUN yum -y install libxml2 libxml2-devel openssl openssl-devel curl-devel libjpeg-devel libpng-devel freetype-devel WORKDIR /usr/local/src/php-7.0.0 #編譯 安裝 RUN ./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 && make install RUN cp php.ini-production /usr/local/php7/etc/php.ini
構建成功Dockerfile文件以後,docker build進行構建
docker build -t centos_lnmp:v1 .
後邊的.表明相對路徑當前目錄,也可以使用絕對路徑
而後就是漫長的等待
直到構建成功鏡像,至此咱們從新開始
docker images
咱們看到該鏡像已經構建成功(有一點概率構建失敗,失敗的話刪除容器和鏡像從新構建便可),而後運行
docker run -dt -p 80:80 centos_lnmp:v1
成功後則可進入容器,配置nginx php 。