docker系列教程之四dockerfile入门(代码片段)

blackcatfish blackcatfish     2023-01-09     531

关键词:

在上一篇的文章中,我们把 Docker 容器的工作流程剖析的十分清楚了,我们大体可以知道 Docker 组件协作运行容器可以分为以下几个过程:

  1. Docker 客户端执行 docker run 命令

  2. Dockerdaemon 发现本地没有我们需要的镜像

  3. daemon 从 DockerHub 下载镜像

  4. 下载完成后,镜像被保存到本地

  5. Dockerdaemon 启动容器

了解了这些过程以后,我们再来理解这些命令就不会觉得很突兀了,下面我来给大家讲讲 Docker 常用的一些命令操作吧。

Docker常用命令

我们可以通过 docker-h 去查看命令的详细的帮助文档。在这里我只会讲一些平常日常比赛或者生活中我们可能会用的比较多的一些命令。

技术分享图片

例如,我们需要拉取一个 docker 镜像,我们可以用如下命令:

docker pull image_name

 

image_name 为镜像的名称,而如果我们想从 DockerHub 上去下载某个镜像,我们可以使用以下命令:

docker pull centos:latest

 

centos:lastest 是镜像的名称, Dockerdaemon 发现本地没有我们需要的镜像,会自动去 DockerHub 上去下载镜像,下载完成后,该镜像被默认保存到 /var/lib/docker 目录下。

接着我们如果想查看下主机下存在多少镜像,我们可以用如下命令:

docker images

 

我们要想知道当前有哪些容器在运行,我们可以用如下命令:

docker ps -a

 

-a 是查看当前所有正在运行的容器

我们该如何去对一个容器进行启动,重启和停止呢?我们可以用如下命令:

docker start container_name/container_id

docker restart container_name/container_id

docker stop container_name/container_id

 

这个时候我们如果想进入到这个容器中,我们可以使用 attach 命令:

docker attach container_name/container_id

 

那如果我们想运行这个容器中的镜像的话,并且调用镜像里面的 bash ,我们可以使用如下命令:

docker run -t -i container_name/container_id /bin/bash

 

那如果这个时候,我们想删除指定镜像的话,由于 image 被某个 container 引用(拿来运行),如果不将这个引用的 container 销毁(删除),那 image 肯定是不能被删除。我们首先得先去停止这个容器:

docker ps -a

docker stop container_name/container_id

 

然后我们用如下命令去删除这个容器:

docker rm container_name/container_id

 

然后这个时候我们再去删除这个镜像:

docker rmi image_name

 

此时,常用的 Docker 相关的命令就讲到这里为止了,我们在后续的文章中还会反复地提到这些命令。

Dockerfile是什么

前面我们已经提到了 Docker 的一些基本概念。以 CTF 选手的角度来看,我们可以去使用 Dockerfile 定义镜像,依赖镜像来运行容器,可以去模拟出一个真实的漏洞场景。因此毫无疑问的说, Dockerfile 是镜像和容器的关键,并且 Dockerfile 还可以很轻易的去定义镜像内容,说了这么多,那么 Dockerfile 到底是个什么东西呢?

Dockerfile 是自动构建 docker 镜像的配置文件, 用户可以使用 Dockerfile 快速创建自定义的镜像。 Dockerfile 中的命令非常类似于 linux 下的 shell 命令。

我们可以通过下面这幅图来直观地感受下 Docker 镜像、容器和 Dockerfile 三者之间的关系。

技术分享图片

我们从上图中可以看到, Dockerfile 可以自定义镜像,通过 Docker 命令去运行镜像,从而达到启动容器的目的。

Dockerfile 是由一行行命令语句组成,并且支持已 # 开头的注释行。

一般来说,我们可以将 Dockerfile 分为四个部分:

  • 基础镜像(父镜像)信息指令 FROM

  • 维护者信息指令 MAINTAINER

  • 镜像操作指令 RUN 、 EVN 、 ADD 和 WORKDIR 等

  • 容器启动指令 CMD 、 ENTRYPOINT 和 USER 等

下面是一段简单的Dockerfile的例子:

  1. FROM python:2.7

  2. MAINTAINER Angel_Kitty <[email protected].com>

  3. COPY . /app

  4. WORKDIR /app

  5. RUN pip install -r requirements.txt

  6. EXPOSE 5000

  7. ENTRYPOINT ["python"]

  8. CMD ["app.py"]

我们可以分析一下上面这个过程:

  • 1、从 DockerHub 上 pull 下 python2.7 的基础镜像

  • 2、显示维护者的信息

  • 3、 copy 当前目录到容器中的 /app 目录下 复制本地主机的 <src> ( Dockerfile 所在目录的相对路径)到容器里 <dest>

  • 4、指定工作路径为 /app

  • 5、安装依赖包

  • 6、暴露 5000 端口

  • 7、启动 app

这个例子是启动一个 python flask app 的 Dockerfile ( flask 是 python 的一个轻量的 web 框架),相信大家从这个例子中能够稍微理解了Dockfile的组成以及指令的编写过程,我们将会在下一篇文章中详细讲解Dockerfile的一些常见的操作指令。

 

docker从入门到实践系列五-dockerfile文件(代码片段)

文章目录什么是DockerFile文件DockerFile基本结构DockerFile指令详解1.FROM2.MAINTAINER3.RUN4.CMD5.COPY6.ENV7.ADD8.ENTRYPOINT9.VOLUME10.WORKDIR11.EXPOSEDockerFile创建镜像镜像管理DockerFile模版JDK镜像模版Docker数据持久化构建过程解析构建步骤基础知识Dockerfi 查看详情

