Docker-Dockerfile入门 - 1

简介: 之前说的commit操作会带来各种不好的结果,那么解决办法就是使用Dockerfile来解决这个问题 commit操作不会记录每层的构建过程,而Dockerfile则是记录了每层是如何构建的,那么我们可以通过观察Dockerfile的内容来知道镜像是如何的构建的,达到了镜像透明的目的,并且我们还.
  1. 之前说的commit操作会带来各种不好的结果,那么解决办法就是使用Dockerfile来解决这个问题
  2. commit操作不会记录每层的构建过程,而Dockerfile则是记录了每层是如何构建的,那么我们可以通过观察Dockerfile的内容来知道镜像是如何的构建的,达到了镜像透明的目的,并且我们还可以自由的删除Dockerfile中的不需要的构建步骤,来解决镜像臃肿的问题
  3. Dockerfile就是一个文本文件,里面是一条条命令,来指导Docker如何构建我们需要的镜像,比如我们来构建一个index页面为:“welcome Docker”的nginx服务镜像
  4. 我们需要先删除之前的nginx:v1,当然不删除也可以,无关紧要

    [qidai@qidai-pc docker-file]$ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               v1                  ca9ac899159e        4 hours ago         109MB
    nginx               latest              881bd08c0b08        4 days ago          109MB
    ubuntu              latest              47b19964fb50        4 weeks ago         88.1MB
    centos              latest              1e1148e4cc2c        3 months ago        202MB
    [qidai@qidai-pc docker-file]$ docker rmi -f nginx:v1
    Untagged: nginx:v1
    [qidai@qidai-pc docker-file]$ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    <none>              <none>              ca9ac899159e        4 hours ago         109MB  #注意
    nginx               latest              881bd08c0b08        4 days ago          109MB
    ubuntu              latest              47b19964fb50        4 weeks ago         88.1MB
    centos              latest              1e1148e4cc2c        3 months ago        202MB
    [qidai@qidai-pc docker-file]$ docker rmi ca9ac899159e
    #告诉你有容器正在依赖这个镜像在跑着,所以删不掉
    Error response from daemon: conflict: unable to delete ca9ac899159e (cannot be forced) - image is being used by running container 1c494ae39be7
    [qidai@qidai-pc docker-file]$ docker ps #确实在跑
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    1c494ae39be7        ca9ac899159e        "nginx -g 'daemon of…"   4 hours ago         Up 4 hours          0.0.0.0:80->80/tcp   recursing_zhukovsky
    [qidai@qidai-pc docker-file]$ docker stop recursing_zhukovsky
    recursing_zhukovsky
    [qidai@qidai-pc docker-file]$ docker rmi ca9ac899159e  #停止在删除
    Deleted: sha256:ca9ac899159eefe41cf30771cc2f4e23db967d6e2f3d0725226495296b69cb76
    Deleted: sha256:c521a0a996057d1e77e13f5badbe3ef8a50b15863dffd7bd71311538ba506472
    [qidai@qidai-pc docker-file]$ docker images  #删除完成了
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               latest              881bd08c0b08        4 days ago          109MB
    ubuntu              latest              47b19964fb50        4 weeks ago         88.1MB
    centos              latest              1e1148e4cc2c        3 months ago        202MB
  5. 我们从上面可以看到出现了<none>这样的名字,他之前是有名字和标签的,但这样的镜像基本没有存在价值了,所以可以直接删除,对于只显示这些镜像的过滤条件就是dangling=true,造成这种镜像问题的原因除了上面的这种情况,还会有其他情况会造成,以后遇到了再说吧,不过需要知道的是这种镜像叫做虚悬镜像
  6. 好了到这之后,我们使用Dockerfile创建一个index为“welcome Docker”的nginx服务镜像,内容如下

    [qidai@qidai-pc docker-file]$ mkdir nginx-index
    [qidai@qidai-pc docker-file]$ nano nginx-index/Dockerfile
      [qidai@qidai-pc docker-file]$ cd nginx-index
    [qidai@qidai-pc nginx-index]$ docker build -t qidai/nginx:welcome .
    Sending build context to Docker daemon  2.048kB
    Step 1/2 : FROM nginx
     ---> 881bd08c0b08
    Step 2/2 : RUN echo "<h1>Welcome Docker !</h1>" > /usr/share/nginx/html/index.html
     ---> Running in 5532922d8639
    Removing intermediate container 5532922d8639
     ---> 04bf915d6d0d
    Successfully built 04bf915d6d0d
    Successfully tagged qidai/nginx:welcome
    [qidai@qidai-pc nginx-index]$ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    qidai/nginx         welcome             04bf915d6d0d        11 seconds ago      109MB
    nginx               latest              881bd08c0b08        4 days ago          109MB
    • -t:是指定修建的新镜像的name:tag
    • .:就是Docker当前的context,必须要给出的
    • Dockerfile内容是这样的
    FROM nginx
    RUN echo "<h1>Welcome Docker !</h1>" > /usr/share/nginx/html/index.html
    • 上面是在Dockerfile所在目录下运行的命令可以成功,如果要指定Dockerfile的目录应该是这样的
    [qidai@qidai-pc docker-file]$ docker build -t qidai/nginx:Welcome -f nginx-index/Dockerfile .
    • 到这你就更能了解最后那个.是什么作用了,.代表当前目录,就是Docker会基于当前目录,去寻找-f参数的路径
  7. 修建完后,我们来运行一下看看是否成功了

    [qidai@qidai-pc docker-file]$ docker run --rm -d -p 80:80 qidai/nginx:Welcome
    [sudo] qidai 的密码:
    83112aeaa80b223d1491ed61a9bed615a606c7545ee34e95ba1724470a85a97a
    [qidai@qidai-pc docker-file]$ docker ps
    CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                NAMES
    83112aeaa80b        qidai/nginx:Welcome   "nginx -g 'daemon of…"   4 seconds ago       Up 3 seconds        0.0.0.0:80->80/tcp   silly_lehmann
  8. 访问: localhost

