第2次实践作业
上一次作业同学们实现了docker环境的安装和基本配置,已经能够从docker的官方镜像仓库中拉取镜像,初步实现了入门。然而,从官方仓库拉取的镜像是最简单的镜像,在实际应用中经常需要根据需求额外修改镜像,这就涉及到了镜像的定制。在docker中我们可以使用Dockerfile文件实现自定义镜像,本次作业需要完成2个Dockerfile编写实践,掌握编写Dockerfile文件的基本方法。
(1) 实现一个自定义的web容器服务
推荐apache或nginx,要求标明镜像作者信息,安装必要的工具以方便维护;设定你自己的web存放目录,安全起见,请将默认的监听端口80更改为你自定义的端口,并且声明暴露的端口,容器启动时,能直接进入web代码的存放目录。
- 拉取nginx镜像并运行
sudo docker pull nginx:latest
碎碎念:家里网速慢,光第一步就做了将近一个小时,重启虚拟机好几次,切换网络好几遍,还好最终下载好了。
- 查看是否已安装了 nginx
sudo docker images
- 修改 default.conf文件
a.更改配置文件存放目录(将其放置主目录下)
sudo docker cp <容器ID>:/etc/nginx/conf.d/default.conf .
b.发现文件是只读文件
c.修改文件,使其变成可读写
sudo chmod 666 default.conf
d.修改成功以后,修改文件内容
修改前:
修改后:
-
编写一个简单的HTML文件(index.html),并在浏览器上运行试试
-
编写dockerfile文件(Dockerfile)
内容:
-
两个文件准备就绪:
-
先把之前运行的容器停掉,再从dockerfile所在目录下打开终端,构建自己的Nginx镜像。
-
构建镜像
sudo docker build -t gulyarnginx .
构建失败了,有一处报错,这个报错应该是说文件路径问题,因此我在主目录下新建了一个文件夹(my),然后把三个文件拖入。
然后在这个文件夹下打开终端,重新构建
构建成功!(太好了!) -
运行容器
(2) 实现一个自定义的数据库容器服务
可选择Mysql,Mariadb等,要求标明镜像作者信息,为了方便维护,需要能够查看容器内的配置信息,包括但不限于网络、应用配置文件等。在环境变量中设置好数据库的root密码且不允许空密码登录,创建一个测试数据库,指定用户名和密码。
-
创建mysql容器:
docker pull mysql:5.7
-
创建Dockerfile、privileges.sql、setup.sh、schema.sql文档
新建一个文件夹mysql,里面再创建以下四个文档.
(1)Dockerfile:
黄色标出的是用户名和密码,待会登录数据库需要用到
(2)setup.sh:(容器启动脚本)
(3)schema.sql:(导入数据的mysql脚本)
(4)privileges.sql:(mysql权限设置)
-
创建mysql镜像
sudo docker build -t mysql-g .
-
启动容器 (指令中 mysql-g 是我之前创建的mysql镜像名称)
sudo docker run --name mysql-g -p 3306:3306 -d mysql-g
-
查看是否创建成功
sudo docker ps
-
进入容器:
sudo docker exec -it mysql-g /bin/bash
-登录数据库:
使用docker用户登录数据库:mysql -u docker -p (我的自定义用户名:gulyar 密码:2541241)
切换至docker_mysql数据库:use docker_mysql;
查看表中的数据:select * from user;
(注意语句后面的分号(已标出黄色))
(3)总结:
本次实验在第一次时候,因为网络问题,创建sql容器失败了,导致实验失败a。这是第二次做了,因为后续新实验用到了mysql,所以必须要创建成功才可以顺利完成后续的实验内容。不得不说,第二次做实验非常好上手,很快就完成了,并且理解了每一步操作的内容,这是我最大的进步,此外我也锻炼了我在linux中处理错误的能力,操作过程中出错了,会非常淡定的想办法,不会像之前一样惊恐,一看到报错就炸毛,我认为这也是我很大的进步,为后续实验奠定了一定的基础。