Docker 重要性不用多作解释,咱们每天吵着云原生,最重要的一门技术,你是否掌握了呢?从今天,一块儿来docker吧! php
Ubuntu 19.04
VSCode
Docker CE
VSCode请先确认是否安装了Docker插件,若是没有能够安装,这个是可视化的工具,用起来比较方便
html
nginx
和 php-fpm
的两个docker可以互联,读取同一份代码 mysql
nginx
基础镜像docker pull nginx
nginx
nginx
容器docker run --rm --name test-nginx -p 8080:80 nginx
git
参数解读面试
docker run \ 启动容器 --rm \ 容器终中止后能够自动清理容器和相关文件系统,方便调试,也避免每次都手动删除而后重启 --name test-nginx \ 命名容器 -p 8080:80 \ 开放端口 宿主机8080的请求映射到容器的80端口 nginx 基于的镜像sql
如今能看到已经有一个 nginx 容器在运行
docker
借助 -v
参数
为了演示,在系统根目录新建了一个 docker-server
目录,文件和文件夹以下,本身实现的时候大可在 home
目录下作数据库
咱们把以前的容器删除,从新执行命令windows
docker run
--rm
--name test-nginx
-p 8080:80
-v /docker-server/www:/usr/share/nginx/html
nginx
刷新页面
nginx
配置挂载宿主机文件借助 -v
参数,咱们在宿主机新增一个目录存放 nginx
配置,而后指定容器 nginx 配置目录挂载到宿主机
在执行命令以前,咱们先写好一个配置
server {
root /usr/share/nginx/html;
index index.html index.php;
server_name localhost;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
复制代码
在 www 新增一个 php 文件
<?php
phpinfo();
复制代码
此时咱们的目录结构以下
执行命令
docker run
--rm
--name test-nginx
-p 8080:80
-v /docker-server/www:/usr/share/nginx/html
-v /docker-server/nginx:/etc/nginx/conf.d
nginx
刷新页面
fpm
的容器。如今动手
docker pull php:fpm
docker run
--rm
--name php-app
php:fpm
如今咱们两个容器都启动了
关于容器间的网络,建议后续了解下文档中 使用网络 一节。容器是一个虚拟出来的盒子,每一个容器都至关于一个进程级别的虚拟环境,跨容器的互联,这里先介绍两种方式,能够用过几个参数便可。
--link
参数指定链接容器当你执行 docker run --help
能够很清楚的看到全部可用命令参数
在 -l
分类处 有一个 --link
--link list 链接另一个容器
这就明白了。
一、咱们刚启动的 fpm 容器不动,先修改 nginx 配置
server {
root /usr/share/nginx/html;
index index.html index.php;
server_name localhost;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
location ~ \.php$ {
fastcgi_pass php-app:9000; # php-app就是咱们刚刚启动的fpm的容器名字 9000也是它的默认监听端口
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
复制代码
二、增长 --link php-app 参数 以下从新启动
docker run
--rm --name test-nginx
-p 8080:80
-v /docker-server/www:/usr/share/nginx/html
-v /docker-server/nginx:/etc/nginx/conf.d
--link php-app
nginx
三、刷新页面
server {
root /usr/share/nginx/html;
index index.html index.php;
server_name localhost;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
location ~ \.php$ {
root /var/www/html; # PHP-FPM默认的根目录
fastcgi_pass php-app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
复制代码
五、指定 fpm 挂载的项目根目录,启动 fpm 容器
docker run
--rm
--name php-app
-v /docker-server/www:/var/www/html
php:fpm
六、刷新页面
--network
指定使用的容器网络实现互联docker run --help
能看到对--network 的解释
--network network Connect a container to a network
在VSCode可视化窗口也能看到当前的网络
docker network create my-php-network
docker run
--rm
--name php-app
--network my-php-network
-v /docker-server/www:/var/www/html
php:fpm
三、 重启 nginx,用--network 显式声明使用的网络
docker run
--rm --name test-nginx
-p 8080:80
-v /docker-server/www:/usr/share/nginx/html
-v /docker-server/nginx:/etc/nginx/conf.d
--network my-php-network
nginx
四、刷新页面,仍旧是咱们熟悉的页面
多个容器构建还有另一种方案,不过打算在另一节中单独讲。
下一篇主要围绕 Docker Compose 来编排一个项目,用 nginx
php
mysql
等作演示,一块儿编写一个 docker-compose.yml
文件,一键启动项目。