Docker入门 - 安装docker并使用docker搭建PHP环境,初步了解Dockerfile

首先咱们需先安装docker环境,这个比较简单,以centos7为例php

  docker在centos7上安装须要系统内核版本3.10+,能够经过uname -r查看内核版本号,若是版本不符请自行查阅资料更换。html

  准备好以后使用如下命令安装docker服务mysql

yum install -y docker

  安装完成后启动docker服务,下面是docker启动、中止、重启等命令nginx

systemctl restart docker #重启 systemctl stop docker #中止 systemctl start docker #启动 systemctl enable docker #开机自启动 systemctl status docker #服务状态

  至此docker服务就准备好了,咱们能够经过docker -v查看docker版本redis

 

而后咱们使用docker搭建php环境sql

  咱们先简单介绍一下docker的一些经常使用命令,以下所示:docker

#从docker镜像仓库搜索镜像,示例docker search mysql docker search [须要查找的镜像名] #拉取远程镜像到本地,示例docker pull mysql:5.7.23 docker pull [镜像名]:[版本号] #自定义建立一个镜像,注意须要当前目录下有一个Dockerfile文件 #注意结尾处有个 “.”是必须的 docker build -t [自定义镜像名] . #查看本地镜像,能够看到镜像名,镜像id,版本号,建立时间及镜像大小 docker images #删除镜像,需注意删除的镜像要没有container占用,镜像id不用所有输入完整 #示例docker image rm 7bc docker image rm [镜像id] #查看全部container及详情,能够看到容器名,容器id、容器状态等信息 docker ps -a #启动容器,容器id也不须要写全,示例docker start 88d docker start [容器id] #中止容器 docker stop [容器id] #重启容器 docker restart [容器id] #建立一个镜像,后续会对详细说明 docker run [参数1] [参数2] ... 镜像名 #进入容器内部交互 docker exec -it [容器名/容器id] /bin/bash

  整个docker环境流程大体能够理解为三步,获取镜像->建立容器->运行容器。centos

 

下载php镜像,php-fpm浏览器

  首先咱们须要一个php的镜像,镜像获取有两种方式,一种是直接获取docker镜像库里面已有的镜像,另外一种是本身编辑dockerfile文件自定义一个镜像,首先咱们采用第一种方式,由于比较简单,后面再说第二种方式bash

  咱们使用docker pull 拉去一个已有的php镜像,这里我推荐 leleos/php-fpm:7.1 镜像,基本能使用上的扩展都配置好了

docker pull leleos/php-fpm:7.1

  

构建nginx镜像

  以前咱们是直接下载别人的镜像拿来用,此次咱们本身使用dockerfile文件建立一个自定义的镜像,首先在目录下建立一个 "Dockerfile" 文件(建议Dockerfile做为文件名),写入如下内容

#设置容器基础镜像,这里咱们以centos系统为基础镜像 FROM hub.c.163.com/public/centos:latest #设置做者信息 MAINTAINER Taurus12C<1402410174@qq.com> #安装依赖 RUN rpm --rebuilddb && yum install -y autoconf automake make wget proc-devel net-tools zlib zlib-devel make gcc  g++ openssl-devel pcre pcre-devel tar #下载nginx软件压缩包 RUN wget http://nginx.org/download/nginx-1.17.1.tar.gz
 # 解压到当前目录 RUN tar -zxvf nginx-1.17.1.tar.gz # 设置当前操做目录 WORKDIR nginx-1.17.1 # 配置nginx RUN ./configure --prefix=/usr/local/nginx && make && make install RUN rm -rf ../nginx* && yum clean all \ && echo "${TIME_ZOME}" > /etc/timezone \ && ln -sf /usr/share/zoneinfo/${TIME_ZOME} /etc/localtime # 设置当前操做目录 WORKDIR /usr/local/nginx #暴露容器端口 EXPOSE 80 #启动容器后执行语句 CMD ["./sbin/nginx","-g","daemon off;"]

  这里咱们大体说一下上面文件的命令含义,注意命令必须所有大写

  FROM —— 设置基础镜像

  MAINTAINER —— 设置这个dockerfile的做者信息

  RUN —— 这个比较关键,就是你接下来对于容器的配置或者是依赖的一步步操做,由于这里咱们是建立一个nginx的镜像,因此上面的RUN操做都是在容器里面安装nginx服务

  WORKDIR —— 设置当前操做容器内的路径,相似于cd操做

  EXPOSE —— 这个是给容器暴露端口让宿主机完成映射

  CMD —— 这是容器建立启动后自动执行的命令,这里的命令是启动nginx服务的意思

  其余的命令能够去查阅资料自行了解,这里咱们只讲解这些,让你们有个概念

  编辑好了以后咱们在当前目录下执行build来构建一个镜像,若是你的文件是Dockerfile直接执行就行了。注意后面的 "."不要忘了

