docker基础6-3.1.7创建镜像

3.1.7创建镜像

3.1.7.1基于已有容器创建镜像

docker container commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

-a/--author:作者信息

-m,--message:提交一个信息

-p:创建时暂停容器运行

CONTAINER:容器ID

实验一:基于已有容器myhttpd:1.0,创建一个新的镜像

step 1 启动容器:docker run myhttpd:1.0 bash

step 2 在容器中新增一个文件

touch 1

 

step 3 退出容器

exit

step4 创建一个新镜像myhttpd:2.0

docker container commit -a "muyi" -m "add a new image" e5eedc31d230 myhttpd:2.0

 3.1.7.2基于本地模板导入创建镜像

step 1 下载模版

Download/template/precreated - OpenVZ Virtuozzo Containers Wiki

wgethttp://download.openvz.org/template/precreated/centos-7-x86_64.tar.gz

 

step 2 从模版创建镜像

cat centos-7-x86_64.tar.gz | docker import - centos:1.0

 

3.1.7.3基于dockerfile创建镜像

dockerfile指令集

分类

指令

说明

配置指令

AGR

定义创建过程中使用的变量

FROM

指定所创建镜像的基础镜像

LABEL

为生成的镜像添加元数据标签信息

EXPOSE

声明镜像内服务监听的端口

ENV

指定环境变量

ENTRYPOINT

指定镜像的默认入口命令

VOLUME

创建一个数据卷挂载点

USER

指定容器运行时的用户名或UID

WORKDIR

配置工作目录

ONBUILD

创建子镜像时指定自动执行的操作指令

STOPSIGNAL

指定退出的信号值

HEALTHCHECK

配置所启动容器如何进行健康检查

SHELL

指定默认shell类型

操作指令

RUN

运行指定命令

CMD

启动容器时默认执行的命令

ADD

添加内容到镜像

COPY

复制内容到镜像

通过docker buile命令创建镜像

docker build [OPTIONS] PATH | URL | -

options:

选项

说明

--add-host HOST:IP

添加一个自定义的主机到IP的映射

--build-arg list

添加创建时的变量

--cache-from strings

使用指定镜像做为缓存源

--cgroup-parent string

继承的上层cgroup

--compress

使用gzip压缩创建时的上下文数据

--cpu-period int

CFS调度器时长限制

--cpu-quota int

CFS调度器份额限制

-c, --cpu-shares int

CPU权重

--cpuset-cpus string

CPU数量(0-3, 0,1)

--cpuset-mems string

CPU允许使用的内存数量

--disable-content-trust

忽略镜像验证,默认为需要验证

-f, --file string

Dockerfile文件路径和名称,默认为当前目录下的./dockerfile

--force-rm

总是删除中间过程的容器

--iidfile string

将镜像ID写入到文件

--isolation string

容器隔离机制

--label list

镜像元数据

-m, --memory bytes

内存使用限制

--memory-swap bytes

内存和交换区总限制

--network string

指定使用run命令启动容器时的网络模式,默认为default

--no-cache

创建镜像时不使用缓存

--pull

总试尝试获取镜像的最新版本

-q, --quiet

不打印创建过程中的日志信息

--rm

创建成功后删除中间容器,默认为true

--security-opt strings

安全选项

--shm-size bytes

/dev/shm的大小

-t, --tag list

指定镜像的标签列表,name:tag

--target string

指定创建的目标阶段

--ulimit ulimit

Ulimit操作

实验一:使用dockerfile创建一个运行httpd的容器

step 1 创建dockerfile

vim dockerfile-httpd             #在当前目录下创建一个文本文件,命名为dockerfile-httpd

以下是文件的内容

FROM centos:1.0                #指定一个基础镜像:centos:1.0

LABEL httpd-base v 1.0           #这边可以自定义一些版本信息,作者信息等

EXPOSE 80                     #说明容器开放的端口号

VOLUME [“/root/data”]#创建一个数据卷挂载点

WORKDIR /root                 #指定容器的工作目录

RUN yum install -y httpd \         #安装httpd

&& rm -rf /var/cache/yum/*   #删除yum缓存

CMD "httpd -DFOREGROUND"     #启动httpd

step 2 使用刚刚创建的dockerfile来创建镜像

docker build -t yangjiqing/httpd:1.0 -f ./dockerfile-httpd .

 

创建成功

 

镜像文件已经生成

step 3 在后台启动容器,并将宿主机的/var/www/html做为一个数据卷,挂载到容器的/var/www/html。

docker run -d --name=httpd --hostname=httpd -v /var/www/html:/var/www/html yangjiqing/httpd:1.0

 

查看容器信息:

docker inspect httpd

 

成功启动,并且数据卷也已经挂载上了。

进入容器看一下

docker exec -it httpd bash

 

httpd服务已经进来了。

这里的/var/www/html/index.html文件,是我宿主机上的,说明数据卷也挂载成功。

容器的IP地址是172.17.0.2,这是由宿主机自动分配的。

在宿主机上看看能否打开网页

curl http://172.17.0.2

是可以打开的,这样这个镜像就算是创建成功了。

2.1.7.4 dockerfile中ENTRYPONT 和 CMD命令的区别

ENTRYPONT:

指定镜像的默认入口命令,该入口命令会在启动容器时作为根命令执行,所有传入值作为该命令的参数。

支持两种格式:

·ENTRYPOINT["executable""param1""param2"]exec调用执行;

·ENTRYPOINT command param1 param2shell中执行。

每个Dockerfile中只能有一个ENTRYPOINT,当指定多个时,只有最后一个起效。

在运行时,可以被--entrypoint参数覆盖掉,如docker run --entrypoint

实验1:

这里指定了entrypoint 的命令是echo hello world

Build一下

 

我们用这个镜像创建一个容器看看效果

这里会显示hello world,说明entrypoint指令运行正常.

我们再看一下另一种格式

发现效果是一样的.

CMD命令

CMD指令用来指定启动容器时默认执行的命令。

支持三种格式:

·CMD["executable""param1""param2"]:相当于执行executable param1 param2,推荐方式;

·CMD command param1 param2:在默认的Shell中执行,提供给需要交互的应用;

·CMD["param1""param2"]:提供给ENTRYPOINT的默认参数。

每个Dockerfile只能有一条CMD命令。如果指定了多条命令,只有最后一条会被执行。

如果用户启动容器时候手动指定了运行的命令(作为run命令的参数),则会覆盖掉CMD指定的命令。

第一和第二种格式效果是一样的,我们就用第二种格式来做实验:

实验2:

  

这个效果跟entrypoint是一样的

实验3:ENTRYPOINTCMD命令同时存在

 

再看看效果

 

这里发现只执行了ENTRYPOINT指令,CMD指令不会被执行.

实验4:CMD指令的参数提供给ENTRYPOINT使用

 

这里CMD的参数”hello world”会被传递给ENTRYPOINT.

 

这个效果跟实验1是样的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暮毅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值