系统实践第二次作业
第2次实践作业:镜像定制
计算机3班 041801516 李伟
相关文件(sql和配置文件见文末下载地址)
-
定制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
传仓库见上一次作业【相关地址】
- 定制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
- 实践时间:
- 4.8-4.10 估计共 12h ,主要花在处理一些很突然的 bug 和 进阶要求上
- 难度
- 比较困难
- 针对本次实践任务中遇到的各类问题和解决办法进行总结(不少于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
【个人博客相关地址】
【相关文件下载】