1.巨人的肩膀
该博文详细讲了Dockerfile的结构和指令意义,并且附带了两个示例:
https://blog.csdn.net/weixin_53446039/article/details/117445184
2.具体示例
Dockerfle
FROM reg.hrlyit.com/ai/contract-review:1.0
ENV LANG C.UTF-8
ENV DEBIAN_FRONTEND noninteractive
LABEL maintainer="new_ai@xxx.com"
#将当前目录(.)的所有内容,拷贝到镜像的/data/xxx-server
ADD . /data/xxx-server
#指定命令运行的目录,即进入镜像就在该目录中
WORKDIR /data/xxx-server
#安装依赖,因为当前目录的文件已经拷贝到镜像的/data/xxx-server ,且运行目录就是/data/xxx-server,所以当前目录的requirements.txt就在当前目录
RUN /opt/conda/bin/pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
# VOLUME ["/data/ai-service/log","/data/ai-service/img"]
#暴露服务需要的镜像内部端口
EXPOSE 8001
#启动容器时执行
CMD sh start_server.sh
3.dockerfile 测试
# 利用刚刚编写好的的Dockerfile创建镜像
docker build -t common_server:1.0 -f Dockerfile .
# 利用镜像创建容器,容器创建后会自动运行Dockerfile 的RUN命令
docker run -d -p 3588:80 --runtime=nvidia --name test_server common_server:1.0
#另一种方式:创建容器,并进入容器
docker run -it -p 3588:80 -v /data:/data --runtime=nvidia --name test_server common_server:1.0 /bin/bash