第2次实践作业
(1) 实现一个自定义的web容器服务
推荐apache或nginx,要求标明镜像作者信息,安装必要的工具以方便维护;设定你自己的web存放目录,安全起见,请将默认的监听端口80更改为你自定义的端口,并且声明暴露的端口,容器启动时,能直接进入web代码的存放目录。
1、拉取镜像
搜索镜像
docker seaech nginx
确认镜像已安装
docker images nginx
拉取镜像
docker pull nginx
2、挂载
创建待挂载的目录
sudo mkdir -p /data/nginx/{conf,conf.d,html,logs}
创建配置文件
启动临时的nginx
docker run -d --name nginx nginx
拷贝配置文件
sudo docker cp nginx:/etc/nginx/conf.d/default.conf conf.d/
删除临时的nginx
docker stop nginx
docker rm nginx
启动nginx
docker run --name nginx -d -p 80:80 -v /data/nginx/html:/usr/share/nginx/html -v /data/nginx/logs:/var/log/nginx -v /data/nginx/conf.d:/etc/nginx/conf.d nginx
这里是第一次错误……没注意没有目录,以为会自动创建,就跳过不管了(造成后面好几次创建镜像出错),正确应该是自己创建好
3、配置Dckerfile并创建镜像
创建目录后,把nginx容器的默认配置default.conf(上一步操作失误的情况下,这步变成了conf.d然后失败)复制进文件夹中,一共三个文件
第二个错误,因为第一个错误,根据报错查了好久,没考虑到之前没挂载到文件,以为是文件路径不对。一开始更改了文件路径。(忘记截图了,下面是正确的)
1.创建Dckerfile
2.创建index.html
3.复制default.conf(修改监听和目录)
这是创建镜像和容器都成功,但是因为第二个错误所以显示不出来。搜索了好久,因为没有太多参考,只参考了:参考,但是没有用()
错误如下:
这是在发现第二个错误后更改文件路径后的运行结果。
最后的正确显示:
(2) 实现一个自定义的数据库容器服务
可选择Mysql,Mariadb等,要求标明镜像作者信息,为了方便维护,需要能够查看容器内的配置信息,包括但不限于网络、应用配置文件等。在环境变量中设置好数据库的root密码且不允许空密码登录,创建一个测试数据库,指定用户名和密码。
参考:参考
搭建步骤
1、首先创建Dckerfile:
2、编写容器启动脚本setup.sh:
3、需要导入数据的mysql脚本命令schema.sql:
4、mysql权限设置命令privileges.sql:
5、创建镜像
docker build -t 名字 .
执行docker images查看该镜像是否存在于镜像列表中:
创建成功。
6、启动容器
docker run -d -p 13306:3306 名字
启动容器,并将端口映射到本地的13306端口,命令行如图所示:
容器启动成功。
验证结果
1、通过进入容器在命令行验证
执行exec命令进入容器:
docker exec -it id /bin/bash
前文中创建了docker_mysql数据库,并在此数据库中创建了user表,同时将数据库的连接授权赋予了新建的docker用户,因此验证过程为:
使用docker用户登录数据库:
mysql -u docker -p
输入密码123456通过登录验证
切换至docker_mysql数据库:
use docker_mysql;
查看数据库中的表:
show tables;
查看表中的数据:
select * from user;