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

摘要:
目录(1)实现自定义web容器服务映像,提取配置文件映像,构建并运行容器(2)实现自定义数据库容器服务,提取配置文档映像,构建和运行容器MySQL基本操作(3)经验(1)实施自定义web容器服务要求:推荐Apache或nginx,并要求标记图像作者信息,安装必要的工具以便于维护;设置自己的web存储目录。为了安全起见,请将默认侦听端口80更改为自定义端口,并声明暴露的端口。当容器启动时,您可以直接进入web代码存储目录。

目录

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

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

(1)镜像拉取

  • 拉取nginx镜像
sudo docker pull nginx

系统综合实践 第2次实践作业 ——学习Dockerfile第1张
查看是否拉取成功

sudo docker images

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

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

系统综合实践 第2次实践作业 ——学习Dockerfile第3张
查看容器id

sudo docker ps -a

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

使用容器id进入容器

sudo docker exec -it 1761814f6e4b /bin/bash

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

(2)配置文件

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

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

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

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

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

  • 配置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 .

系统综合实践 第2次实践作业 ——学习Dockerfile第8张
运行容器

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

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

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

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

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

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

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

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

(1)拉取镜像

选择拉取mysql镜像

sudo docker pull mysql:5.7

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

images指令查看

docker images

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

(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 .
系统综合实践 第2次实践作业 ——学习Dockerfile第14张
  • 运行容器
sudo docker run --name mysql_test -p 2208:2208 -d mysql_test

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

ps指令查看容器

sudo docker ps

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

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

(4)mysql基本操作

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

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

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

mysql -u root -p

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

  • 查看数据库
show databases

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

  • 进入数据库
use docker_mysql

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

  • 执行查表操作

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

  • 查看配置信息
show variables

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

(三) 心得体会

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

免责声明:文章转载自《系统综合实践 第2次实践作业 ——学习Dockerfile》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇docker-compose 快速部署持续集成测试环境 Gitlab+Harbor+Jenkins pipeline 实现 tag run docker Imagesvue组件如何引入外部.js/.css/.scss文件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mysql优化二之锁机制

mysql优化二之锁机制 mysql提供了锁机制和MVCC机制来保证并发操作的安全性,这里主要讨论锁机制, MVCC见下篇文章 mysql的锁按照锁粒度可分为行锁与表锁,按照操作类型划分可读锁和写锁 InnoDB存储引擎支持表锁和行锁,默认锁为行锁,MyIsam只支持表锁 锁粒度越高则并发性越好 表锁 一、操作语法 1、 show open tables;...

MYSQL使用指南DOS下操作

一、          连接MYSQL。 格式: mysql -h主机地址 -u用户名 -p用户密码 1、例1:连接到本机上的MYSQL。 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的...

mysql中exists的详细说明

之前碰到了一道题,下面简要说明一下: 表结构如下: CREATE TABLE `testa` (`id` int(11) NOT NULL AUTO_INCREMENT,`cid` int(11) DEFAULT NULL comment '产品ID',`uid` int(11) DEFAULT NULL comment '用户ID',`buytime`...

Nginx 完全配置

入门教程 初识Nginx 你真的了解如何将 Nginx 配置为Web服务器吗 ## 设置静态网页编码 --> 针对非类Unix系统 针对服务器 http { ... charset UTF-8; ... include /etc/nginx/conf.d/*.conf; } 针对location ser...

Docker下安装 GRAYLOG 3.3

最近因为需要日志收集,对比了一下在graylog和传统的ELK之间选择了graylog 本篇目前只涉及安装部署,使用的是docker compose和拉取镜像安装,默认已安装docker 一、安装Docker-Compose yum install docker-compose 验证一下是否安装 docker-compose --version 二、安装...

Nginx的几个常用配置和技巧

一个站点配置多个域名 server{listen80;server_nameops-coffee.cnb.ops-coffee.cn;} server_name后跟多个域名即可,多个域名之间用空格分隔 一个服务配置多个站点 server{listen80;server_namea.ops-coffee.cn;location/{root/home/proj...