第2次实践作业
- 上一次作业同学们实现了docker环境的安装和基本配置,已经能够从docker的官方镜像仓库中拉取镜像,初步实现了入门。然而,从官方仓库拉取的镜像是最简单的镜像,在实际应用中经常需要根据需求额外修改镜像,这就涉及到了镜像的定制。在docker中我们可以使用Dockerfile文件实现自定义镜像,本次作业需要完成2个Dockerfile编写实践,掌握编写Dockerfile文件的基本方法。
(1) 实现一个自定义的web容器服务
- 拉取nginx镜像
- 在主目录中创建docker文件夹,以存放Dockerfile等配置文件
- 通过命令
docker run --name nginxtest -d nginx
启动一个名为nginxtest的容器
- 将容器内的default.conf文件(nginx配置文件)拷贝到docker目录,并修改配置文件中的监听端口和web存放目录
-
编写Dockerfile文件和index.html文件
-
构建自定义镜像
- 启动容器并进入
- 查看网页
(2) 实现一个自定义的数据库容器服务
- 拉取mysql5.7镜像
- docker_mysql目录下的四个文件
- Dockerfile:用来构建自定义镜像
setup.sh:用来初始化sql,并导入sql配置语句
priviliges.sql:用来新建数据库用户及分配表的权限
schema.sql:用来新建数据库,新建表并插入数据
四个文件的配置及说明如下:
Dockerfile
FROM mysql:5.7#不允许空密码登录
ENV MYSQL_ALLOW_EMPTY_PASSWORD no
#设置root密码
ENV MYSQL_ROOT_PASSWORD admin
#拷贝所需文件
COPY setup.sh /mysql/setup.sh
COPY schema.sql /mysql/schema.sql
COPY privileges.sql /mysql/privileges.sql
#设置容器启动时执行的命令
CMD ["sh","/mysql/setup.sh"]
#设置暴露端口
EXPOSE 3306
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`
#增加用户docker
mysql < /mysql/privileges.sql
echo '成功添加用户docker'
#sleep 3
echo `service mysql status`
echo `mysql容器启动完毕,且数据导入成功`
tail -f /dev/null
schema.sql
create database `S_C` default character set utf8 collate utf8_general_ci;
use S_C;
DROP TABLE IF EXISTS `S`;
CREATE TABLE `S`(
`Sno` varchar(255) NOT NULL,
`Sname` varchar(255) NOT NULL,
`Sex` varchar(5) NOT NULL,
CHECK(`Sex`='男' OR `Sex`='女'),
PRIMARY KEY(`Sno`)
);
INSERT INTO `S`(`Sno`,`Sname`,`Sex`) VALUES('031702533','吕瑞峰','男');
privileges.sql
use mysql;
select host, user from user;
create user docker identified by '123456';
-- 将S_C数据库的权限授权给创建的用户docker,密码为123456:
grant all on S_C.* to docker@'%' identified by '123456' with grant option;
-- 这一条命令一定要有:
flush privileges;
- 构建自定义镜像
- 运行容器并查看日志
- 使用数据库中的docker身份登录并查看数据表内容
第5次实践作业
- 本次作业为Python专题。Python是将练习使用docker容器运行Python程序。Python是很常用的程序设计语言,但是Python程序的运行依赖于提前的系统环境配置,为了降低系统配置的复杂度,同时减小资源开销,将系统环境容器化是一种解决方案。请根据Python官方镜像的镜像说明,自定义Python镜像文件,将Python程序运行起来。
1.目录与配置文件
Dockerfile
#DockerfileFROM python:3
#工作路径
WORKDIR /usr/src/app
#拷贝文件
COPY requirements.txt ./
#根据requirement.txt安装项目所需包
RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.douban.com/simple
#指定容器启动时默认要运行的程序
CMD [ "python", "./hello.py" ]
requirments.txt
#requirement.txt
PyMySQL
opencv-python
hello.py
print("hello world!")
date.py
import calendar
yy = int(input("输入年份: "))
mm = int(input("输入月份: "))
print(calendar.month(yy,mm))
mysql.py
import pymysql
class Mysql():
def __init__(self,ipaddress,urname,pd,db_name,table_name):
self.ip=ipaddress
self.username=urname
self.password=pd
self.db_name=db_name
self.table_name=table_name
def connect(self):
self.conn=pymysql.connect(self.ip,self.username,self.password,self.db_name)
if(self.conn!=None):
print("yes")
self.cursor=self.conn.cursor()
def createtable(self,sql):
self.cursor.execute('drop table if exists %s;' %self.table_name)
self.cursor.execute(sql)
def insertdata(self,sql):
try:
self.cursor.execute(sql)
self.conn.commit()
except :
self.conn.rollback()
def selectall(self):
sql='select * from %s' %self.table_name
self.cursor.execute(sql)
return self.cursor.fetchall()
def updatedata(self):
try:
self.cursor.execute(sql)
self.conn.commit()
except :
self.conn.rollback()
def deletedata(self):
try:
self.cursor.execute(sql)
self.conn.commit()
except :
self.conn.rollback()
def close(self):
self.conn.close()
ip='lnmp_mysql-container' #容器名
username='root' #用户名
password='123' #密码
db_name='myDB' #数据库名
table_name='Stu' #表名
db=Mysql(ip, username, password, db_name,table_name)
db.connect()
sql="""create table Stu (
id varchar(10) primary key,
name varchar(20)
);"""
db.createtable(sql)
sql1="insert into Stu values(123,'abc');"
sql2="insert into Stu values(456,'bcd');"
db.insertdata(sql1)
db.insertdata(sql2)
print(db.selectall())
db.close()
opencv.py
import cv2 as cv
img1 = cv.imread("photo1.png")
img2 = cv.imread("photo2.png")
result = cv.addWeighted(img1,0.3,img2,0.3,0)
cv.imwrite('re.png', result)
print("success!")
2.生成镜像
docker build -t mypython .
3.项目构建
- 简单helloworld
- 日历输出
- mysql数据库操作&&查看数据库
- opencv
总结
- 补做的时候参考了其他同学的经验,还是很有帮助的,遇到的问题主要是ubuntu系统内存爆满了,于是重新格式化再做了一遍。