Docker作为当前普遍使用的开发、运行容器软件,具有开源、便捷、可移植性强、社区资源丰富等诸多优势。
作为一名开发者,应当学会使用Docker容器快速、灵活地搭建自己所需的开发环境。
作为一名熟练的PHP开发者,我之前一直在windows平台上IIS+mysql+php环境或在linux平台上搭建LAMP环境。然而在widnows平台上运行的环境普遍存在搭建繁琐、运行效率低下的问题。在ubuntu系统上使用apt软件源可以通过命令快速组装出LAMP环境,但是仍然存在可移植性差、每次使用配置繁琐等弊端。为此,我这次尝试了在ubuntu系统上配置docker容器环境。经过了两天地摸索与尝试,我终于成功在docker中搭建除了LNMP(Linux+Nginx+MySQL+PHP)环境,并可以灵活地切换php版本以支持更多应用。
以下,我将在这篇博文中记录我最终的搭建经验。
1.Docker环境的安装
在ubuntu系统中可以通过apt源十分方便地安装docker,
使用 sudo apt install docker-ce 命令可以快速从软件源安装docker的社区版安装软件。
2.从Docker镜像库拉取所需的镜像
在这次的环境搭建中,我们将把Nginx、MySQL、PHP三者分别作为独立的容器运行,以增强灵活性与便捷性。
使用
docker pull mysql
docker pull nginx
docker pull php:5.6-fpm
命令来拉取所需的镜像。
之后可以使用 docker images 命令查看拉取的镜像。
注:从国内拉取官方服务器镜像较慢,可以考虑使用阿里云或网易的容器镜像加速服务。具体方法请自行搜索。
3.运行一个MySQL容器
使用
docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql
命令即可快速使用docker镜像建立一个mysql容器。
命令说明:
- -p 3306:3306:将容器的3306端口映射到主机的3306端口
- -v -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的conf/my.cnf挂载到容器的/etc/mysql/my.cnf
- -v $PWD/logs:/logs:将主机当前目录下的logs目录挂载到容器的/logs
- -v $PWD/data:/mysql_data:将主机当前目录下的data目录挂载到容器的/mysql_data
- -e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码
4.运行一个PHP-fpm容器
使用
docker run -p 9000:9000 –name dream-php -d -v ~/Workspace/tmp/www:/var/www/html:ro php:5.6-fpm
命令即可快速式哟噶docker镜像建立一个PHP-fpm容器。
注:挂载地址中地~/Workspace/tmp/www 是php文件存放地web目录,此目录需与后面nginx中配置的web目录一致。
5.运行一个Nginx容器
使用
docker run –name dream-nginx -p 80:80 -d -v ~/Workspace/tmp/www:/usr/share/nginx/html:ro -v ~/Workspace/tmp/docker/nginx/conf.d:/etc/nginx/conf.d:ro nginx
命令即可快速创建一个Nginx容器。
注:挂载地址中地~/Workspace/tmp/www 是php文件存放地web目录,此目录需与前面PHP-fpm中配置的web目录一致。
6.配置文件
Nginx的配置文件需要在创建容器之前编写好,才能成功挂载到容器中。Nginx的配置文件有/etc/Nginx/Nginx.conf和/etc/Nginx/conf.d/default.conf两个,前者是http协议和web服务器的总配置文件,而后者是web服务器的虚拟主机和模块配置文件。这里不需改动nginx.conf文件,因此仅贴出default.conf文件内容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; #root /www; index index.html index.htm index.php; } #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 /usr/share/nginx/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$ { fastcgi_pass 172.17.0.2:9000; #此处需修改为对应php-fpm容器的IP地址 fastcgi_index index.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; #} } |


