docker是一个开源的容器引擎,随着“微服务架构”正在变得越来越重要,docker也变得越来越火。但是网上的文章中,要么是很有借鉴意义的干货,要么就是使用高端术语来讲述什么叫做微服务架构。今天我就通过文章来记述一下传统lnmp迁移docker的过程。
项目背景 主要是以自身的博客系统作为迁移的样例,项目环境是传统的lnmp环境。
前期准备 安装docker 1 2 3 4 5 6 7 $ sudo apt-get install docker.io -y Reading package lists... Done Building dependency tree Reading state information... Done ... Setting up docker.io (1.6.2~dfsg1-1ubuntu4~14.04.1) ... docker start/running, process 26908
获取php-fpm镜像 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 $ sudo docker search php-fpm #查找php-fpm镜像 NAME DESCRIPTION STARS OFFICIAL AUTOMATED php While designed for web development, the PH... 2782 [OK] richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable ... 454 [OK] bitnami/php-fpm Bitnami PHP-FPM Docker Image 41 [OK] phpdockerio/php7-fpm ... $ sudo docker pull phpdockerio/php7-fpm:latest latest: Pulling from phpdockerio/php7-fpm 632d62e9ff45: Pull complete 4719c3e8a982: Pull complete 2309d29c605a: Pull complete 83aeee240cf5: Pull complete 6962aaa46258: Pull complete ceb4c4ec812a: Pull complete 821e3516e882: Pull complete ef64564fd4f8: Pull complete 4ce8803d2ea8: Pull complete ba9d4bc26f3e: Pull complete 20fd756c6431: Pull complete f7729a02ff06: Pull complete Digest: sha256:a2a240a31c8afdf723a8554b6c46691069a80ac622cbb5ab77fcd7b5762ddc58 Status: Downloaded newer image for phpdockerio/php7-fpm:latest
同理获取nginx镜像和MySQL镜像 1 2 $ sudo docker pull nginx:latest $ sudo docker pull mysql:latest
端口检查 1 $ netstat -anp | grep "80\|3306\|9000"
查看镜像 1 2 3 4 5 $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE mysql latest 3ad8e8e4bdb1 14 hours ago 408.2 MB phpdockerio/php7-fpm latest f7729a02ff06 5 days ago 166.2 MB nginx latest 2ecc072be0ec 7 days ago 108.3 MB
运行镜像 生成MySQL容器1 $ sudo docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=密码 --name docker_mysql_00 mysql:latest
生成nginx容器,外部80端口映射到内部80端口,关联容器内外文件夹1 $ sudo docker run -d -p 80:80 -v /usr/share/nginx:/usr/share/nginx -v /etc/nginx:/etc/nginx --name docker_nginx_00 nginx:lastest
生成php-fpm容器, 同理1 $ sudo docker run -d -p 9000:9000 -v /usr/share/nginx:/usr/share/nginx --name docker_php_fpm_00 phpdockerio/php7-fpm
镜像配置 查看容器的ip1 2 3 4 $ sudo docker inspect docker_php_fpm_00 docker_nginx_00 docker_mysql_00| grep "IPAddress" "IPAddress" : "172.17.0.7" ,"IPAddress" : "172.17.0.3" ,"IPAddress" : "172.17.0.2" ,
配置nginx和php-fpm1 2 $ sudo docker exec -ti docker_nginx_00 /bin/bash vim /etc/nginx/sites-enabled/blog.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 server { listen 80 ; root /usr/share/nginx/wordpress; index index.php index.html index.htm index.nginx-debian.html; server_name blog.feilong.tech www.feilong.tech feilong.tech; location ~ \.php$ { fastcgi_pass 172.17.0.7:9000 ; fastcgi_index index.php; set $path_info "" ; set $real_script_name $fastcgi_script_name ; fastcgi_param SCRIPT_FILENAME $document_root $fastcgi_script_name ; include fastcgi_params; } }
同理配置好MySQL的IP地址,容器可能没有安装vim,所以编辑之前需要提前apt-get update
。然后进行安装。
总结 安装过程比较复杂,尤其是需要配置IP。其实整个过程并不是符合docker的期望,理想情况是将lnmp放到一个容器中,即直接使用sudo docker search lnmp
查找镜像,进行意见安装。前端使用nginx,通过\$host配置转发到端口,然后通过docker端口的映射到达容器内部。
feilong 2017.10.23