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服务的时候就需要密码了。