Docker 学习 - 什么是Image
前言
其实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
# 创建目录
$ mkdir hello-world
# 编写 c 代码
$ vim hello.c
#include<stdio.h>
int main()
{
printf("hello docker\n");
}
# 编译
$ gcc -static hello.c -o hello
# 调用测试
$ ./hello
# 输出
hello docker
创建自定义镜像
打包
vim Dockerfile
# 写入
FROM scratch
ADD hello /
CMD ["/hello"]
构建并提交到 docker 默认Dockerfile
docker build -t <docker用户名>/hello-world .
构建并提交到 docker 指定Dockerfile
docker build -t <docker用户名>/hello-world -f MyDockerFile .
生成成功并输出,可以看到镜像是一层一层的
Sending build context to Docker daemon 209.7MB
Step 1/3 : FROM scratch
--->
Step 2/3 : ADD hello /
---> 680ba81fa464
Step 3/3 : CMD ["/hello"]
---> Running in 3f86e8df01ce
Removing intermediate container 3f86e8df01ce
---> 687fb54c2655
Successfully built 687fb54c2655
Successfully tagged xm/hello-world:latest
查看镜像
docker image ls
查看镜像构建历史
docker history <docker用户名>/hello-world
IMAGE CREATED CREATED BY SIZE COMMENT
687fb54c2655 3 minutes ago /bin/sh -c #(nop) CMD ["/hello"] 0B
680ba81fa464 3 minutes ago /bin/sh -c #(nop) ADD file:e3e73365e590fa3a… 861kB
运行
$ docker run <docker用户名>/hello-world
# 输出
hello docker
常见问题
乱码问题解决
FROM openjdk:8-jre
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
MAINTAINER xm 2745329043@qq.com
COPY target/api-1.0-RELEASE.jar /api.jar
ENTRYPOINT ["java","-jar","/api.jar"]
还没有评论,来说两句吧...