用Dockerfile创建一个镜像。
创建一个镜像最流行的方式是用Dockerfile文件。
因为容器内的进程一旦退出,容器也就没有运行的必要了。基于这一点,容器也会随着容器内进程的退出而退出。(这点好像跟一个指令ENTRYPOINT有关系,后续补充)。今天的目的是创建一个持续在运行的容器,那么就需要在容器里面运行一个不会退出的进程。写一个死循环的脚本。
脚本内容如下:
1 2 3 4 5
| #!/bin/bash while true;do echo 'hello,docker'; sleep 2; done;
|
然后修改一下权限:
写一个文件,起名为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
|
然后从这个镜像运行一个容器:
其中-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.