1.Dockerfile
可以把Dockerfile理解成一个脚本,不过是可以在这个脚本文件里使用一些特定的命令(关键字)完成一些自动化的任务
如果不用Dockerfile创建一个自定义的镜像,大概步骤是:
- 1.找一个镜像,
- 2.运行成一个容器
- 3.进入容器
- 4.做各种操作和配置
- 5.提交成一个新的docker容器
如果我们把这些步骤都写进一个文件里,然后让docker自己去实现就显得方便很多,所以就有了Dockerfile
2.准则和命令
我们在使用Dockerfile之前最好先了解一些原则
- “Dockerfile”这个文件名是固定的,大小写敏感,首字母大写
- 尽量把Dockerfile放在一个空目录中,以防干扰
- 每个容器尽量只实现单一功能,不适合集成太多
- Dockerfile里的命令越少越好
常用命令
命令 | 说明 |
FROM | 指定镜像文件 |
MAINTAINER | 维护者的信息 |
RUN | 执行命令 |
EXPOSE | 对外暴露的端口 |
ADD | 复制文件到容器中,若是压缩文件会自动解压 |
COPY | 复制文件到容器中,若是压缩文件不会自动解压 |
WORKDIR | 改变工作目录 |
ENTRYPOINT | 运行容器时执行的指令(自启动) |
3.举例
3.1 准备文件
在/data/路径下新建一个空文件夹base,把项目需要用到的其他文件都复制到此目录下
3.2 编写Dockerfile
在base文件夹里新建一个Dockerfile文件,编写内容如下
Dockerfile
# 选择基础镜像
FROM ubuntu:18.04
# 作者
MAINTAINER pan
RUN apt-get update -y
RUN apt-get install nginx -y --allow-unauthenticated
RUN apt-get install python3-pip -y
# 把工程文件上传容器
ADD front_end_pc.tar.gz /data/
ADD meiduo_mall_admin.tar.gz /data/
ADD meiduo_mall.tar.gz /data/
# 切换到美多工程目录,并且安装依赖
WORKDIR /data/meiduo_mall/
RUN pip3 install -r requirements.txt
# 复制配置文件到容器中
COPY 8080.conf /etc/nginx/conf.d/
COPY 8081.conf /etc/nginx/conf.d/
COPY 8000.conf /etc/nginx/conf.d/
# 设置环境变量;作用:指定系统语言为UTF-8;如果不设置,uwsgi运行无法处理中文语言
ENV LC_ALL="zh_CN.utf8"
# 容器开放端口为8080和8081
EXPOSE 8080 8081
# 发送容器启动脚本
COPY command.sh /data
# 切换容器目录
WORKDIR /data
# 指定容器运行的启动指令
ENTRYPOINT ["/bin/bash", "command.sh"]
因为ENTRYPOINT命令只能执行一条指令,所以我们可以把想要执行的多条指令写进一个脚本文件里一起执行
command.sh
cd /data/meiduo_mall/
uwsgi --ini uwsgi.ini
nginx -g "daemon off;"
3.3 使用Dockerfile生成镜像
当所有文件都准备好了,并且写好Dockerfile了,我们就可以使用它生成一个镜像
docker image build -t meiduo ./
3.4 运行镜像
docker container run -d --name meiduo --network=host meiduo:latest
3.5 使用浏览器访问