系统综合实践 第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版本的选择上也是看了群里大家出现的问题才选择的。希望下次作业要求或引导可以详细些。