系统实践第二次作业

第2次实践作业:镜像定制

计算机3班 041801516 李伟

  相关文件(sql和配置文件见文末下载地址)

  1. 定制Web容器镜像

    • 首先编写 Dockerfile 文件
    FROM nginx
    MAINTAINER Wei Li 041801516
    EXPOSE 81
    # 设置容器打开之后的默认工作路径,设置之后每次运行容器都会进入该目录
    WORKDIR /usr/myweb/html
    
    # 将Dockerfile同级目录下的html文件和配置文件copy到容器的对应目录下
    COPY html/hello.html /usr/myweb/html
    COPY nginx/default.conf /etc/nginx/conf.d/default.conf
    
    # 安装相关工具 -p的意思是没有就自动创建
    RUN mkdir -p /usr/myweb/html && apt-get update && apt-get install -y vim && apt-get install net-tools
    
    • 使用命令构建出镜像
    docker build -t nginx:1.0 .     # 后面的 . 不要漏了
    
    • 构建结果
    • 使用命令启动容器
    docker run -d -p 8081:81 --name mynginx nginx:1.0
    
    • 使用进入容器
    docker exec -it mynginx bash
    
    • 查看配置文件
    cat /etc/nginx/conf.d/default.conf
    

      和我们设置的一样,并且把监听端口改为了 81 端口,默认打开页面改为了我们自己写的网页

    • 查看端口情况
    netstat -tlnup|grep nginx #查看端口监听情况
    
    • 打包镜像上传到自己的仓库
    docker commit containerID name
    

    传仓库见上一次作业【相关地址】


  1. 定制MYSQL数据库镜像
    - 首先编写 Dockerfile 文件
    FROM mysql:5.7
    MAINTAINER Wei Li 041801516
    
    #设置不允许无密码登录 但是遇到了无效的问题,一直没有解决
    ENV MYSQL_ROOT_EMPTY_PASSWORD no
    ENV MYSQL_ROOT_PASSWORD=mysql
    
    COPY schema.sql /mysql/schema.sql
    COPY privileges.sql /mysql/privileges.sql
    COPY setup.sh /mysql/setup.sh
    
    CMD ["sh", "/mysql/setup.sh"]
    
    • 使用命令构建出镜像
    docker build -t mysql:test . .     # 后面的 . 不要漏了
    
    • 使用命令启动容器
    docker run -d -p 3306:3306 --name mysqltest mysql:test
    
    • 使用进入容器
    docker exec -it mysqltest bash
    
    • 用创建的用户登录
    mysql -u user1 -p
    
    - 查看导入的表

  1. 实践时间:
    • 4.8-4.10 估计共 12h ,主要花在处理一些很突然的 bug 和 进阶要求上

  1. 难度
    • 比较困难

  1. 针对本次实践任务中遇到的各类问题和解决办法进行总结(不少于3条)
    • docker run -d -p 8081:81 --name mynginx nginx-2.0 命令出现错误使得容器启动后马上关闭,原因在于 nginx 配置文件写错
    • 在更改 nginx 配置文件或者其中 html 文件改变之后,要用 docker restart mynginx 重启容器来加载容器,光退出容器没有用
    • 在 mysql 镜像的 dockerfile 中,设置了环境变量没有起作用,不知道为什么,搜了半天找不到解决办法,花了太多时间了
    • mysql 在 build 的时候,也出现了容器启动后马上关闭的情况,原因在于 sql 语句出错
    • 有时候可以在脚本中加入输出语句来帮助排错,使用 docker logs containerID 来输出日志

参考资料

【官方文档】Docker Hub
【官方文档】MySQL Dockerfile
【个人博客相关地址】
【相关文件下载】

posted @ 2021-04-10 21:30  物转星移几度秋  阅读(52)  评论(0编辑  收藏  举报