##Dockerfile详解
####作用Dockerfile是用来构建docker镜像的文件
构建步骤:
1.编写dockerfile 文件
2.docker build 构建为一个镜像
3.docker run 运行这个镜像

####Dockerfile基础指令

FROM        指定基础镜像
MAINTAINER  指定维护者信息
RUN         构建之前需要做点什么
ADD         添加文件到镜像
COPY        复制文件到镜像
WORKDIR     设置初始工作目录
VOLUME      设置挂载目录
EXPOSE      开放端口
ENV         设置系统环境变量
ENTRYPOINT	容器启动后需要做的事,可以在启动时替换
CMD         容器启动后需要做的事

####案例1 uwsgi+flask
#####编写 Dockerfile文件

##
FROM python:3.8.10 #基础镜像
#替换pip源
RUN pip3 install -i https://mirrors.aliyun.com/pypi/simple/ -U pip
RUN pip3 config set global.index-url https://mirrors.aliyun.com/pypi/simple/
#安装uwsgi
RUN pip3 install uwsgi
#复制依赖列表
COPY requirements.txt /
#安装依赖包,如果前面修改了pip源,此处无需指定源。
RUN pip3 install -r requirements.txt -i "http://mirrors.aliyun.com/pypi/simple" --trusted-host "mirrors.aliyun.com"
#开放端口5000
EXPOSE 5000
#切换初始工作路径
WORKDIR /root
#复制当前文件夹全部文件到/root
COPY . /root
#容器启动后运行uwsgi
CMD uwsgi --ini uwsgi.ini

#####编写uwsgi.ini 文件

[uwsgi]
#uwsgi启动时,所使用的地址和端口(这个是http协议的)
http=0.0.0.0:5000
#工作目录
chdir=/root
#python 启动程序文件
wsgi-file=app.py
#python 程序内用以启动的application 变量名
callable=app
#处理器数
processes=1
#线程数
threads=10
#是否开启多线程
enable-threads = True
#是否有主线程
master = True
#进程文件
pidfile = uwsgi.pid
#日志文件
#Docker后台启动时不要输出日志文件,否则容器会自动结束运行
#daemonize = uwsgi.log

#####构建镜像

docker build -f Dockerfile -t mek/weibo_img:6 .
-f			指定Dockerfile文件
-t			镜像标签:版本号
. 			当前目录下生成

#####启动容器

docker run -p 8018:5000 -d mek/weibo_img:6
-p			将物理机的8018端口映射至容器的5000端口
-d			后台运行

其他案例
使用python3构建镜像
FROM python:3
#切换工作目录到指定目录
WORKDIR /usr/src/app
#复制依赖列表
COPY requirements.txt ./
#安装依赖,使用阿里云镜像
RUN pip install --no-cache-dir -r requirements.txt -i "http://mirrors.aliyun.com/pypi/simple" --trusted-host "mirrors.aliyun.com"
#复制当前文件夹所有文件到镜像工作目录
COPY . .
#运行时默认执行的命令
CMD [ "python", "./your-daemon-or-script.py" ]
使用alpine构建mysql-client镜像
FROM alpine:3.14
#使用apk包管理工具安装mysql
RUN apk add --no-cache mysql-client
#开放端口3306
EXPOSE 3306
#默认运行mysql命令,可替换为其他
ENTRYPOINT ["mysql"]