2020年系统综合实践 第二次作业

一、实现一个自定义的web容器服务(以Nginx为例)

(1)从Docker Hub 上 pull Nginx镜像作为基础;

  • docker pull nginx;

  • 查看是否PULL成功:docker images;

(2)查看Nginx的配置文件的路径;

find / -name default.conf;

(3)拷贝default.conf文件,修改相对应的配置;

  • docker cp 容器ID/名称:容器内路径 宿主机路径;

  • 修改端口号和web文件存放目录;

(4)编辑html文件,作为测试使用;

(5)编辑Dockerfile文件;

FROM nginx

MAINTAINER island

COPY default.conf /etc/nginx/conf.d/

COPY index.html /usr/share/nginx/web_html/

EXPOSE 8080

(6)构建镜像;

docker build -t island/nginx .;

(7)运行容器;

docker run -it --name nginx-teset -p 8080:2020 -d island/nginx ;

(8)打开浏览器,访问8080端口;

二、实现一个自定义的数据库容器服务(以MYSQL为例)

(1)从Docker Hub 上 pull mysql镜像作为基础;

docker pull mysql;

(2)在宿主机上创建mysql文件夹,用来存放镜像相关文件;

mkdir mysql;

(3)创建create_user.sql(用来创建用户)、school.sql(用来创建数据库和表);

  • 创建用户的SQL文件;
create user 'docker' identified by '123456';

grant all on test.* to 'docker'@'%' identified by '123456' with grant option;

flush privileges;
  • 创建数据库和表的SQL文件;
-- 创建数据库,数据库名为“test"

create database `test` default character set utf8 collate utf8_general_ci;

-- 切换到上一步所建的数据库中

use test;

-- 如果存在school表,则删除

DROP TABLE IF EXISTS `school`;

-- 建表

CREATE TABLE `school`(

	`id` varchar(9) NOT NULL,

	`name` varchar(20) NOT NULL,

	`age` integer(3) NOT NULL,

	PRIMARY KEY (`id`)

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 插入测试数据

INSERT INTO `school` (`id`,`name`,`age`) VALUES('000000001','JACK',18);

(4)创建Dockerfile文件;

#基础镜像

FROM mysql:5.7

#作者信息

MAINTAINER island



#设置不允许空秘密登陆

ENV MYSQL_ALLOW_EMPTY_PASSWORD no



#设置root用户密码

ENV MYSQL_ROOT_PASSWORD 123456



#把需要的SQL文件复制到容器中

COPY create_user.sql /mysql/create_user.sql

COPY school.sql /mysql/school.sql

(5)构建镜像;

docker build -t island/mysql:test;

(6)启动容器;

  • docker run -itd --name mysql_test island/mysql:test;

  • docker exec -it mysql_test /bin/bash;

(7)启动mysql服务,登入ROOT用户;

  • 未输入密码时无法登入;
  • 输入密码时登入成功;

(8)利用SQL文件,创建数据库和数据表;

  • source /mysql/school.sql;

  • 查询数据库是否成功创建;

(9)创建新的用户;

source /mysql/create_user.sql;

(10)用新用户登入,并对test数据库中的school表进行操作;


(11)查看容器配置信息;

docker inspect mysql_test;

三、遇到的问题与解决办法

(1)找不到nginx的配置文件;

通过发现了Linux有 find这条命令,可以很快的找到文件的路径。
find / -name 文件名;

(2)Nginx监听端口,无法显示出放在工作目录下的HTML文件。

只需要把文件名称改为:index.html 就可以显示出来。

(3)MYSQL容器在登入MYSQL服务时,不需要密码也可以登入。

这个问题困扰了我最久,最后在无意中发现,开容器的时候不能直接进入,如果直接进入容器的话,就不需要密码也可以登入MYSQL服务,通过先让容器在后台运行,在切换回容器在登入MYSQL服务的时候就需要密码了。

posted @ 2020-04-23 23:37  lokk  阅读(227)  评论(0编辑  收藏  举报