系统综合实践 第2次实践作业 ——学习Dockerfile

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

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

(1)镜像拉取

  • 拉取nginx镜像
sudo docker pull nginx


查看是否拉取成功

sudo docker images

  • 运行nginx容器
sudo docker run --name nginx-test -p 8080:80 -d nginx


查看容器id

sudo docker ps -a

使用容器id进入容器

sudo docker exec -it 1761814f6e4b /bin/bash

(2)配置文件

需要配置的文件有:default.conf、Dockerfile、index.html(自定义一个简单的网页),要将这三个文件放在一个目录下

  • 配置default.conf
    找到初始default.conf文件,复制出来到前面设置好的目录下修改配置
cd /etc/nginx/conf.d
cat default.conf

两处需修改:
①修改监听窗口listen,我这里改为2208
②修改location为放置三个配置文件的目录

  • 配置Dockerfile
FROM nginx
#基础镜像
MAINTAINER yezi
#维护者
COPY default.conf /etc/nginx/conf.d/
COPY index.html /home/yeyanling/docker/nginx_web/

WORKDIR /home/yeyanling/docker/nginx_web/
#工作目录
EXPOSE 2208
#映射端口

(3)镜像构建及容器运行

build指令构建镜像(注意最后有一个英文句号)

sudo docker build -t nginx_webtest .


运行容器

docker run --name my_nginx_web -p 2208:2208 -d nginx_webtest

--name:以什么名字启动容器
-p:将容器端口映射到服务器端口
-d:需要启动的容器的名称

打开浏览器进入http://localhost:2208/看看

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

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

(1)拉取镜像

选择拉取mysql镜像

sudo docker pull mysql:5.7

images指令查看

docker images

(2)配置文件

需要的文件:Dockerfile、容器启动脚本setup.sh、mysql权限设置命令privileges.sql、导入数据的mysql脚本命令schema.sql共4个,也是要放在同一目录下

  • Dockerfile
FROM mysql:5.7
#基础镜像

MAINTAINER yezi
#维护者

ENV MYSQL_ALLOW_EMPTY_PASSWORD no
ENV MYSQL_ROOT_PASSWORD=123456
#不允许空密码登陆,设置初始密码

COPY setup.sh /mysql/setup.sh
COPY schema.sql /mysql/schema.sql
COPY privileges.sql /mysql/privileges.sql
#将所需文件放到容器中

CMD ["sh", "/mysql/setup.sh"]
#设置容器启动时执行的命令
  • 容器启动脚本setup.sh
#!/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`

#重新设置mysql密码
echo '4.开始修改密码....'
mysql < /mysql/privileges.sql
echo '5.修改密码完毕....'

#sleep 3
echo `service mysql status`
echo `mysql容器启动完毕,且数据导入成功`

tail -f /dev/null
  • mysql权限设置命令privileges.sql
use mysql;
select host, user from user;

-- 对mysql5.7,新建用户为如下命令:
create user yezi identified by '123456';

-- 将docker_mysql数据库的权限授权给创建的yezi用户,密码为123456:
grant all on docker_mysql.* to yezi@'%' identified by '123456' with grant option;

flush privileges;
  • 导入数据的mysql脚本命令schema.sql
-- 创建数据库
create database `docker_mysql` default character set utf8 collate utf8_general_ci;

use docker_mysql;

-- 建表
DROP TABLE IF EXISTS user;

CREATE TABLE user (
  `id` varchar(25) NOT NULL,
  `name` varchar(25) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- 插入数据
INSERT INTO user (`id`, `name`)
VALUES
    ('0208','yezi');

(3)镜像构建及容器运行

  • 构建镜像mysql_test
sudo docker build -t mysql_test .
  • 运行容器
sudo docker run --name mysql_test -p 2208:2208 -d mysql_test

ps指令查看容器

sudo docker ps

  • 进入容器
sudo docker exec -it mysql_test /bin/bash

(4)mysql基本操作

  • 登录
    两种登录方式:
    ①用户名登录
    使用之前在配置文件中设置的用户名和密码登录,可以输入exit登出
mysql -u yezi -p

②root登录
输入的密码也是配置文件中设置的

mysql -u root -p

  • 查看数据库
show databases

  • 进入数据库
use docker_mysql

  • 执行查表操作

  • 查看配置信息
show variables

(三) 心得体会

上次做完实验直接虚拟机关机了,没有关闭docker,导致这次实验每执行一条docker指令后面都要带一句warning,搜了一下网上类似的问题不太能对得上,因为不影响指令执行想先做完实验再解决。希望以后都记得“随手关门”。
对于这次实验的话,感觉要求写的有点简单,讲了几个指令但是不知道怎么用,所以一开始有点摸不着头脑无从下手的感觉。百度了不知道是不是关键字的原因,也没有类似的样例。所以做得比较晚,参考了前面交作业的大家的流程,包括在mysql版本的选择上也是看了群里大家出现的问题才选择的。希望下次作业要求或引导可以详细些。

posted @ 2020-04-24 17:37  叶叶叶子  阅读(497)  评论(0编辑  收藏  举报