本文介绍Docker基于容器(docker commit)和Dockerfile制作镜像。
使用 **docker commit **命令完成制作;该方式不推荐,在生产环境中不适用。
Options:
-a, --author string Author (e.g., "John Hannibal Smith " ) #添加作者信息
-c, --change list Apply Dockerfile instruction to the created image #应用Dockerfile指令创建镜像
-m, --message string Commit message #添加镜像描述信息
-p, --pause Pause container during commit (default true) #创建镜像时停止容器;默认开启
演示
[root@docker ~]# docker start httpd
httpd
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c4a3ae50aaa3 httpd "httpd-foreground" 3 days ago Up 2 seconds 80/tcp httpd
#这是我之前修改好的页面内容
[root@docker ~]# curl 172.17.0.2
Docker Web Test of 172.17.0.2
另起终端:
[root@docker ~]# docker commit -a "[email protected]" -m "Httpd V1" -p httpd httpd:v1
sha256:4e9db1d09cab22c1d0e710d448ab69c6f8cf0ab1d566dc18c645342551ad35fc
[root@docker ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd v1 4e9db1d09cab 8 seconds ago 144MB
验证是否可用
[root@docker ~]# docker stop httpd
httpd
[root@docker ~]# docker run -d -it --name web1 httpd:v1
de1d9065bd9359db88ff8d3eab3a4508b883c6dd0e4eeace084450e5300ee025
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de1d9065bd93 httpd:v1 "httpd-foreground" 4 seconds ago Up 3 seconds 80/tcp web1
[root@docker ~]# docker inspect web1 | grep -i ipaddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
[root@docker ~]# curl 172.17.0.2
Docker Web Test of 172.17.0.2
Dockerfile 编写的基本结构 Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释。
一台主机可以有多个Dockerfile;要使用多个Dockerfile 创建镜像,可以在不同目录编写Dockerfile,然后在Dockerfile 所在的目录下构 建新的镜像。
注意:Dockerfile 中所包含需要的内容;如COPY的文件、目录等,都需要在Dockerfile 同级目录下存在。
docker build是基于dockerfile制作镜像的命令。
格式:
docker build [OPTIONS] PATH | URL | -
选项:
-t:指定要创建的目标镜像名
-c,- cpu-shares int :CPU份额(相对权重)
-m,- memory bytes:内存限制
–build-arg:设置构建时变量,就是构建的时候修改ARG指令的参数
dockerfile常用指令:
[root@docker ~]# docker images
centos latest 5d0da3dc9764 23 months ago 231MB
Dockerfile:
FROM centos:latest
MAINTAINER "[email protected]"
RUN mkdir -p /data/html
COPY index.html /data/html
创建需要复制的文件
[root@docker ~]# echo "CentOS imgage Test Page" > imgfile/index.html
[root@docker ~]# ll imgfile/
total 8
-rw-r--r--. 1 root root 93 Aug 21 00:33 Dockerfile
-rw-r--r--. 1 root root 24 Aug 21 00:35 index.html #需要复制到容器中的文件通常建议放在和Dockerfile同一目录下
测试:
[root@docker ~]# docker build -t centos:v1 ./imgfile/
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos v1 67f0bf991434 About a minute ago 231MB
[root@docker ~]# docker image inspect centos:v1 | grep -i aut
"Author": "\"[email protected]\"",
[root@docker ~]# docker run -d -it --name centos1 centos:v1 /bin/bash
e4d3c514b8c942c077190e465fa31587b1b44e6cba3f08d31029249d7434ab4c
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e4d3c514b8c9 centos:v1 "/bin/bash" 4 seconds ago Up 3 seconds centos1
[root@docker ~]# docker exec -it centos1 /bin/bash
[root@e4d3c514b8c9 /]# cat /data/html/index.html
CentOS imgage Test Page
拉取镜像
[root@kvm web]# docker pull busybox
编写Dockerfile
FROM busybox:latest
MAINTAINER "APEX"
ENV web_doc=/data/html
RUN mkdir -p $web_doc && echo "WEB TEST BUSYBOX" > $web_doc/index.html
CMD /bin/httpd -f -h $web_doc
创建镜像
[root@kvm web]# docker build -t busybox:v1 ./
正常启动容器
[root@kvm web]# docker run -d --name web busybox:v1
[root@kvm web]# curl 172.17.0.2
WEB TEST BUSYBOX
追加参数启动
[root@kvm web]# docker run -d --name web busybox:v1 ls /
c0283a1b6f47969298a071b2594af264163e07d39feead39d30d4789ca7fb87e
[root@kvm web]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@kvm web]# curl 172.17.0.2
^C
[root@kvm web]#
我们可以看出来容器并未启动,所以也无法访问页面。