docker从入门到实践系列五-dockerfile文件(代码片段)

文章目录什么是DockerFile文件DockerFile基本结构DockerFile指令详解1.FROM2.MAINTAINER3.RUN4.CMD5.COPY6.ENV7.ADD8.ENTRYPOINT9.VOLUME10.WORKDIR11.EXPOSEDockerFile创建镜像镜像管理DockerFile模版JDK镜像模版Docker数据持久化构建过程解析构建步骤基础知识Dockerfi 查看详情

docker从入门到实践系列五-dockerfile文件(代码片段)

文章目录什么是DockerFile文件DockerFile基本结构DockerFile指令详解1.FROM2.MAINTAINER3.RUN4.CMD5.COPY6.ENV7.ADD8.ENTRYPOINT9.VOLUME10.WORKDIR11.EXPOSEDockerFile创建镜像镜像管理DockerFile模版JDK镜像模版Docker数据持久化构建过程解析构建步骤基础知识Dockerfi... 查看详情

docker教程系列二

导航docker概念手动从镜像运行一个容器使用dockerfile打包镜像使用compose部署多容器应用给docker加上数据持久docker在服务器部署docker持续集成和部署手动从镜像运行一个容器手动启动一个容器手动在本地电脑的docker容器中运行一个w... 查看详情

微服务系列教程

...SpringBoot入门IDEA版本、SpringBoot实战与原理分析视频课程、docker构建微服务、docker入门、docker进阶、docker解析及轻量级PAAS平台演练等视频 查看详情

docker入门教程命令

 Docker入门教程(二)命令【编者的话】DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第二篇,介绍了Docker的基本命令以及命令的用法和功能。在Docker系列教程的第一篇文章中,我们了解了Docker的基础知识,... 查看详情

docker实践入门之四

...这个方法做一个例子。首先需要一个基本image,目前docker推荐的是用一个轻量 查看详情

docker入门系列02(代码片段)

上篇用一个简单的示例,简单的介绍了Dockerfile的配置及其相关的命令。这一篇会在上篇的示例程序里,继续添加新代码及如何将单元测试也放入Image建立过程内。首先,我们需要建一个新的类库,将业务相关的代码从原来的项目... 查看详情

docker入门:dockerfile

 主要内容:什么是Dockerfile查看DockerHub中镜像的DockerfileDockerfile编写Dockerfile常用命令什么是Dockerfile使用Docker经常需要基于已经有的镜像去定制新的镜像,Dockerfile可以保存这种镜像定制的过程。编写好Dockerfile后,可以重复使... 查看详情

docker:dockerfile使用介绍(代码片段)

...:Docker入门教程介绍了Docker基本概念,其中镜像、容器和Dockerfile。我们使用Dockerfile定义镜像,依赖镜像来运行容器,因此Dockerfile是镜像和容器的关键,Dockerfile可以非常容易的定义镜像内容,同时在我们后期的微服务实践中,Do... 查看详情

docker快速入门——docker镜像制作(代码片段)

Docker快速入门——Docker镜像制作一、Dockerfile脚本1、Dockerfile脚本简介Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容就是描述该层应当如何构建。Dockerfile文件示例如下... 查看详情

docker虚拟化技术系列之-dockerfile配置

 随着Docker管理的任务增多,我们需要用Dockerfile进行docker容器管理,这样可以减轻人工的操作,让docker管理更加的方便,快捷:Dockerfile是一个镜像的完整描述,可以通过Dockerfile来描述构建镜像的步骤,并自动构建一个容器。... 查看详情

docker重学系列之dockerfile(代码片段)

Docker重学系列之DockerfileDockerfile什么是DockerfileDockerfile解析过程Dockerfile的保留命令FROM命令MAINTAINER命令RUN命令构建镜像---build镜像构建上下文(Context)其它dockerbuild的用法直接用Gitrepo进行构建用给定的tar压缩包构建从标准... 查看详情

docker快速入门——dockerfile构建镜像

博主最近忙。。。抽空再写650)this.width=650;"src="https://img.baidu.com/hi/jx2/j_0008.gif"alt="j_0008.gif"/> 查看详情

docker教程-10-dockercompose使用入门(代码片段)

...了解Compose1.1 Compose介绍1.2Compose和Docker兼容性1.3 docker、dockerfile与docker-compose区别2、安装compose(需先安装docker)2.1 安装环境查看2.2 安装compose方式一:从github上下载docker-compose二进制文件安装方式二:python-pip方式安装doc 查看详情

(转)docker入门——dockerfile详解(代码片段)

转:https://www.cnblogs.com/sorex/p/6481407.html基本示例FROMMAINTAINERLABELRUNADDCOPYCMDENTRYPOINTENVEXPOSEVOLUMEWORKDIRUSERARG基本示例#ThisisacommitFROMalpine:3.2MAINTAINERJasperXu<[email protected]163 查看详情

kettle入门系列之四(核心对象:转换)

参考技术A1、Concatfields:把几个字段拼接起来定义成一个新的字段2、值映射:类似于boolean,转成对应的中文显示3、增加常量:就是增加一个字段,并且给这个字段赋个固定值4、字段选择:给字段重命名,例如,age=年龄,name=姓... 查看详情

docker系列-第六篇dockerfile解析(代码片段)

1.手动编写一个dockerfile文件,当然必须要符合file的规则2.有了这个文件,直接dockerbuild命令执行,获得一个自定义的镜像3.run1.是什么Dockerfle是一个文本格式的配置文件,用户可以使用Dockerfle来快速创建自定义的镜像。Dockerfile是... 查看详情