系统结构综合实践-第二次作业
今天早上一醒来看到这个实践作业的时候完全是懵的,听完老师的说明还是懵的T_T(流下不学无术的泪水
于是在网上看了不少资料。尚硅谷的docker视频教程挺不错的(安利一下),看完之后才比较清楚这个dockerfile是怎么一回事。
截取视频教程中一些方便理解docker和Dockerfile的图片。过于详细的内容就不复述了
(1) 实现一个自定义的web容器服务
准备工作
在根目录下新建一个文件夹用于保存接下来要编写的dockerfile
mkdir mydocker
cd ~/dockerfile
vim Dockerfile
这里就用vim新建好了一个Dockerfile文件
使用docker build搭建镜像
使用docker build有两种方式
docker build -t 新镜像名:TAG #这个是在Dockerfile所在目录下
docker build -f xxxx -t 新镜像名:TAG #这个在-f后指定具体目录
安装的东西有点多,等的有点久
使用docker run运行镜像
运行成功
进入容器,运行一下ifconfig查看一下基本的网络信息
出现的问题
安装过程中曾经碰到的问题
由于网络原因,open-ssh安装失败了,我就不安装了
在vim中修改了原本的Dockerfile,接下来就可以了
附上修改完以后的Dockerfile
#设置基础镜像
FROM ubuntu
#镜像作者信息
MAINTAINER zhong_wei_qi<897948297@qq.com>
#下载并安装nginx,还有必要的维护工具
RUN apt-get update && apt-get install -y nginx vim net-tools
#将默认端口改为自定义端口
EXPOSE 8000
#web工作目录设置为/var/tmp
ENV WEBPATH /var/tmp
#启动时登录到工作目录
WORKDIR $WEBPATH
RUN echo "success============OK"
(2) 实现一个自定义的数据库容器服务
这里选择比较熟悉的MySQL。
参考了博客https://www.cnblogs.com/UniqueColor/p/11150314.html对于如何搭建MySQL的介绍
以及https://www.cnblogs.com/rimmy/p/7679076.html对于如何在mysql中创建新用户
https://www.cnblogs.com/yfalcon/p/9044246.html对于docker run命令的详解
1、首先拉取一个较稳定的mysql版本,这里选择MySQL5.7,然后使用dockerfile对于我们的要求进行定制
2.新建一个文件夹用于存放Dockerfile还有跟MySQL相关的配置文件
3.编写Dockerfile文件
#设置基础镜像
FROM mysql:5.7
#镜像作者信息
MAINTAINER zhong_wei_qi<897948297@qq.com>
#配置基础环境,不允许空密码登录,并设置初始密码
ENV MYSQL_ALLOW_EMPTY_PASSWORD no
ENV MYSQL_ROOT_PASSWORD=wayne
#设置容器启动时执行的命令
CMD ["sh", "/mysql/setup.sh"]
4.编写容器启动脚本setup.sh
以下信息会在容器的日志中出现,使用echo会更加方便我们解读日志,找出错误
#!/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`
#为数据库指定新用户并创建密码
echo '4.开始修改密码....'
mysql < /mysql/privileges.sql
echo '5.修改密码完毕....'
#sleep 3
echo `service mysql status`
echo `mysql容器启动完毕,且数据导入成功`
tail -f /dev/null
5.编写数据库创建脚本schema.sql
-- 创建数据库并带上字符集!!
create database `docker_mysql` default character set utf8 collate utf8_general_ci;
use docker_mysql;
-- 建一张图书馆表
DROP TABLE IF EXISTS `library`;
CREATE TABLE `library` (
`id` varchar(20) NOT NULL,
`bookname` varchar(255) DEFAULT NULL,
`auther` varchar(255) DEFAULT NULL,
`class` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- 导入初始数据
INSERT INTO `library` (`id`, `bookname`, `auther`, `class`)
VALUES
('0001','English','MRw','language');
6.编写数据库权限配置文件privileges.sql
-- 使用MySQL中自带的user表创建新用户
use mysql;
select host, user from user;
-- 因为mysql版本是5.7,因此新建用户为如下命令:
create user docker identified by '123456';
-- 将docker_mysql数据库的权限授权给创建的docker用户,密码为123456
--create user 'username'@'host';localhost为本地登录,'%'表示任意一台计算机都可远程登录
grant all on docker_mysql.* to docker@'%' identified by '123456' with grant option;
-- 这一条命令一定要有:
flush privileges;
7.运行Dockerfile创建镜像
8.运行容器,指定容器为后台运行,即使exit以后容器仍不会停止工作;指定容器名;并进行端口映射
9.查看日志
docker logs msql#后跟容器名
从博客里学了一手,这个很重要,能查看我们的配置文件是否正常使用了,还可以查出发生的问题。
10.进入容器并使用账户docker登录mysql
11.显示已存在的数据库
12.查看在schema.sql文件中创建按的数据库和表
13.使用在schema.sql中创建的root用户登录数据库
可以看到root用户具有更高的权限
14.查看MySQL的配置情况
show variables;
到此mysql的搭建和配置就差不多了
出现的错误
查看日志时发现运行到导入数据便没有再运行下去,说明build由于错误中断了
解决办法:
检查schema.sql文件
发现使用的标点符号不匹配,修改为``这样的就可以了(不要使用'')