查看linux发行版本
lsb_release -a
显示操作系统的发行版号
uname -r
1. 启动 Docker。
sudo systemctl start docker
2. 通过运行映像来验证 Docker 引擎安装是否成功。hello-world
sudo docker run hello-world
查看docker版本
docker -v
查看docker配置信息
docker info
dockerfile文件介绍
Dockerfile 是一个用来构建镜像的文本文件,没有文件后缀名
,可以直接使用文本编辑器来编写,就像shell脚本的[xxx.sh]文件,只是没有.sh作为后缀名。
编写 Dockerfile 是创建 Docker 镜像的核心步骤,了解每个指令的作用和用法可以帮助你更好地构建和优化 Docker 镜像。在实际应用中,你可以根据需求选择合适的基础镜像,合理使用指令,结合优化技巧,构建出高效、安全的 Docker 镜像。希望这篇文章能帮助你更好地理解和编写 Dockerfile。
创建Dockerfile
# 1、FROM 指令指定什么镜像作为基础镜像。每个 Dockerfile 必须以 FROM 开头。
# FROM [指定什么镜像作为基础镜像] 例如:
FROM [python:latest]
FROM python:3.9
# 2、LABEL 指令用于添加元数据,如维护者信息、版本号等。
# 添加维护者信息
LABEL maintainer="yourname@example.com"
# 添加版本信息
LABEL version="1.0"
LABEL description="This is a sample application."
# 3、ENV 指令用于设置环境变量。
ENV [环境变量添加]
# 例如:
ENV APP_ENV=production
ENV DEBUG=false
# 4、RUN 指令用于在镜像构建过程中执行命令。通常用于安装软件包、执行脚本等。
RUN <command>
# 例如:
RUN [制作镜像过程中执行linux语句]
RUN [下载]
RUN [linux命令]
# 使用临时安装源来安装插件
RUN [pip install redis-py -i
# 安装 nginx
RUN apt-get update && apt-get install -y nginx
# 运行脚本
RUN /path/to/script.sh
# 安装 Python 包
RUN pip install -r requirements.txt https://pypi.tuna.tsinghua.edu.cn/simple/]
# 注意:对于安装多个软件包的情况,通常会将多个命令合并成一条 RUN 指令,以减少构建层数。
RUN [<语句> && <语句> && <语句>] 尽量用一条RUN,因为每一条RUN都会被打包一次
例如:
RUN apt-get update && \
apt-get install -y nginx curl vim
# 5、COPY 指令用于将文件或目录从主机复制到镜像中。
COPY <src> <dest>
<src>:要复制的文件或目录的路径。
<dest>:镜像中的目标路径。
例如:
# 复制当前目录下的所有文件到 /app 目录
COPY . /app
# 复制特定文件
COPY config.yml /etc/myapp/config.yml
# 6、ADD 指令与 COPY 类似,但支持更多功能,如自动解压 tar 文件和从 URL 下载文件。
ADD [复制 主机-容器]
ADD <src> <dest>
例如:
# 直接复制文件
ADD [/home/a.txt /home/b.txt]
# 将宿主机的 a.txt 文件复制到容器的 /home/b.txt 位置,复制后两者内容完全相同。因此,容器中的 b.txt 实际上就是 a.txt 文件的副本。
# 解压文件并复制
ADD myapp.tar.gz /usr/src/app
# 下载:从 URL 下载文件
ADD [下载 网络文件-容器]
ADD [http://www.a.com/a.txt /home/b.txt]
# 7、WORKDIR 指令用于设置工作目录。后续指令(如 RUN、CMD、COPY 等)将在此目录中执行。
WORKDIR <path>
例如:
# 设置工作目录为 /app,这个目录的设置就见仁见智,有的喜欢用project,有的喜欢什么都不设,看公司规范和个人习惯。我们只需要确保后续的文件操作都是基于这个工作目录的。
WORKDIR /app
# 8、EXPOSE 指令用于声明容器运行时监听的端口。该指令仅用于文档说明,不会真正地打开端口。
EXPOSE <port> [<port>/<protocol>...]
<port>:要暴露的端口号。
<protocol>:可选,指定协议(默认是 tcp)
EXPOSE [端口映射,会被docker run -P覆盖]
例如:
# 暴露端口 80
EXPOSE 80
EXPOSE 80/tcp
# 暴露端口 8080 声明容器在运行时应该监听 8080 端口。
EXPOSE 8080
# 暴露端口 8080,使用 TCP 协议
EXPOSE 8080/tcp
# 9、CMD 指令用于指定容器启动时执行的命令。每个 Dockerfile 只能有一个 CMD 指令,若有多个 CMD 指令,只有最后一个生效。
CMD [运行起容器后执行语句,会被docker run <语句>覆盖]
CMD ["executable", "param1", "param2"]
例如:
CMD ["pwd"]
CMD pwd
# 使用 shell 形式
CMD ["nginx", "-g", "daemon off;"]
# 使用 shell 格式
CMD nginx -g "daemon off;"
# 使用默认命令启动
CMD ["python", "app.py"]
CMD ["py","manage.py","runserver","0.0.0.0:8080"]
dockerfile示例:构建简单的 Python 应用
# 使用官方 Python 3.9 镜像作为基础镜像
FROM python:3.9
# 设置工作目录
WORKDIR /app
# 复制当前目录下的所有文件到工作目录
COPY . .
# 安装依赖
RUN pip install -r requirements.txt
# 暴露应用端口
EXPOSE 5000
# 设置容器启动命令
CMD ["python", "app.py"]
参考:
【Docker】Dockerfile 文件编写
python项目 以docker形式打包部署全流程
5 分钟,教你用 Docker 部署一个 Python 应用