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
|
镜像配置
查看容器的ip
1 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-fpm
1 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