手机网站建设公司推荐,wordpress文章自适应图片大小,如何在别人网站挂黑链,企业营销网站的建设目录
一.制作镜像的两种方式
1.在已有容器中更新并提交这个镜像
2.使用Dockerfile来制作
二.基于容器制作镜像
1.格式
#xff08;1#xff09;主要格式
#xff08;2#xff09;可选参数
2.案例
基于容器创建镜像设置标签并进行验证是否可用
#xff08;1…目录
一.制作镜像的两种方式
1.在已有容器中更新并提交这个镜像
2.使用Dockerfile来制作
二.基于容器制作镜像
1.格式
1主要格式
2可选参数
2.案例
基于容器创建镜像设置标签并进行验证是否可用
1运行容器并写入验证内容改变容器存储层内容
2另起终端制作新镜像在原有镜像基础上在进行存储层的增量下次使用此镜像时会参照最新变化
3可以对同一镜像打多次标签删除时也是直到删除了最后一个标签才算镜像被删除
4以新镜像运行新容器验证存储层变动
5docker diff 可以查看容器内哪些文件产生变动
基于容器创建新镜像并修改执行命令CMD
3.基于容器制作镜像的缺点
二.基于Dockerfile制作镜像
1.简介
2.相关注意事项
1Dockerfile 编写的基本结构
2一台主机可以有多个Dockerfile
3Dockerfile中指定的所有COPY、ADD等内容都需要与Dockerfile位于同一级目录下
3.Dockerfile指令介绍
1FROM
2MAINTAINER
3COPY
4ADD
5WORKDIR
6RUN
7EXPOSE
8ENV
9VOLUME
10CMD
11ENTRYPOINT
12HEALTHCHECK
13ONBUILD
4.制作
1主要是使用build命令
2案例演示 一.制作镜像的两种方式
1.在已有容器中更新并提交这个镜像
2.使用Dockerfile来制作
二.基于容器制作镜像
1.格式
1主要格式
docker commit 参数 容器名称
[rootlocalhost ~]# docker commit -p bu1
sha256:efbd10d0e00a552f86747a6001323992c030df81338f670f6916c47948e39f742可选参数
-a指定作者-c修改dockerfile指令用于创建的镜像-m记录本次修改的内容描述信息-p在提交期间暂停容器默认为true
2.案例
基于容器创建镜像设置标签并进行验证是否可用
1运行容器并写入验证内容改变容器存储层内容
[rootlocalhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest a416a98b71e2 5 weeks ago 4.26MB
[rootlocalhost ~]# docker run --name bu1 -it busybox
/ # mkdir /html
/ # echo hello /html/index.html
/ # 2另起终端制作新镜像在原有镜像基础上在进行存储层的增量下次使用此镜像时会参照最新变化
[rootlocalhost ~]# docker commit -p bu1
sha256:efbd10d0e00a552f86747a6001323992c030df81338f670f6916c47948e39f74
[rootlocalhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
none none efbd10d0e00a 10 seconds ago 4.26MB
busybox latest a416a98b71e2 5 weeks ago 4.26MB
[rootlocalhost ~]# docker tag efb along/html:v1 #根据ID来打标签
[rootlocalhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
along/html v1 efbd10d0e00a 6 minutes ago 4.26MB
busybox latest a416a98b71e2 5 weeks ago 4.26MB3可以对同一镜像打多次标签删除时也是直到删除了最后一个标签才算镜像被删除
[rootlocalhost ~]# docker tag efb along/html:v1
[rootlocalhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
along/html v1 efbd10d0e00a 6 minutes ago 4.26MB
busybox latest a416a98b71e2 5 weeks ago 4.26MB
[rootlocalhost ~]# docker tag along/html:v1 along/html:v2
[rootlocalhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
along/html v1 efbd10d0e00a 7 minutes ago 4.26MB
along/html v2 efbd10d0e00a 7 minutes ago 4.26MB
busybox latest a416a98b71e2 5 weeks ago 4.26MB
[rootlocalhost ~]# docker image rm along/html:v2
Untagged: along/html:v2
[rootlocalhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
along/html v1 efbd10d0e00a 7 minutes ago 4.26MB
busybox latest a416a98b71e2 5 weeks ago 4.26MB4以新镜像运行新容器验证存储层变动
[rootlocalhost ~]# docker run --name bu2 -it along/html:v1
/ # cat /html/index.html
hello
/ # 5docker diff 可以查看容器内哪些文件产生变动
[rootlocalhost ~]# docker diff bu1
A /html
A /html/index.html
C /root
A /root/.ash_history
[rootlocalhost ~]# docker diff bu2
C /root
C /root/.ash_history基于容器创建新镜像并修改执行命令CMD
基于已有容器常见新镜像并指定执行httpd
[rootlocalhost ~]# docker commit -c CMD [/bin/httpd,-f,-h,/html] -p bu1 along/html:v1
sha256:2c2af15b2f29b03eb3d5d4a03d1680debc7eee3ba6c62d42073edf008e9bd3c0
#[指定httpd服务,-f在前台运行,-h表示后面指定httpd运行的主目录,页面存放目录]
[rootlocalhost ~]# docker run --name bu3 -d along/html:v1
36448f483526ed72e74ea4bb3c0ad70a54c13940326bd0c19713acbbffc72738
[rootlocalhost ~]# docker inspect bu3 | grep -i ipaddressSecondaryIPAddresses: null,IPAddress: 172.17.0.3,IPAddress: 172.17.0.3,
[rootlocalhost ~]# curl 172.17.0.3
hello3.基于容器制作镜像的缺点
1在基于容器制作镜像后使用容器时自己要修改的文件和一些不希望修改的文件也一起产生变动数据量一旦大起来就显得极为繁杂
2只有自己知道自己在制作时干过什么甚至过段时间自自己都不知道干过什么难以为进一步的增量操作提供正确参考
3基于分层存储下的增量运转模式随着修改次数的增多镜像的臃肿程度呈递增状态
二.基于Dockerfile制作镜像
1.简介
把每一层修改、安装、构建、操作的命令都写入一个脚本用这个脚本来构建、定制镜像那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这就是Dockerfile。 Dockerfile 是一个文本文件其内包含了一条条的指令每一条指令会构建一层每一条 指令的内容是描述该层应当如何构建。 2.相关注意事项
1Dockerfile 编写的基本结构
Dockerfile 一般分为四部分基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令文件名为“Dockerfile” 2一台主机可以有多个Dockerfile
要使用多个Dockerfile 创建镜像可以在不同目录编写Dockerfile然后在Dockerfile 所在的目录下构新的镜像 3Dockerfile中指定的所有COPY、ADD等内容都需要与Dockerfile位于同一级目录下
3.Dockerfile指令介绍
1FROM
Dockerfile文件内容以FROM开头是在构建镜像中指定基础镜像之后的动作基于FROM指定的基础镜像环境下进行如果这个镜像在本地主机docker上不存在将会从docker公共库拉取。在有多个镜像需求时FROM可以出现多次。特殊空白镜像——scratch可以直接将编写好的可执行文件放进去进行镜像制作 FROM centos:6 2MAINTAINER
提供镜像制作者的详细信息一般紧跟FROM之后
FROM centos:6
MAINTAINER name name163.com
3COPY
复制文件或目录到容器里指定的路径
文件或目录为多个时支持通配符匹配
文件或目录必须是Dockerfile所在路径的上下文目录不能在其父目录
当指定的是目录时其本身不会被复制但其下的文件或子目录会被递归复制
COPY的文件的权限和修改时间等会被保留
FROM centos:6
MAINTAINER name name163.com
COPY index.html /data/web/html/ #这个情况下就要确保存放Dockerfile的同级目录下要有index.html文件/data/web/html/是目标目录
4ADD
类似于COPY指令支持tar文件和url路径如果指定的是同是在一个系统上的压缩的tar文件其将会被执行类似于“tar -x”的解包操作而通过url获取的则不会被操作
FROM centos:6
MAINTAINER name name163.com
COPY index.html /data/web/html/
ADD xxx.tar.gz /usr/local/src/ #xxx.tar.gz同样放在Dockerfile统计目录如果是url原地址则直接指定即可
5WORKDIR
用于为RUN、CMD、ENTRYPOINT、COPY、ADD指定工作目录WORKDIR可以出现多次不存在时会自动创建该目录也支持ENV定义的变量
FROM centos:6
MAINTAINER name name163.com
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/ 6RUN
指定制作镜像过程中运行的程序可以是任何命令直接指定命令通常是一个以“/bin/sh -c”运行shell命令
FROM centos:6
MAINTAINER name name163.com
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/
RUN cd ./src tar -zvxf xxx.tar.gz #表示切换到这个目录解这个包7EXPOSE
声明运行容器时提供服务的端口端口开放不会由此决定但会在使用“-P”随机端口运行容器时提供参考可以以port/协议方式来指定传输层协议tcp/udp支持同时指定多个端口
FROM centos:6
MAINTAINER name name163.com
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/
EXPOSE 80/tcp
RUN cd ./src tar -zvxf xxx.tar.gz
8ENV
为制作镜像定义环境变量其可以被调用
FROM centos:6
MAINTAINER name name163.com
ENV DOC_ROOT/data/web/html/ #在后面需要使用时就可以通过“$DOC_ROOT”的方式来引用
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/
EXPOSE 80/tcp
RUN cd ./src tar -zvxf xxx.tar.gz
9VOLUME
在制作镜像过程中在image内创建一个挂载点目录来挂载本容器卷或其他容器卷
FROM centos:6
MAINTAINER name name163.com
ENV DOC_ROOT/data/web/html/ #在后面需要使用时就可以通过“$DOC_ROOT”的方式来引用
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/
EXPOSE 80/tcp
VOLUME /data/myweb
RUN cd ./src tar -zvxf xxx.tar.gz
10CMD
类似RUN指令可以存在多个可以在Dockerfile构建出新镜像并启动容器时运行任何命令或程序值为了为启动的容器指定默认运行程序运行结束该容器也停止如果与RUN的命令有冲突可能会被RUN的命令选项覆盖
FROM centos:6
MAINTAINER name name163.com
ENV DOC_ROOT/data/web/html/
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/
EXPOSE 80/tcp
VOLUME /data/myweb
RUN cd ./src tar -zvxf xxx.tar.gz
CMD /bin/httpd -f -h ${DOC_ROOT} #也可以CMD [/bin/httpd,-f,-h,${DOC_ROOT}]
11ENTRYPOINT
类似CMD指定容器运行时的默认程序不会被RUN命令选项覆盖除了RUN --entryypoint作为一个单独的可执行程序。在指定了ENTRYPOINT又指定了CMD后CMD的内容被当做参数传给ENTRYPOINT指定不再直接运行命令或程序
FROM centos:6
MAINTAINER name name163.com
ENV DOC_ROOT/data/web/html/
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/
EXPOSE 80/tcp
VOLUME /data/myweb
RUN cd ./src tar -zvxf xxx.tar.gz
ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT} #也可以像上面CMD那样用“[]”写
12HEALTHCHECK
可以实现告知docker怎样检测它是否还在正常运转只能出现一次若出现多次只有最后一个生效
可选参数 --intervalDURATION (default:30s) 隔多久探测一次默认30s --timeoutDURATION (default:30s) 服务器响应超时时长默认30s --retriesN (default:3) 标记失败几次将容器视为不正常状态默认3次
返回值含义
0——容器健康
1——容器不健康
FROM centos:6
MAINTAINER name name163.com
ENV DOC_ROOT/data/web/html/
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/
EXPOSE 80/tcp
VOLUME /data/myweb
RUN cd ./src tar -zvxf xxx.tar.gz
ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT}
HEALTHCHECK CMD curl xxx.xxx.xxx.xxx:xx #验证某个容器的某个端口
13ONBUILD
在Dockerfile中定义一个触发器后面跟的是RUN、COPY等指定被指定的指令只有在被当前镜像被作为基础镜像去制作下一级镜像时才会被执行。不能ONBUID嵌套ONBUILD
FROM centos:6
MAINTAINER name name163.com
ENV DOC_ROOT/data/web/html/
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/
EXPOSE 80/tcp
VOLUME /data/myweb
RUN cd ./src tar -zvxf xxx.tar.gz
ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT}
HEALTHCHECK CMD curl xxx.xxx.xxx.xxx:xx
ONBUILD RUN echo h1here server2/h1 /data/web/html/index.html
4.制作
1主要是使用build命令
docker build 参数 路径
常用可选参数
-t指定要创建的目标镜像名称-cCPU权重-m内存限制
2案例演示
[rootlocalhost centos]# pwd
/centos
[rootlocalhost centos]# ll
total 1060
-rw-r--r-- 1 root root 270 Aug 24 21:52 Dockerfile
-rw-r--r-- 1 root root 6 Aug 24 21:16 index.html
-rw-r--r-- 1 root root 1073322 Aug 9 19:20 nginx-1.22.0.tar.gz[rootlocalhost centos]# vim Dockerfile
FROM busybox:latest
MAINTAINER sulibao sulibao2003163.com
ENV DOC_ROOT/data/web/html/ DATA_STO/usr/local/
COPY index.html ${DOC_ROOT}
ADD nginx-1.22.0.tar.gz ${DATA_STO}
VOLUME /data/mysql
EXPOSE 8080:80/tcp
CMD cd ${DATA_STO} tar -zxf ./nginx-1.22.0.tar.gz[rootlocalhost centos]# docker build -t myhttpd1 ./ #制作镜像
[] Building 0.2s (8/8) FINISHED docker:default [internal] load build definition from Dockerfile 0.0s transferring dockerfile: 309B 0.0s [internal] load .dockerignore 0.0s transferring context: 2B 0.0s [internal] load metadata for docker.io/library/busybox:latest 0.0s [1/3] FROM docker.io/library/busybox:latest 0.0s [internal] load build context 0.0s transferring context: 71B 0.0s CACHED [2/3] COPY index.html /data/web/html/ 0.0s [3/3] ADD nginx-1.22.0.tar.gz /usr/local/ 0.1s exporting to image 0.0s exporting layers 0.0s writing image sha256:91940b9e2655f1b45769626122c7539e2d58192c2f 0.0s naming to docker.io/library/myhttpd1 0.0s
[rootlocalhost centos]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myhttpd1 latest 91940b9e2655 2 minutes ago 10.7MB[rootlocalhost centos]# docker run -it --name web1 -P --rm myhttpd1:latest ls /usr/local #运行容器并查看功能是否已经实现
nginx-1.22.0