• 2020系统综合实践 第2次实践作业


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

    要求:

    #指定基础镜像
    FROM   nginx
    
    #设置镜像作者
    MAINTAINER   hh
    
    #安装必要的工具以方便维护
    nginx不知道用什么工具维护
    apache:
    RUN apt-get update
    &&apt-get install -y apache2
    &&apt-get install -y apache2-utils
    &&apt-get clean
    
    #设置工作目录
    WORKDIR /home/nginx
    
    # 复制上下文的文件到容器的 app 目录下
    # 不需要复制到镜像的文件可以使用 .dockerignore 进行忽略
    COPY . /mynginx
    
    #默认的监听端口80更改为自定义的端口
    在default.conf中将listen 80改为listen 1234
    
    #并且声明暴露的端口
    EXPOSE 1234
    
    #容器启动时,能直接进入web代码的存放目录
    

    步骤:

    1.获取nginx镜像

    docker pull nginx
    

    2.查看镜像中是否已有nginx

    docker images
    

    3.启动一个nginx容器

    Docker run --name nginx1 -p 8080:80 -d nginx 
    

    4.在user/nginx目录下拷贝需要修改的default.conf文件

    docker cp <容器ID>:/etc/nginx/conf.d/default.conf .
    

    在主目录中可看到default.conf文件

    5.将监听的端口号listen修改为1234(原为80)

    将Web默认目录root修改为/home/nginx(原为/usr/share/nginx/html)

    6.将default.conf dockerfile index.html放在同一个文件夹下。直接编辑dockerfile和index.html

    7.在创建的web目录下启动终端,构建自定义镜像

    docker build -t [镜像名称:镜像标签] .
    

    . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

    上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。

    如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。

    8.运行一个容器

    docker run -d  --name nginx1 -p 1000:1234 mynginx:v1 
    

    9.检测结果,打开浏览器,输入网址0.0.0.0:1000

    PS:也可通过docker network inspect bridge来查看网址

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

    要求:

    选择Mysql,要求标明镜像作者信息,为了方便维护,需要能够查看容器内的配置信息,包括但不限于网络、应用配置文件等。在环境变量中设置好数据库的root密码且不允许空密码登录,创建一个测试数据库,指定用户名和密码。

    步骤:

    看到群里有人反映问题:容器在创建成功之后就停止了,用docker logs查看日志发现unrecognized service错误

    解决方法:把版本改为5.7

    所以就直接在刚开始拉取版本号为5.7的mysql

    1.创建mysql文件夹,里面有dockerfile,需要导入数据的mysql脚本命令schema.sql,mysql权限设置命令privileges.sql,容器启动脚本setup.sh,直接打开编写。



    2.构建自定义镜像

    docker build -t mymysql:v1 .
    

    启动mysql1容器并将端口映射到本地的3306端口:

    docker run --name mysql1 -p 3306:3306 -d mymysql:v1
    

    3.docker ps查看容器状态

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

    4.进入容器并使用privileges.sql中的指定用户名和密码进入数据库

    docker exec -it mysql1 /bin/bash
    mysql -u hh -p
    

    5.查看已经存在的数据库

    mysql>show databases;

    分号不能拉下!

    6.进入数据库并查表

    use mysql1
    
    select * from user;
    

    三、小结

    1.步骤9输入网址时 冒号写成/

    (其实我心里是不愿意承认因为这个dockerfile和default.conf找错了找了半个多小时)

    因为上面的错误,一直在尝试,最后开了很多容器,

    下面的命令可以清理掉所有处于终止状态的容器。

    $ docker container prune
    

    2.Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。尽量少使用RUN

    3.CMD 容器启动命令

    shell 格式为 CMD <命令>
    
    exec 格式为 CND ["可执行文件", "参数1", "参数2"]
    

    使用 shell 格式的话,实际的命令会被包装成 sh -c 的形式进行执行,比如:

    CMD echo $HOME 在实际执行中,将会变成 CMD [ "sh", "-c", "echo $HOME" ]

    在使用 CMD 的时候一般推荐使用 exec 的格式,需要注意的是 exec 的格式会被解析成 JSON 数组,所以只能够使用双引号,而不能使用单引号。

    4.CMD类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:

    • CMD 在docker run 时运行
    • RUN 是在 docker build

    5.docker build -t [镜像名称:镜像标签] .

    点号!不要忘记写了!

    6.mysql>show databases;

    分号不能拉下

    7.schema.sql中的`和'这两个符号要分清,不然会出现语法错误。

  • 相关阅读:
    DLL注入实践
    程序编译保护机制
    加密配置文件总结
    PCL点云配准(3)
    PCL点云分割(3)
    ubuntu Ros环境halcon的一个程序
    opencv2/nonfree/nonfree.hpp:没有那个文件或目录
    深度图像计算三维点云
    利用深度学习的点云语义分割(一)
    3D 特征点概述(2)
  • 原文地址:https://www.cnblogs.com/huang0926huang/p/12764886.html
Copyright © 2020-2023  润新知