目录
1.dockerfile和docker compose区别
Dockerfile 和 Docker Compose 是 Docker 生态系统中两个重要的工具,它们各自有不同的用途和功能。
Dockerfile
-
定义:Dockerfile 是一个文本文件,包含了一系列指令,用于自动化创建 Docker 镜像。
-
用途:
- 描述如何构建一个镜像,包括基础镜像、安装软件包、复制文件、设置环境变量等。
- 每个 Dockerfile 指令都创建一个新的层(layer),最终形成一个完整的镜像。
Docker Compose
-
定义:Docker Compose 是一个工具,用于定义和管理多容器 Docker 应用程序。它使用 YAML 文件来配置应用的服务、网络和卷等。
-
用途:
- 简化多个 Docker 容器的配置和管理,适合复杂的应用场景。
- 可以一键启动或停止多个服务,定义它们之间的依赖关系和网络连接。
主要区别
-
目的:
- Dockerfile:用于构建单个镜像。
- Docker Compose:用于定义和管理多个服务(容器)。
-
格式:
- Dockerfile:使用一系列指令(如 FROM、RUN、COPY 等)。
- Docker Compose:使用 YAML 格式描述服务、网络和卷等。
-
使用场景:
- Dockerfile:适合需要自定义镜像的场景。
- Docker Compose:适合需要协调多个容器的复杂应用。
2.Dockerfile
2.1基本格式
# 说明:以 # 开头的行是注释
# 1. 指定基础镜像
FROM <image>[:<tag>]
# 2. 设置维护者信息
LABEL maintainer="<name>"
# 3. 运行命令
RUN <command>
# 4. 复制文件到镜像
COPY <source> <destination>
# 5. 从上下文中添加文件
ADD <source> <destination>
# 6. 设置工作目录
WORKDIR <path>
# 7. 设置环境变量
ENV <key> <value>
# 8. 指定容器启动时运行的命令
CMD ["executable","param1","param2"]
# 9. 指定容器启动时运行的命令(替代 CMD)
ENTRYPOINT ["executable", "param1"]
# 10. 暴露端口
EXPOSE <port>
# 11. 指定容器需要访问的卷
VOLUME ["<path>"]
2.2模块解析
-
FROM:指定基础镜像,可以是 Docker Hub 上的官方镜像,也可以是自定义镜像。
-
LABEL:用于添加元数据,例如维护者信息。
-
RUN:在镜像构建时执行的命令,例如安装软件包。
-
COPY:将本地文件或目录复制到镜像中的指定路径。
-
ADD:功能类似于 COPY,但还支持从 URL 下载文件和自动解压 tar 文件。
-
WORKDIR:设置接下来所有指令的工作目录,类似于在命令行中使用
cd
。 -
ENV:设置环境变量,后续的指令可以使用这些变量。
-
CMD:指定容器启动时的默认命令。如果同时使用 ENTRYPOINT 和 CMD,CMD 将作为参数传递给 ENTRYPOINT。
-
ENTRYPOINT:设置容器启动时的主要命令,通常用于定义可执行文件。
-
EXPOSE:声明容器监听的端口,但并不会自动映射到主机上。
-
VOLUME:声明一个挂载点,容器和主机之间共享数据。
2.3例子
在/etc/server/dockerfile/01-centos目录下面创建一个Dockerfile文件
# 使用官方 Nginx 镜像作为基础镜像
FROM nginx:latest
# 复制本地的 index.html 到 Nginx 的默认目录
COPY index.html /usr/share/nginx/html/
# 暴露 Nginx 的默认端口
EXPOSE 80
# 启动 Nginx 服务
CMD ["nginx", "-g", "daemon off;"]
构建镜像
docker build . -t 'nginx:docker'
. 表示当前目录 -t 自定义镜像名
运行
docker run -d --name'nginx-docker' -p 80:80 nginx:latest
3.docker compose
docker compose 单机容器编排的工具
3.1安装
yum -y docker-compose
mkdir -p /server/compose/01-run-nginx
3.2格式
创建一个文件 内容如下
version: "3.3"
services:
web_ngx:
image: "nginx"
links:
- web_php
ports:
- "8000:80"
web_php:
image: "php"
~
3.3执行
docker-compose up -d