Docker(二)实战上手

/

2018-11-8

用docker安装lnmp

  1. -- mysql
  2. | |-- conf
  3. | `-- data
  4. |-- nginx
  5. | |-- conf
  6. | |-- logs
  7. | `-- www
  8. | |-- Test1
  9. | `-- Test2
  10. `-- php
  11. |-- conf
  12. | `-- conf.d
  13. `-- logs

docker –link mmysql
(作用:将mmysql作为hosts中的一条记录,mmysql的容器的ip即为host记录的ip值)

mysql

首先我们拉取的mysql镜像

docker pull mysql

阅读一些docker的文章后发现,容器里的文件内容是不稳定的,会随着容器的删除而消失,所以我们挂载一个文件夹用于数据库文件存储

  1. user@your-os:~# sudo mkdir mysql
  2. user@your-os:~# sudo cd mysql
  3. user@your-os:~# sudo mkdir data
  4. user@your-os:~# sudo mkdir conf

启动容器

docker run --name mmysql -v /home/ubuntu/mysql/data:/var/lib/mysql -v /home/ubuntu/mysql/conf:/etc/mysql/conf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456. -d --privileged=true mysql

参数解释:

--name containerName 容器名字

-v hostPath:containerPath 挂载数据卷,数据卷内容不会随容器的rm操作而消失,恰好容器是数据库,我们不希望数据消失,因此挂载数据卷

-p hostPort:containerPort 端口映射
-d 后台运行
mysql容器特殊参数:
如果你直接启动mysql容器会提示你:三个参数至少设置一个,这里我们选择自己设置密码为:123456.

  1. error: database is uninitialized and password option is not specified
  2. You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD

php7.0-fpm

还是先拉取镜像

docker pull php:7.0-fpm

准备好目录结构,进入到php目录下,并在php/conf下准备一份默认的php.ini配置文件

docker run -p 9000:9000 --name myphp-fpm -v ~/nginx/www:/www -v $PWD/conf:/usr/local/etc/php -v $PWD/logs:/phplogs --link mmysql -d php:7.0-fpm

参数解释:和上一个对比只多了这两个参数
--link mmysql 这里是连接两个容器,填的是mysql容器的名称

拓展:之前在网上看连接容器文章时注意到某位博主这样说到:如果被连接的容器没有启动的话,可能会连接到其他容器上,又结合另一位博主说过容器启动时容器IP是随机分配的,很容易让人想到这个link的底层原理是hosts解析

docker exec -it myphp-fpm /bin/bash进入php容器查看/etc/hosts

果然如此!

安装php拓展可以进入容器后执行相应的命令,安装完拓展记得重启容器!
推荐这篇文章:docker中如何安装拓展

文章中给出的是创建容器时附加命令以达到容器创建之初便完成拓展安装的效果,不过我更推荐大家先安装纯净的php-fpm,然后在使用过程中不断添加自己需要的拓展,环境稳定之后可以制作适合自己的镜像,效果是一样的~

nginx

拉取镜像

docker pull nginx

准备好目录结构

docker run --name mnginx -p 8000:80 -v /home/ubuntu/nginx/conf:/etc/nginx/conf.d -v /home/ubuntu/nginx/logs:/home/nginx/logs -v /home/ubuntu/nginx/www:/home/nginx/www --link myphp-fpm -d nginx

参数解释参见上面的部分

下面给出一份.conf文件的配置

  1. server {
  2. listen 80;
  3. server_name localhost;
  4. #charset koi8-r;
  5. #access_log /var/log/nginx/host.access.log main;
  6. root /home/nginx/www/dzzoffice;
  7. index index.php;
  8. location / {
  9. #root /usr/share/nginx/html;
  10. # root /home/nginx/www/Test2;
  11. #index index.html index.htm index.php;
  12. try_files $uri $uri/ /index.php?$query_string;
  13. }
  14. #error_page 404 /404.html;
  15. # redirect server error pages to the static page /50x.html
  16. #
  17. # error_page 500 502 503 504 /50x.html;
  18. #location = /50x.html {
  19. # root /usr/share/nginx/html;
  20. #}
  21. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  22. #
  23. #location ~ \.php$ {
  24. # proxy_pass http://127.0.0.1;
  25. #}
  26. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  27. #
  28. location ~ \.php(.*)$ {
  29. fastcgi_pass myphp-fpm:9000;
  30. fastcgi_index index.php;
  31. fastcgi_param SCRIPT_FILENAME /www/dzzoffice$fastcgi_script_name;
  32. fastcgi_param PATH_INFO $fastcgi_path_info;
  33. fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
  34. include fastcgi_params;
  35. }
  36. # deny access to .htaccess files, if Apache's document root
  37. # concurs with nginx's one
  38. #
  39. #location ~ /\.ht {
  40. # deny all;
  41. #}
  42. }

请注意看php配置里的fastcgi_pass 我们填的是myphp-fpm:9000,这便是容器连接的用法

打开浏览器:访问8000端口,发现我们的环境已经建好啦!

Reproduced please indicate the author and the source, and error a link to this page.
text link: //sealbaby.cn/docker-2

Say something...

Website
Username
Email