系统结构综合实践-第二次作业

今天早上一醒来看到这个实践作业的时候完全是懵的,听完老师的说明还是懵的T_T(流下不学无术的泪水

于是在网上看了不少资料。尚硅谷的docker视频教程挺不错的(安利一下),看完之后才比较清楚这个dockerfile是怎么一回事。

截取视频教程中一些方便理解docker和Dockerfile的图片。过于详细的内容就不复述了

(1) 实现一个自定义的web容器服务

准备工作

在根目录下新建一个文件夹用于保存接下来要编写的dockerfile

mkdir mydocker
cd ~/dockerfile
vim Dockerfile

这里就用vim新建好了一个Dockerfile文件

1587201032342

使用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文件

发现使用的标点符号不匹配,修改为``这样的就可以了(不要使用'')

原文地址:https://www.cnblogs.com/WAYNEEZHONG/p/12755716.html