上一次作业同学们实现了docker环境的安装和基本配置,已经能够从docker的官方镜像仓库中拉取镜像,初步实现了入门。然而,从官方仓库拉取的镜像是最简单的镜像,在实际应用中经常需要根据需求额外修改镜像,这就涉及到了镜像的定制。在docker中我们可以使用Dockerfile文件实现自定义镜像,本次作业需要完成2个Dockerfile编写实践,掌握编写Dockerfile文件的基本方法。

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

推荐apachenginx,要求标明镜像作者信息,安装必要的工具以方便维护;设定你自己的web存放目录,安全起见,请将默认的监听端口80更改为你自定义的端口,并且声明暴露的端口,容器启动时,能直接进入web代码的存放目录。

1:pull nginx,运行容器,复制/etc /nginx/ conf.d /default.conf的内容

2:在主目录下创建mdir,用于存文件

mkdir mdir

3:在mdir中创建文件:
(1):default.conf:粘贴,修改:更改端口为3600,更改root为本地路径

(2):编写index.html

(3):创建dockefile(镜像名也为dockerfile)

4:docker build 命令创建容器

5:查看容器,运行结果

​ 如下图,名为dockerfile的自定义镜像已经构建完成

​ 启动自定义镜像

docker run --name test0 -p 8081:82 -d dockerfile

(--name是指定进程的名字)

(容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P(大写) 或 -p (小写) 参数来指定端口映射,-P是随机映射一个 49000~49900 的端口到内部容器开放的网络端口,-p是自定义端口映射)

​ 在浏览器中访问localhost:8081:

(2) 实现一个自定义的数据库容器服务

可选择MysqlMariadb等,要求标明镜像作者信息,为了方便维护,需要能够查看容器内的配置信息,包括但不限于网络、应用配置文件等。在环境变量中设置好数据库的root密码且不允许空密码登录,创建一个测试数据库,指定用户名和密码。

1:pull Mysql5.7

2:创建工作目录,在该目录下创建:

​ Dockerfile:

​ 容器启动脚本setup.sh

​ Mysql的数据库脚本命令schema.sql

​ Mysql权限设置命令privileges.sql

​ 在工作目录下运行docker build命令

​ 查看是否成功构建了镜像

​ 运行容器:

​ 进入容器:

​ 指定用户与密码登陆(已在privileges.sql中创建的用户)

​ 查看建好的数据库

​ 进入数据库并查表

​ 退出普通用户,用root用户登陆

​ 查看数据库信息

​ 查看mysql配置信息,部分截图如下

​ 退出容器,查看log

(3)遇到的困难

1:build命令缺了一个符号 ‘ . ‘

2:docker run命令时没有设置端口映射

3:Mysql运行一段时间后自动退出

Docker logs -f sql(镜像ID)

从日志中我发现问题出在dockerfile,setup.sh,schema.sql中

Dockerfile和Setup.sh中的路径错误,应将/mysql/改为/usr/mdir/sql

Schema.sql中,数据项的语法不正确,反引号与单引号混了

(以前用的sqlserver,没接触过mysql。。)