# 手写一个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
来源:oschina
链接:https://my.oschina.net/u/4350098/blog/4073422