docker-学习

简介: docker-学习

1.1. 练习1
1、以nginx为基础镜像编写dockerfile。并构建为一个名为nginxtest的镜像,要求镜像内安装一个tcpdump工具,下载或从本地拉取一个tar包并解压。构建镜像后运行容器,并暴露端口访问。(要求熟悉dockerfile常用指令,容器运行常见参数,以及如何进入容器内部)


FROM nginx:latest
WORKDIR /
RUN apt-get update && apt-get install tcpdump -y
RUN curl -O https://nginx.org/download/nginx-1.25.1.tar.gz && tar xf nginx-1.25.1.tar.gz
ENTRYPOINT ["/docker-entrypoint.sh"]
EXPOSE 80
STOPSIGNAL SIGQUIT
CMD ["nginx", "-g", "daemon off;"]
  1. Dockerfile指令
    3.1. 常见的指令
    Dockerfile 是一个用来构建 Docker 镜像的文本文件,它包含了一系列的指令,每一条指令都会创建一个新的镜像层。Dockerfile 的指令有以下几种:

FROM:这是 Dockerfile 的第一条指令,它指定了镜像的基础层,也就是从哪个镜像开始构建。例如,FROM ubuntu:18.04 表示从 Ubuntu 18.04 的镜像开始构建。

RUN:这是 Dockerfile 的最常用的指令,它用来在镜像中执行一些命令,通常是安装一些软件包或库。例如,RUN apt-get update && apt-get install -y python3 表示在镜像中更新软件源并安装 Python 3。

COPY:这是 Dockerfile 的另一个常用的指令,它用来将本地文件或目录复制到镜像中的指定位置。例如,COPY app.py /app/ 表示将本地的 app.py 文件复制到镜像中的 /app/ 目录下。

ADD:这是 Dockerfile 的一个类似于 COPY 的指令,它也用来将本地文件或目录复制到镜像中的指定位置,但是它还有一些额外的功能,如可以解压压缩文件,或者从 URL 下载文件。例如,ADD https://example.com/file.tar.gz /app/ 表示从网址下载 file.tar.gz 文件并解压到镜像中的 /app/ 目录下。

CMD:这是 Dockerfile 的一个用来指定容器启动时默认执行的命令的指令,它只能有一条,如果有多条,只有最后一条会生效。例如,CMD ["python3", "app.py"] 表示容器启动时默认执行 python3 app.py 命令。

ENTRYPOINT:这是 Dockerfile 的一个用来指定容器启动时的入口点的指令,它和 CMD 类似,但是它可以接受容器运行时传入的参数,而 CMD 不可以。例如,ENTRYPOINT ["ping"] 表示容器启动时的入口点是 ping 命令,如果运行时传入了 google.com 参数,那么容器就会执行 ping google.com 命令。

EXPOSE:这是 Dockerfile 的一个用来声明容器内部的端口号的指令,它不会真正地将端口暴露出来,而是只是一个文档化的作用,表示容器提供了哪些服务。例如,EXPOSE 80 表示容器提供了 80 端口的服务,如 HTTP。

ENV:这是 Dockerfile 的一个用来设置环境变量的指令,它可以在镜像中或者容器运行时使用。例如,ENV PORT 8080 表示设置环境变量 PORT 的值为 8080。

WORKDIR:这是 Dockerfile 的一个用来设置工作目录的指令,它会影响后续的 RUN,COPY,ADD,CMD,ENTRYPOINT 等指令的执行路径。例如,WORKDIR /app 表示设置工作目录为 /app,那么后续的指令都会在 /app 下执行。

VOLUME:这是 Dockerfile 的一个用来创建数据卷的指令,它可以将容器中的某个目录挂载到宿主机上,从而实现数据的持久化和共享。例如,VOLUME /data 表示创建一个数据卷,将容器中的 /data 目录挂载到宿主机上。

USER:这是 Dockerfile 的一个用来指定容器运行时的用户的指令,它可以提高容器的安全性,避免以 root 用户运行。例如,USER www-data 表示指定容器运行时的用户为 www-data。

