2020系统综合实践 第2次实践作业
1.实现一个自定义的web容器服务
推荐apache或nginx,要求标明镜像作者信息,安装必要的工具以方便维护;设定你自己的web存放目录,安全起见,请将默认的监听端口80更改为你自定义的端口,并且声明暴露的端口,容器启动时,能直接进入web代码的存放目录。
- 1.拉取nginx镜像:
docker pull nginx
- 2.创建并运行容器
- 创建容器
sudo docker run -it nginx /bin/bash
- 查看容器的工作目录,方便进行后续操作
pwd
可见容器工作在根目录下
- 创建容器
- 3.更改nginx的web存放目录
- 修改nginx.conf文件
-
直接修改好像很复杂,所以先复制出来修改,再将原文件覆盖
sudo docker cp <容器ID>:/etc/nginx/conf.d/default.conf .
-
然后就能顺利地修改conf文件啦
修改箭头指向的参数
listen
是监听的端口号,从80
改为了2049
root
为Web默认目录,从/usr/share/nginx/html
改为/usr/my_html/
-
修改完成后编辑dockerfile
from nginx #base image copy default.conf /etc/nginx/conf.d/ # cover file copy index.html /usr/my_html/ # copy my file maintainer lyh<471727250@qq.com> #author expose 8000 #expose port 8000
-
构建镜像
docker build -t mynginx .
构建成功,但是不知道为什么报错了,但是没有影响? -
创建容器验证结果
sudo docker run --name my_nginx -p 8000:2049 -d mynginx
访问浏览器http://localhost:8000/
-
- 修改nginx.conf文件
2.实现一个自定义的数据库容器服务
可选择Mysql,Mariadb等,要求标明镜像作者信息,为了方便维护,需要能够查看容器内的配置信息,包括但不限于网络、应用配置文件等。在环境变量中设置好数据库的root密码且不允许空密码登录,创建一个测试数据库,指定用户名和密码。
- 参考文档:dockerfile运行mysql并初始化数据
- 首先,pull一个mysql镜像
sudo docker pull mysql
[红色]大坑预警!!!
- 创建命令文档
- dokerfile:
from mysql:5.7 #基础镜像 maintainer lyh<471727250@qq.com> #维护者信息 ENV MYSQL_ALLOW_EMPTY_PASSWORD no #不允许空密码登录 ENV MYSQL_ROOT_PASSWORD=123456 #root密码 COPY setup.sh /mysql/setup.sh COPY schema.sql /mysql/schema.sql COPY privileges.sql /mysql/privileges.sql #所需文件 CMD ["sh", "/mysql/setup.sh"] #启动命令
- setup.sh
#!/bin/bash set -e #查看mysql服务的状态,方便调试,这条语句可以删除 echo `service mysql status` echo '1.启动mysql....' #启动mysql service mysql start sleep 3 echo `service mysql status` echo '2.开始导入数据....' #导入数据 mysql < /mysql/schema.sql echo '3.导入数据完毕....' sleep 3 echo `service mysql status` #重新设置mysql密码 echo '4.开始修改密码....' mysql < /mysql/privileges.sql echo '5.修改密码完毕....' #sleep 3 echo `service mysql status` echo `mysql容器启动完毕,且数据导入成功` tail -f /dev/null
- schema.sql
-- 创建数据库 create database `docker_mysql` default character set utf8 collate utf8_general_ci; use docker_mysql; -- 建表 DROP TABLE IF EXISTS test; CREATE TABLE test ( `id` bigint(20) NOT NULL, `name` varchar(255) DEFAULT "" ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- 插入数据 INSERT INTO test (`id`, `name`) VALUES (0209,'lyh');
- privileges.sql
use mysql; select host, user from user; -- 因为mysql版本是5.7,因此新建用户为如下命令: create user lyh identified by '123456'; -- 将docker_mysql数据库的权限授权给创建的用户,密码为123456: grant all on docker_mysql.* to lyh@'%' identified by '123456' with grant option; -- 这一条命令一定要有: flush privileges;
- dokerfile:
- 创建镜像
sudo docker build -t mysql_lyh .
- 创建容器
sudo docker run --name msql -p 8000:2049 -d mysql_lyh
- 查看日志
sudo docker logs msql
???有问题 不对劲不对劲
查看当前容器的运行状态:
我那么大一个容器,它不见了!然后我就在怀疑人生搁置实验的时候,QQ群传来的喜讯,mysql镜像换5.7就可以了 - 回炉
sudo docker pull mysql:5.7
- 然后将dokerfile中
from mysql
改为from mysql:5.7
- 删除上一个容器
sudo docker rm 173
sudo docker build -t mysql_lyh .
sudo docker run --name msql -p 8000:2049 -d mysql_lyh
创建容器正常成功
- 验证
- 进入容器
sudo docker exec -it 8c8c31980a69 /bin/bash
- root登录:
mysql -u root -p
输入密码
- 进行一些查询操作
- 退出,重新用自定义的用户和密码登录
- 进入容器
- 结束