zoukankan      html  css  js  c++  java
  • 2020系统综合实践 第2次实践作业

    一 、实现一个自定义的web容器服务


    1、安装nginx

    (1)获取最新版的 Nginx 镜像

    这里我们拉取官方的最新版本的镜像:

    $ docker pull nginx:latest

     

    (2)查看本地镜像

    使用以下命令来查看是否已安装了 nginx:

    $ docker images

     

     

    (3)使用dockerfile镜像启动

    ①新建空白目录中,建立一个文本文件,并命名为 Dockerfile:

    mkdir mynginx
    cd mynginx
    vi Dockerfile

    ②构建一个 Dockerfile 文件内容为:

    FROM nginx
    MAINTAINER gavin
    # 安装编译器
    RUN apt-get update
    RUN apt-get install gcc -y
    RUN apt-get install g++ -y
    RUN apt-get install make -y
    # 加速
    RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
    # 暴露8080端口
    EXPOSE 8080
    # 容器默认启动命令
    ENTRYPOINT ["/usr/sbin/nginx","g","daemon off;"]

    ③在 Dockerfile 文件所在目录执行:

    docker build -t nginx:v1 . #命令最后有一个. 表示当前目录

    ④查看镜像

    存在 REPOSITORY 为 nginx 和 TAG 是 v1 的信息,表示构建成功。

    ⑤运行容器

    docker run  --name docker_nginx_v1   -d -p 8080:8080 nginx:v1

    用浏览器去访问这个 nginx 服务器:http://localhost:8080/,页面返回信息:

    2、安装php

    (1)获取镜像

    用 docker search php 命令来查看可用版本:

     

    拉取官方的镜像

    docker pull php:5.6-fpm

    (2)查看镜像

    等待下载完成后,我们就可以在本地镜像列表里查到REPOSITORY为php,标签为5.6-fpm的镜像。

    (3)启动PHP

    docker run --name  myphp-fpm -v ~/nginx/www:/www  -d php:5.6-fpm

    说明

    • --name  myphp-fpm : 将容器命名为 myphp-fpm。

    • -v ~/nginx/www:/www : 将主机中项目的目录 www 挂载到容器的 /www

    (4)安装php扩展

    #进入php容器bash界面
    docker exec -it php bash
    #以安装pdo_mysql扩展为例
    cd /usr/local/bin
    ./docker-php-ext-install pdo_mysql

    (5)编辑default.conf

    创建  ~/nginx/conf/conf.d 目录:

    mkdir ~/nginx/conf/conf.d 

    在该目录下添加 ~/nginx/conf/conf.d/runoob-test-php.conf 文件,内容如下:

    sudo vim ~/nginx/conf/conf.d/runoob-test-php.conf

    以下为示例内容

    server {
      listen       80;
      server_name localhost;

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

      error_page   500 502 503 504 /50x.html;
      location = /50x.html {
          root   /usr/share/nginx/html;
      }

      location ~ .php$ {
          fastcgi_pass   php:9000;
          fastcgi_index index.php;
          fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name;
          include       fastcgi_params;
      }
    }

    配置文件说明:

    • php:9000: 表示 php-fpm 服务的 URL,下面我们会具体说明。

    • /www/: 是 myphp-fpm 中 php 文件的存储路径,映射到本地的 ~/nginx/www 目录。

    3、Nginx + PHP  部署

    新建目录

    mkdir -p /docker/www
    mkdir -p /docker/nginx/conf.d

    (1)启动php镜像

    修改default.conf配置文件,使fastcgi_pass的值为 172.17.0.4:9000

    (2)启动 nginx

    docker run --name runoob-php-nginx -p 8083:80 -d 
      -v ~/nginx/www:/usr/share/nginx/html:ro
      -v ~/nginx/conf/conf.d:/etc/nginx/conf.d:ro
      --link myphp-fpm:php
      nginx
    • -p 8083:80: 端口映射,把 nginx 中的 80 映射到本地的 8083 端口。

    • ~/nginx/www: 是本地 html 文件的存储目录,/usr/share/nginx/html 是容器内 html 文件的存储目录。

    • ~/nginx/conf/conf.d: 是本地 nginx 配置文件的存储目录,/etc/nginx/conf.d 是容器内 nginx 配置文件的存储目录。

    • --link myphp-fpm:php: 把 myphp-fpm 的网络并入 *nginx*,并通过修改 nginx 的 /etc/hosts,把域名 php 映射成 127.0.0.1,让 nginx 通过 php:9000 访问 php-fpm。

    在 ~/nginx/www 目录下创建 index.php,代码如下:

    <?php
    echo phpinfo();
    ?>

    浏览器打开 http://127.0.0.1:8083/index.php,显示如下:

    二 、实现一个自定义的数据库容器服务


     

    1.拉取官方镜像

    docker pull mysql:latest

    创建目录

    mkdir -p /server/mysql
    cd /server/mysql

    2、编写Dockerfile

    (1)dockerfile

    FROM mysql:latest
    MAINTAINER gavin
    ENV MYSQL_ALLOW_EMPTY_PASSWORD no

    # copy file into container
    COPY setup.sh /server/mysql/setup.sh
    COPY schema.sql /server/mysql/schema.sql
    COPY privileges.sql /server/mysql/privileges.sql

    # exec these command when container start up
    CMD ["sh", "/server/mysql/setup.sh"]

    (2)启动脚本setup.sh
    setup.sh的作用就是启动 MySQL 服务,然后执行两个 sql 文件。

    #!/bin/bash
    set -e

    #查看mysql服务的状态,方便调试,这条语句可以删除
    echo `service mysql status`

    echo '1.启动mysql....'
    #启动mysql
    service mysql start
    sleep 3
    echo `service mysql status`

    echo '2.开始导入数据....'
    #导入数据
    mysql < /server/mysql/schema.sql
    echo '3.导入数据完毕....'

    sleep 3
    echo `service mysql status`

    #重新设置mysql密码
    echo '4.开始修改密码....'
    mysql < /server/mysql/privileges.sql
    echo '5.修改密码完毕....'

    #sleep 3
    echo `service mysql status`
    echo `mysql容器启动完毕,且数据导入成功`

    tail -f /dev/null

    (3)数据库的初始化schema.sql

    需要导入数据的mysql脚本命令:

    -- 创建数据库
    create database `docker_mysql` default character set utf8 collate utf8_general_ci;

    use docker_mysql;

    -- 建表
    DROP TABLE IF EXISTS test;

    CREATE TABLE test (
    `id` bigint(20) NOT NULL,
    `name` varchar(255) DEFAULT ""
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

    -- 插入数据
    INSERT INTO test (`id`, `name`)
    VALUES
    (1024,'gavin');

    (4)权限配置privileges.sql

    这个文件是对 MySQL 进行一些权限配置,比如设置用户密码,创建新用户,数据库授权等。

    use mysql;
    select host, user from user;
    -- 新建用户为如下命令:
    create user docker identified by '123456';
    -- 将docker_mysql数据库的权限授权给创建的docker用户,密码为123456:
    grant all on docker_mysql.* to docker@'%' identified by '123456' with grant option;
    -- use privileges
    flush privileges;

    2.创建镜像

    (1)在 Dockerfile 文件所在目录执行:

    docker build -t mysql:v1 .

    (2)启动容器

    docker run -d -p 13306:3306 mysql:v1

    (3)容器启动成功。
    查看容器的日志记录,启动过程与启动脚本setup.sh中所规范的步骤一致,数据导入和权限设置成功:

    (4)登录mysql

    #903b2e473c50为mysql:v1容器号
    docker exec -it 903b2e473c50 /bin/bash

    (5)查看数据

    • 使用docker用户登录数据库:mysql -u docker -p

    • 输入密码123456通过登录验证

    • 切换至docker_mysql数据库:use docker_mysql;

    • 查看数据库中的表:show tables;

    • 查看表中的数据:select * from test;

    3、 问题


    Docker 启动nginx实例挂载目录权限不够

    解决办法:在docker run运行时加上参数

    --privileged=true
  • 相关阅读:
    leetcode 131. Palindrome Partitioning
    leetcode 526. Beautiful Arrangement
    poj 1852 Ants
    leetcode 1219. Path with Maximum Gold
    leetcode 66. Plus One
    leetcode 43. Multiply Strings
    pytorch中torch.narrow()函数
    pytorch中的torch.repeat()函数与numpy.tile()
    leetcode 1051. Height Checker
    leetcode 561. Array Partition I
  • 原文地址:https://www.cnblogs.com/gallium697/p/12737518.html
Copyright © 2011-2022 走看看