第一个Dockerfile示例

Dockerfile创建一个镜像。
创建一个镜像最流行的方式是用Dockerfile文件。
因为容器内的进程一旦退出,容器也就没有运行的必要了。基于这一点,容器也会随着容器内进程的退出而退出。(这点好像跟一个指令ENTRYPOINT有关系,后续补充)。今天的目的是创建一个持续在运行的容器,那么就需要在容器里面运行一个不会退出的进程。写一个死循环的脚本。
脚本内容如下:

1
2
3
4
5
#!/bin/bash
while true;do
echo 'hello,docker';
sleep 2;
done;

然后修改一下权限:

1
chmod 777 start.sh

写一个文件,起名为Dockerfile

1
2
3
FROM ubuntu:latest
COPY start.sh /
CMD ./start.sh

然后把这两个文件放在同一个目录下,运行:

1
docker run --rm -t base:base .
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
注意别漏掉最后的`.`。
`-t`是为生成的镜像打一个`tag`,`--rm`是删除中间层。
命令产生的信息:
```shell
Sending build context to Docker daemon 3.072kB
Step 1/3 : FROM ubuntu:latest
---> 1d9c17228a9e
Step 2/3 : COPY start.sh /
---> 20b5113895c0
Step 3/3 : CMD ./start.sh
---> Running in 490de3666795
Removing intermediate container 490de3666795
---> 80f7c8ab8600
Successfully built 80f7c8ab8600
Successfully tagged base:base

然后从这个镜像运行一个容器:

1
docker run -d base:base

其中-d是以守护线程的方式运行一个容器。
进入容器查看:

1
docker exec -it xxxxx bash

其中xxxxx是容器的id,可以通过docker ps -a|grep base得到。
进入容器,运行ps -ef得到:

1
2
3
4
5
6
D        PID  PPID  C STIME TTY          TIME CMD
root 1 0 0 15:24 ? 00:00:00 /bin/sh -c ./start.sh
root 8 1 0 15:24 ? 00:00:00 /bin/bash ./start.sh
root 21 0 0 15:24 pts/0 00:00:00 bash
root 371 8 0 15:36 ? 00:00:00 sleep 2
root 372 21 0 15:36 pts/0 00:00:00 ps -ef

OK.