docker安装并配置nmp容器

一,docker简介和安装

  • 简介
    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。他和vm的区别就是完全虚拟化,一个是操作系统层虚拟化。
    docker由三部分组成

    - 仓库(Repository)
    - 镜像(Image)
    - 容器(Container)
    

仓库就相当于存放镜像的地方。如果把镜像比作类,容器就是镜像的实例化。

  • 安装
    1.我的安装环境是vm上面装的centos7,官方文档说Docker 支持以下的 64 位 CentOS 版本:CentOS 7,CentOS 8。
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-1127.13.1.el7.x86_64 #1 SMP Tue Jun 23 15:46:38 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

2.更新yum包,并修改yum源到阿里云

[root@localhost ~]# yum update
[root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.安装依赖包,查看docker版本并选择一个安装

[root@localhost ~]# yum install -y yum-utils  device-mapper-persistent-data lvm2
[root@localhost ~]# yum list docker-ce --showduplicates | sort -r
[root@localhost ~]# yum install docker-ce-18.06.1.ce

4.启动docker并加入开机启动

[root@localhost ~]# systemctl start docker
[root@localhost ~]# systemctl enable  docker

使用docker version 可查看docker版本,表示安装成功。

二,安装mysql,php,nginx

  • mysql

1.获取mysql镜像,可以先拉出镜像列表

docker search mysql

找一个星星最多的使用,这里我使用的是mysql5.7版本

docker pull mysql:5.7

2.创建mysql容器。其实我们可以仅仅使用docker run命令就行了。docker run会先去pull,然后再create。

docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql5.7 mysql:5.7

参数说明:

# -d 让容器在后台运行 
# -p 添加主机到容器的端口映射,主机端口3307映射到容器mysql3306端口
# -e 设置环境变量,这里是设置mysql的root用户的初始密码,这个必须设置
# --name 容器的名字,随便取,但是必须唯一,这里mysql5.7 就是我起的名字
  

此处我想让我本地navicate能管理此数据库。
进入mysql5.7的终端

docker exec -it mysql5.7 /bin/bash

参数说明:

# -t 在容器里生产一个伪终端
# -i 对容器内的标准输入 (STDIN) 进行交互

进入终端后要对用户进行授权

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

此时便可使用navicate连接数据库。
使用 docker ps -a 便可看见刚刚创建的mysql容器。
在这里插入图片描述

  • php
    1.获取php镜像
docker pull php:5.6-fpm

2.创建php容器,并且在容器中使用mysql

docker run -d -v /docker/php/conf:/usr/local/etc/php -p 9000:9000 --link mysql5.7:mysql5.7 --name php-mysql php:5.6-fpm

参数说明:

# -d 让容器在后台运行 
# -p 添加主机到容器的端口映射 
# -v 添加目录映射,即主机上的/docker/php/conf和容器中/usr/local/etc/php目录是同步的 
# –name 容器的名字
# –link 与另外一个容器建立起联系,这样我们就可以在当前容器中去使用另一个容器里的服务。mysql5.7:mysql5.7 表示与mysql5.7建立联系,并在自己的容器中它被命名为mysql5.7

此处 -v 做目录映射是为了我们修改配置文件比较方便。
如过没做目录映射,我们可以直接进容器修改配置文件,然后重启容器即可。

docker exec -it php-mysql /bin/bash
cd /usr/local/etc/php
docker restart php-mysql

注意:
这里需要先去docker目录中建立好映射目录和映射文件,否则会报错

cd /docker
mkdir php
cd php
mkdir conf

这里如果不指定–link参数其实也是可以得,因为容易本身也是有ip的且唯一,所以我们也可以直接利用ip去访问容器。
安装php扩展
默认php镜像中提供的扩展比较少,缺少诸如mysql、gd2等常用的扩展,这样我们就需要自己安装并启用扩展。
首先进入到php容器,用php -m命令查看本地有什么扩展。
可以使用docker-php-ext-install命令来安装扩展。

docker-php-ext-install mysqli

扩展安装好之后就可以在php.ini中启用。我们从phpinfo中可以看到,容器环境下默认的php.ini没有启用,可以从/usr/local/etc/php下将php.ini-development拷贝为php.ini。通过修改php.ini中配置,启用自己需要的扩展。下面是几个扩展安装的命令,供大家参考。
docker-php-ext-source 在容器中创建一个/usr/src/php目录
docker-php-ext-enable启用PHP扩展,省去我们手工编辑php.ini的过程
docker-php-ext-install安装并启用PHP扩展
docker-php-ext-configure经常与docker-php-ext-install搭配,在需要自定义扩展的配置时使用

  • nginx
    1.获取nginx镜像
docker pull nginx

2.创建nginx容器,并在容器中使用php和mysql

docker run -d -p 80:80 --name nginx-php-mysql -v /docker/www:/var/www/html -v /docker/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -v /docker/nginx/logs:/var/log/nginx --link php-mysql --privileged=true nginx

注意:此处同样需要先去创建目录和文件,不然会报错。先运行一个nginx容器,

docker run -d -p 80:80 --name nginx000 nginx

这里我将文件直接拷贝到/docker/nginx/conf.d/default.conf来覆盖容器的nginx配置。

docker cp nginx000:/etc/nginx/conf.d/default.conf /docker/nginx/conf.d/default.conf

然后删除此容器

docker rm nginx

再次运行上面的创建容器代码即可。
需要修改default.conf文件

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #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$ {
        root           html;
        fastcgi_pass   php-mysql:9000;  # 很重要, 这里需要改到链接的php-fpm的印射名字或者端口
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;     # $document_root 可能不生效,手动改下
        include        fastcgi_params;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

三,测试

在nginx工作目录下,新建文件test.php


//phpinfo();
header("Content-type:text/html;charset=utf-8");
$dbms="mysql";     //数据库类型
$host="mysql5.7"; //数据库主机名,此处写mysql 容器的名字
$dbport = "3306";
$dbName="test";    //使用的数据库
$user="root";      //数据库连接用户名
$pass="123456";          //对应的密码
$dsn="$dbms:host=$host;port=$dbport;dbname=$dbName;charset=utf8";

try {
    $dbh = new PDO($dsn, $user, $pass); //初始化一个PDO对象
    echo "successful
"
; //你还可以进行一次搜索操作 foreach ($dbh->query("SELECT * from test") as $row) { print_r($row); //你可以用 echo($GLOBAL); 来看到这些值 } $dbh = null; } catch (PDOException $e) { die ("Error!: " . $e->getMessage() . "
"
); } ?>

使用 ifconfig 查看vm的ip
我此处为 http://192.168.37.130/test.php
出现phpinfo和连接成功success信息即可。

你可能感兴趣的:(docker)