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 使用浏览器访问