引言:上一次作业同学们实现了docker环境的安装和基本配置,已经能够从docker的官方镜像仓库中拉取镜像,初步实现了入门。然而,从官方仓库拉取的镜像是最简单的镜像,在实际应用中经常需要根据需求额外修改镜像,这就涉及到了镜像的定制。在docker中我们可以使用Dockerfile文件实现自定义镜像,本次作业需要完成2个Dockerfile编写实践,掌握编写Dockerfile文件的基本方法。编写Dockerfile文件
(1) Dockerfile的几个重要参数
(2) 实现一个自定义的web容器服务
推荐apache或nginx,要求标明镜像作者信息,安装必要的工具以方便维护;设定你自己的web存放目录,安全起见,请将默认的监听端口80更改为你自定义的端口,并且声明暴露的端口,容器启动时,能直接进入web代码的存放目录。(以nginx为例)
a.什么是nginx
Nginx (engine x):是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx作为负载均衡服务:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。它基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resources Locator)URL作为沟通依据,通过HTTP协议提供各种网络服务。
nginx、百度百科
b.安装nginx
安装nginx镜像
查看是否安装完成成
使用命令来运行 nginx 容器
其中-name nginx-test:容器名称。
-p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
-d nginx: 设置容器在在后台一直运行
编写nginx的dockerfile
根据这两篇博客的启发:nginx基础配件讲解nginx的安装目录和配置语法可知:进入nginx_ruin容器内部,由以上资料,查找相关配置文件信息
whereis nginx查询内部有什么目录文件:查找conf.d、nginx.conf
进入/etc/nginx目录,ls命令查找可看出配置文件有conf.d、nginx.conf
分别cat conf.d、nginx.conf,conf.d有相应的server端口
建立nginx文件夹,里面存放有index.html的文件夹myweb(自己建立的web文件),在该文件目录下copy 原来的default.conf文件和编写Doclerfile文件
cd /usr/nginx/进入该目录文件进行以下操作:
vim Dockerfile,编写dockerfile,申明:来源,作者,联系方式和对外暴露端口8888
有一系列操作可知,index.html的路径,我们要做的是替换该页面为自己的html文件
copy default.conf到/usr/nginx/文件目录中
vim default.conf编辑default.conf,修改监听端口为2506,设置路径为/usr/share/nginx/myweb(容器里面页面存放路径)
在该目录下建立自己的新镜像mynginx:6666
在新镜像上run一个ruinweb容器,并对外暴露端口
在页面上访问localhost:8888
本地存放的相应目录
(2) 实现一个自定义的数据库容器服务
可选择Mysql,Mariadb等,要求标明镜像作者信息,为了方便维护,需要能够查看容器内的配置信息,包括但不限于网络、应用配置文件等。在环境变量中设置好数据库的root密码且不允许空密码登录,创建一个测试数据库,指定用户名和密码。
- pull mysql:5.7版本
- 在/usr/nginx目录下创建mysql文件存放配置文件,分别编写以下四个文件(第一个文件可忽略)
- 在新镜像mysql_ruin_3:test基础上运行zly_sql_3容器,并进入zly_sql容器
- 密码登录sql
- 查看数据库与表格
- 也可以插入数据
*退出sql
(3)途中遇到的问题
- 配置nginx文件时,误解了default.conf文件location路径,开始以为是路径是linux本地路径下的静态页面的路径,卡了好久,后来询问老师才知道是链接到容器目录下存放的html页面(ps:老师好有耐心,超可爱~~)
- 配置mysql文件时,要注意环境变量的配置,还有标点符号哦,过程进入mysql输入密码有遇到error 1045错误,可以通过root用户进入,即mysql -u root -p
- 配置mysql文件时,遇到运行容器立马就停止,可以删除Dockerfile文件中的cmd命令,即可解决;
- 途中win10版本限制太多,就改了ubuntu做docker了
- 还有就是我太菜了。。。。
(4)附上配置文件
nginx
mysql
(setup.sh)