docker build -t nginx .

 执行完毕以后咱们使用 docker images 查看本地镜像已经有了nginx和leleos/php-fpm两个镜像了。而后咱们就可使用容器建立一个php的环境运行php项目了

 

建立dcoker自定义网络

  有的时候咱们须要容器之间可以链接,好比nginx就须要使用fpm,可是nginx和leleos/php-fpm不在一个容器内,这个时候咱们就须要想办法让容器之间能互相访问,这里有几种办法

  一、在启动容器时使用 --link实现容器之间的链接,而后在nginx容器内修改nginx配置文件里面的fastcgi_pass对应地址

  二、获取到php-fpm容器的内网ip,而后在nginx容器内修改nginx配置文件里面的fastcgi_pass对应地址

  三、建立docker自定义网络,而后在nginx容器内修改nginx配置文件里面的fastcgi_pass对应地址

  这里做者推荐使用第三种方法,其余两种若是须要能够自行了解

  建立docker自定义网络命令,docker network create [网络组名称]

docker network create lnmp

  执行以后咱们能够用docker network ls 查看刚刚建立的网络组

 

建立容器,使用docker搭建PHP环境

  上面说了那么多都是准备工做,如今咱们正式把环境搭建起来

  建立nginx容器

docker run -itd --name nginx --network lnmp -p 80:80 -v /var/www/html:/var/www/html -v /usr/local/nginx/conf/vhost:/usr/local/nginx/conf/vhost nginx

  解释一下上面指令的意思

  docker run:建立启动一个容器

  -itd:这里是缩写,对应 -i -t -d ,-i 交互式操做、-t 终端 、-d后台运行

  --name:给容器指定名称

  --network:给容器指定网络组

  -p:映射宿主机与容器内的端口

  -v:给容器挂载目录,通俗理解来讲就是给容器加了个存储文件的空间,而且空间内的文件宿主机和容器是共用的。这里我挂载了两个目录,一个是项目目录html,一个是配置文件目录vhost,这样就不用进入容器内就能修改了

  nginx:指定容器使用的镜像为nginx镜像

  

  建立php服务容器

docker run -itd --name php-fpm --network lnmp -p 9000:9000 -v /var/www/html:/var/www/html leleos/php-fpm:7.1

  须要注意的是项目目录须要nginx和php容器配置在体哦那个一个目录下。至此咱们容器也启动了,能够经过docker ps -a 查看咱们刚刚建立并启动的容器状态。

  到了这里还没完还有最后一步操做,那就是进行正确的nginx配置。首先咱们进到nginx容器里面docker exec -id [容器名/容器id] /bin/bash

docker exec -it nginx /bin/bash

  输入上面这段命令咱们就能进入到nginx容器里面,若是须要退出返回到宿主机里面,只须要在容器内输入exit就能够了

  进入/usr/local/nginx/conf目录编辑nginx.conf文件,文件内容以下

#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log  info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80; server_name localhost;                   #域名   index index.html index.htm index.php; root /var/www/html;                     #这里填写刚刚挂载的项目目录 #charset koi8-r; #access_log logs/host.access.log main; #error_page 404              /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504  /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1;
 #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 #    location ~ \.php$ { root html; fastcgi_pass lnmp_php:9000;             #这里注意使用php容器的网络组内端口,咱们建立php容器时使用的网络组和映射的端口 fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; include fastcgi_params; }   # deny access to .htaccess files, if Apache's document root
          # concurs with nginx's one
   #   #location ~ /\.ht {   # deny all;   #}   } include /usr/loca/nginx/conf/vhost/*.conf;   #这里是咱们挂载配置文件目录地址,这样咱们添加新的项目就不须要到容器内来修改nginx.conf文件,只须要在宿主机上修改重启容器便可 # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }

  编辑好了以后咱们重载nginx配置文件,进入/usr/local/nginx/sbin目录下执行 ./nginx reload 。而后退出容器exit

  进入/var/www/html目录下建立index.php测试一下换进是否搭建成功,index.php文件内写入

<?php echo 'Hello World!';

  打开浏览器访问服务器地址或域名,若是输出”Hello World!“就表明环境搭建成功

 

其余

  至此咱们已经掌握了docker的一些用法,能够尝试本身搭建redis、mysql等服务容器啦,若是遇到什么问题能够在下方给我评论进行询问

原文出处:https://www.cnblogs.com/Taurus12C/p/taurus12c-docker-php-lnmp.html

相关文章
相关标签/搜索