LABEL:这是 Dockerfile 的一个用来添加元数据的指令,它可以给镜像添加一些标签,如作者,版本,描述等。例如,LABEL maintainer="John Doe" version="1.0" description="A simple web app" 表示给镜像添加了维护者,版本,描述等标签。

ARG:这是 Dockerfile 的一个用来定义构建参数的指令,它可以在构建镜像时传入一些变量,从而实现动态的配置。例如,ARG PORT=80 表示定义了一个构建参数 PORT,它的默认值为 80,但是可以在构建时修改,如 docker build --build-arg PORT=8080 .。

ONBUILD:这是 Dockerfile 的一个用来定义触发器的指令,它可以在当前镜像被用作其他镜像的基础层时执行一些命令。例如,ONBUILD RUN pip install -r requirements.txt 表示当当前镜像被用作其他镜像的基础层时,会自动执行 pip install -r requirements.txt 命令。

STOPSIGNAL:这是 Dockerfile 的一个用来指定容器停止时的信号的指令,它可以覆盖默认的 SIGTERM 信号,使用其他的信号来优雅地停止容器。例如,STOPSIGNAL SIGKILL 表示指定容器停止时的信号为 SIGKILL,强制杀死容器。

HEALTHCHECK:这是 Dockerfile 的一个用来检查容器健康状态的指令,它可以定期执行一些命令,来判断容器是否正常运行。例如,HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ || exit 1 表示每隔 5 分钟执行一次 curl -f http://localhost/ 命令,如果返回非 0 值,就表示容器不健康。

相关文章
|
2月前
|
运维 虚拟化 开发者
Docker-全面详解(学习总结---从入门到深化)
Docker-全面详解(学习总结---从入门到深化)
48 1
|
5月前
|
运维 Kubernetes Cloud Native
【k8s 系列】k8s 学习三,docker回顾,k8s 起航
【k8s 系列】k8s 学习三,docker回顾,k8s 起航
|
3月前
|
分布式计算 Java Linux
【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(Dockerfile使用手册)
Docker 是一套构建在 Linux 内核之上的高级工具,旨在帮助开发人员和运维人员更轻松地交付应用程序和依赖关系,实现跨系统和跨主机的部署。使用安全且轻量级的容器环境来实现这一目标。容器可以手动创建,也可以通过编写 Dockerfile 自动创建。开发人员和运维人员可以将应用程序及其依赖打包到容器中,实现应用程序的可移植性和环境一致性。
120 5
【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(Dockerfile使用手册)
|
5月前
|
Java Go 虚拟化
【Docker 系列】docker 学习十一,docker 总结和面试题整理
【Docker 系列】docker 学习十一,docker 总结和面试题整理
|
3天前
|
监控 Docker 容器
Docker从入门到精通:Docker log 命令学习
了解 Docker 日志管理对容器监控至关重要。`docker logs` 命令用于查看和管理容器日志,例如,`docker logs <container_name>` 显示容器日志,`-f` 或 `--follow` 实时跟踪日志,`--tail` 显示指定行数,`--timestamps` 添加时间戳,`--since` 按日期筛选。Docker 支持多种日志驱动,如 `syslog`,可通过 `--log-driver` 配置。有效管理日志能提升应用程序的稳定性和可维护性。
7 0
|
2月前
|
消息中间件 RocketMQ Docker
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)
53 0
|
3月前
|
存储 运维 Linux
精彩推荐 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
在使用Docker时,管理维护工作可能会显得复杂。然而,实际上,Docker提供了许多便捷且人性化的工具,这些工具的使用技巧可以大大简化维护工作,并提升效率。通过掌握这些技巧,你不仅能够更轻松地管理Docker环境,还能展现出专业的能力。接下来我们就给大家介绍一下对于我在工作当中对于Docker容器使用的技术实战总结
48 2
精彩推荐 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
|
3月前
|
消息中间件 RocketMQ Docker
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)(下)
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)
30 0
|
消息中间件 RocketMQ Docker
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)(上)
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)
69 0
|
3月前
|
Java 应用服务中间件 Shell