zoukankan      html  css  js  c++  java
  • [Docker学习记] 手写第一个Docker镜像

    # 手写一个Docker最简单的镜像

    一般情况下,手写的image都是在某一个基础镜像的基础上构建的。

    关键字: FROM

    ## 先看简单的示例

    ```
    FROM ubuntu
    RUN echo "Hello Docker"

    ```

    在ubuntu这个基础镜像(一般基础镜像是类似操作系统或者运行环境:比如nodejs,可参考阮一峰[示例](http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html))上,跑一个echo "Hello Docker"
    有了ubuntu这个基础镜像,就可以使用ubuntu上的命令,比如: echo

    根据Dockerfile编译成你自己的镜像文件image

    ```
    docker build -t hello .
    ```
    build表示编译镜像
    -t: 指定镜像名字: hello
    .: 当前目录,会从当前目录默认找Dockerfile的文件(首字母大写,没有后缀),来构建镜像


    查看镜像
    ```
    docker images
    ```
    查看镜像

    REPOSITORY TAG IMAGE ID CREATED SIZE
    hello latest d21a34a50ec6 7 hours ago 5.59MB

    我的这个hello是FROM alpine --一个很小的linux系统
    所以编译出来的image只有5.59M


    ## 稍微提高一下

    ```
    FROM alpine
    RUN mkdir /app && echo "Hello alpine" > /app/test.log
    CMD ["cat","/app/test.log"]
    ```

    1.在alpine系统镜像上构建,
    2.构建image时,创建目录/app, 打印Hello alpine 并且把这句话记录到/app/test.log文件里面
    3.当这个镜像的容器启动后,运行 cat /app/test.log命令,就是查看这个文件内容

    构建镜像
    ```
    docker build -t hello2 .
    ```

    起一个容器跑一下hello2
    ```
    docker run --rm hello2

    输出:
    [root@localhost hello2]# docker run --rm hello2
    Hello alpine

    ```

    我们来试试数据映射

    ```
    mkdir app
    cd app
    echo Hello app > test.log

    docker run --rm -v /root/docker_sample/hello2/app:/app hello2

    输出

    Hello app

    ```
    这次启动容器的时候,把/root/docker_sample/hello2/app 映射到容器的/app目录
    这样cat /app/test.log 实际是宿主机/root/docker_sample/hello2/app/test.log文件
    所以打印出来的不是Hello alpine, 而是 Hello app

    The end! 2020-1-8

  • 相关阅读:
    二元查找树的后序遍历结果
    CFileDialog设置多选时的一个问题
    KanRSS.com
    由shuttle这个单词想起的一个小故事
    Sun Java moved to the Partner repository
    Sun Java moved to the Partner repository
    扩展std::string功能的几个做法
    NetBeans 时事通讯(刊号 # 99 Apr 16, 2010)
    NetBeans IDE 6.9 Beta 发布
    KanRSS.com
  • 原文地址:https://www.cnblogs.com/tomcatandjerry/p/12169454.html
Copyright © 2011-2022 走看看