1. 根据镜像修改
建立一个ubuntu 容器,修改
docker container run -ti ubuntu bash
自定义修改
apt-get update
apt-get install -y figlet
figlet "hello docker"
退出
exit
commit docker
首先查看刚才修改的container id
docker container ls -a
docker container diff <container ID># 查看修改
然后根据id提交为镜像(不必全部输入id,只要能与其他container 区分开)
docker container commit CONTAINER_ID
然后通过docker image ls 可以查看到刚才提交的镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> a104f9ae9c37 46 seconds ago 160MB
ubuntu latest 14f60031763d 4 days ago 120MB
此时刚提交的镜像名字是none,通过下面命令为它命名。然后以后就可以通过 ourfiglet来召唤它了:)
docker image tag <IMAGE_ID> ourfiglet
2. 使用dockerfile 创建镜像
Give a sysadmin an image and their app will be up-to-date for a day, give a sysadmin a Dockerfile and their app will always be up-to-date.
给一个管理员一份镜像,他们的软件将暂时是最新的;给一个管理员一个Dockfile,他们的软件将永远是最新的。
Dockerfile 规定如何构建镜像。下面通过一个Node.js程序说明
建立一个index.js和Dockerfile文件,内容如下。
index.js:
var os = require("os");
var hostname = os.hostname();
console.log("hello from " + hostname);
Dockerfile:
FROM alpine
RUN apk update && apk add nodejs
COPY . /app #从当前目录将index.js拷贝到container中
WORKDIR /app #设定工作目录
CMD ["node","index.js"] #= node index.js 当run container时运行。
然后通过docker build命令建立镜像,-t 命名
docker image build -t hello:v0.1 .
docker build -t tutorial -f ./Dockerfile ./
打开一个container,验证docker正常运行。
docker container run hello:v0.1
docker image pull alpine
docker image inspect alpine
docker image inspect --format "{{ json .RootFS.Layers }}" alpine
docker image inspect --format "{{ json .RootFS.Layers }}" <image ID>