Docker 学习 - 什么是Image

青旅半醒 2023-06-10 09:30 84阅读 0赞

前言

其实docker这东西在我学习路程里,其实可以先实战

当然先看基础也行
Git阅读风格,点击这里

理论

其实在学过编程的人角度里,Image 类似于类,container 相当于实例,但是这个只是比喻

什么是Image

  • 文件和 meta data的集合(root filesystem)
  • 分层的,并且每一层都可以添加/改变/删除/文件,成为新的image (类似千层饼,一层夹一层)
  • 不同的image可以共享相同的layer
  • Image本身是read-only的

常用操作






























命令 说明
docker image ls 查看镜像
docker images 查看镜像 简写
docker image rm <镜像ID/容器名> 删除镜像 模糊匹配
docker rmi <镜像ID/容器名> 删除镜像 简写
docker history <镜像ID/容器名> 查看构建历史

预备工作

通过 c 语言编译一个可执行文件,打包成一个 docker base image

  1. # 创建目录
  2. $ mkdir hello-world
  3. # 编写 c 代码
  4. $ vim hello.c
  5. #include<stdio.h>
  6. int main()
  7. {
  8. printf("hello docker\n");
  9. }
  10. # 编译
  11. $ gcc -static hello.c -o hello
  12. # 调用测试
  13. $ ./hello
  14. # 输出
  15. hello docker

创建自定义镜像

打包

  1. vim Dockerfile
  2. # 写入
  3. FROM scratch
  4. ADD hello /
  5. CMD ["/hello"]

构建并提交到 docker 默认Dockerfile

  1. docker build -t <docker用户名>/hello-world .

构建并提交到 docker 指定Dockerfile

  1. docker build -t <docker用户名>/hello-world -f MyDockerFile .

生成成功并输出,可以看到镜像是一层一层的

  1. Sending build context to Docker daemon 209.7MB
  2. Step 1/3 : FROM scratch
  3. --->
  4. Step 2/3 : ADD hello /
  5. ---> 680ba81fa464
  6. Step 3/3 : CMD ["/hello"]
  7. ---> Running in 3f86e8df01ce
  8. Removing intermediate container 3f86e8df01ce
  9. ---> 687fb54c2655
  10. Successfully built 687fb54c2655
  11. Successfully tagged xm/hello-world:latest

查看镜像

  1. docker image ls

查看镜像构建历史

  1. docker history <docker用户名>/hello-world
  2. IMAGE CREATED CREATED BY SIZE COMMENT
  3. 687fb54c2655 3 minutes ago /bin/sh -c #(nop) CMD ["/hello"] 0B
  4. 680ba81fa464 3 minutes ago /bin/sh -c #(nop) ADD file:e3e73365e590fa3a… 861kB

运行

  1. $ docker run <docker用户名>/hello-world
  2. # 输出
  3. hello docker

常见问题

乱码问题解决

  1. FROM openjdk:8-jre
  2. ENV LANG en_US.UTF-8
  3. ENV LANGUAGE en_US:en
  4. ENV LC_ALL en_US.UTF-8
  5. MAINTAINER xm 2745329043@qq.com
  6. COPY target/api-1.0-RELEASE.jar /api.jar
  7. ENTRYPOINT ["java","-jar","/api.jar"]

发表评论

表情:
评论列表 (有 0 条评论,84人围观)

还没有评论,来说两句吧...

相关阅读

    相关 什么Docker

    尽管之前久闻Docker的大名了,但是天资愚钝,对其到底是个啥东西一直摸不清,最近花了一段时间整理了一下,算是整理出一点头绪来。 [官网][Link 1]的介绍是这样的:

    相关 什么 Docker

    关于 Docker 是什么,有个著名的隐喻:集装箱。但是它却起了个“码头工人”(docker 的英文翻译)的名字。 这无疑给使用者很多暗示:“快来用吧!用了 Docker,就

    相关 什么 Docker

    Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于

    相关 什么image crop?

    一直对image crop很困惑,总算是看到了一篇描述较为简洁的 [说明:][Link 1]图像crop就是指从图像中移除不需要的信息,只保留需要的部分 ![crop.jp

    相关 什么 Docker

    Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新...