markdown_img_paste_20190309221104504

  1. 好了到这Dockerfile的初步使用我们就知道了,但是还没有说里面的具体的编写语法,我们下一结来说
目录
相关文章
|
2月前
|
NoSQL 关系型数据库 MySQL
docker部署jumpserver及入门
docker部署jumpserver及入门
|
2月前
|
应用服务中间件 nginx Docker
【与时俱进】网络工程师必备技能:Docker基础入门指南,助你轻松应对新时代挑战!
【8月更文挑战第22天】随着容器技术的发展,Docker已成为开发与运维的关键工具。本文简要介绍Docker——一种开源容器化平台,能让应用程序及依赖项被打包成轻量级容器,在任何Linux或Windows机器上运行。文中涵盖Docker的安装步骤、基础命令操作如启动服务、查看版本、拉取与运行容器等。并通过实例演示了如何运行Nginx服务器和基于Dockerfile构建Python Flask应用镜像的过程。这些基础知识将助力网络工程师理解Docker的核心功能,并为实际应用提供指导。
56 2
|
1天前
|
Linux 持续交付 Docker
掌握Docker:从入门到实践
Docker 是一个开源容器引擎,允许开发者将应用及其依赖打包成可移植的容器,在任意 Linux 机器上运行。本文从基本概念入手,详细介绍 Docker 的安装、基本操作、镜像构建及 Docker Compose 的使用,并通过实战案例展示如何部署 Web 应用、构建微服务架构及实现 CI/CD。通过学习,你将掌握 Docker 的核心功能,提升应用开发和部署效率。
|
5天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
15天前
|
运维 Cloud Native Docker
云原生技术入门:Docker容器化实战
【9月更文挑战第20天】本文将引导你走进云原生技术的世界,通过Docker容器化技术的实战演练,深入理解其背后的原理和应用。我们将一起探索如何在云平台上利用Docker简化部署、扩展和管理应用程序的过程,并揭示这一技术如何改变现代软件的开发和运维模式。
|
9天前
|
Cloud Native 持续交付 Docker
云原生技术入门与实践:Docker容器化部署示例
【9月更文挑战第25天】在数字化转型的浪潮下,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,为初学者揭示云原生技术的核心概念及其应用价值。我们将以Docker容器为例,逐步引导读者了解如何将应用程序容器化,并在云端高效运行。这不仅是对技术趋势的跟随,更是对资源利用和开发效率提升的探索。
29 4
|
11天前
|
关系型数据库 Linux 虚拟化
Docker入门基础实战
Docker入门基础实战
|
19天前
|
Kubernetes Cloud Native 开发者
云原生入门:从Docker到Kubernetes的旅程
【9月更文挑战第16天】 本文将带你进入云原生的世界,从理解Docker容器的基础开始,逐步深入到Kubernetes集群管理。我们将通过简单的代码示例和实际操作,探索这两个关键技术如何协同工作,以实现更高效、灵活的应用程序部署和管理。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供清晰的指导和实用的知识。
51 11
|
10天前
|
Docker 容器
14 response from daemon: open \\.\pipe\docker_engine_linux: The system cannot find the file speci
14 response from daemon: open \\.\pipe\docker_engine_linux: The system cannot find the file speci
11 1
|
2月前
|
图形学 C#
超实用!深度解析Unity引擎,手把手教你从零开始构建精美的2D平面冒险游戏,涵盖资源导入、角色控制与动画、碰撞检测等核心技巧,打造沉浸式游戏体验完全指南
【8月更文挑战第31天】本文是 Unity 2D 游戏开发的全面指南,手把手教你从零开始构建精美的平面冒险游戏。首先,通过 Unity Hub 创建 2D 项目并导入游戏资源。接着,编写 `PlayerController` 脚本来实现角色移动,并添加动画以增强视觉效果。最后,通过 Collider 2D 组件实现碰撞检测等游戏机制。每一步均展示 Unity 在 2D 游戏开发中的强大功能。
84 6
下一篇
无影云桌面