如何快速的制作docker镜像

docker镜像

一、镜像制作

1.创建方式

基于Dockerfile(最常用)创建

基于已有的镜像容器进行创建镜像

docker commit [选项] 容器ID/名称 仓库名称:[标签](选项:-m 说明信息,-a 作者信息,-p 生成过程中停止容器的运行)

基于本地模板进行构建

通过导入操作系统模板文件生成新的镜像

2.镜像分层

Dockerfile中每个指令都会创建一个新的镜像层

镜像层将被缓存和复用

当Dockerfile的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效

某一层的镜像缓存失效之后,它之后的镜像层缓存都会失效

镜像层是不可变的,如果在某一层中添加一个文件,然后再下一层中删除它,则镜像中依然会包含该文

3.Dockerfile

3.1定义

Dockerfile是由一组指令组成的文件

Dockerfile结构分成四个部分:

基础镜像信息

维护者信息

镜像操作指令

容器启动时指定指令

Dockerfile 每行支持一条指令,每一条指令可携带多个参数,支持使用以“#”号开头的注释

3.2常用操作指令

指令含义
FROM 镜像指定新镜像所基于的镜像,第一条指令必须为FROM指令, 每创建一个镜像就需要一条FROM指令
MAINTAINER 名字说明新镜像的维护人信息
RUN 命令在所基于的镜像执行命令,并提交到新的镜像中
CMD [ “要运行的程序”,“参数1”,“参数2”]指令启动容器时要运行的命令或者脚本,Dockerfile只能 有一条CMD命令,如果指定多条则只能执行最后一条
EXPOSE 端口号指定新镜像加载到Docker时要开启的端口
ENV 环境变量 变量值设置一个环境变量的值,会被后面的RUN使用
ADD 源文件/目录 目标文件/目录将源文件复制到目标文件,源文件要与Dockerfile位于 相同目录中,或者是一个URL
COPY 源文件/目录 目标文件/目录将本地主机上的文件/目录复制到目标地点,源文件/目录 要与Dockerfile在相同的目录中
VOLUME [“目录”]在容器中创建一个挂载点
USER 用户名/UID指定运行容器时的用户
WORKDIR 路径为后续的RUN、CMD、ENTRYPOINT指定工作目录
ONBUILD 命令指定所生成的镜像作为一个基础镜像时所要运行的命令
HEALTHCHECK健康检查

二、实验

基于已有的镜像

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             ST               NAMES
[root@localhost ~]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             
paigeeworld/centos7   latest              4cbe7aa905e7        6 years ago         
[root@localhost ~]# docker create -it paigeeworld/centos7 /bin/bash
e22c4d29e78977d7f364f1738ac2f1457e8758588ec0900d3f59285fa4e9a328
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS               NAMES
e22c4d29e789        paigeeworld/centos7   "/bin/bash"         12 seconds ago      Created                                 kind_diffie
[root@localhost ~]# docker commit -m "new" -a "docker" e22c4d29e789 docker:centossha256:bfcc1ec67f697391c262e51b478e388b51b83431e56f33dc621e09abb9ab3ae4
[root@localhost ~]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED              SIZE
docker                centos              bfcc1ec67f69        About a minute ago   382MB
paigeeworld/centos7   latest              4cbe7aa905e7        6 years ago          382MB

基于本地模板

[root@localhost ~]# cd /opt
[root@localhost opt]# ls
containerd  debian-7.0-x86-minimal.tar.gz  nginx  nginx-c  rh
[root@localhost opt]# docker rmi   bfcc1ec67f69  
Untagged: docker:centos
Deleted: sha256:bfcc1ec67f697391c262e51b478e388b51b83431e56f33dc621e09abb9ab3ae4
[root@localhost opt]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
paigeeworld/centos7   latest              4cbe7aa905e7        6 years ago         382MB
[root@localhost opt]# cat debian-7.0-x86-minimal.tar.gz | docker import -docker:new
unknown shorthand flag: 'd' in -docker:new
See 'docker import --help'.
[root@localhost opt]# cat debian-7.0-x86-minimal.tar.gz | docker import - docker:new
sha256:5e3b084aeed4fb2a7a8f16161d8975f1b3480f8d0f4b495a73b4a70c76dcfd59
[root@localhost opt]# docker images 
REPOSITORY            TAG                 IMAGE ID            CREATED              SIZE
docker                new                 5e3b084aeed4        About a minute ago   215MB
paigeeworld/centos7   latest              4cbe7aa905e7        6 years ago          382MB

dockerfile 文件

[root@localhost opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[root@localhost opt]# vim Dockerfile

FROM centos
MAINTAINER The project <cloud-docker>
RUN yum -y update
RUN yum -y install httpd
EXPOSE 80
ADD index.html /var/www/html/index.html
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]

[root@localhost opt]# ls
containerd  debian-7.0-x86-minimal.tar.gz  Dockerfile  nginx  nginx-c  rh
[root@localhost opt]# cat Dockerfile
FROM centos
MAINTAINER The project <cloud-docker>
RUN yum -y update
RUN yum -y install httpd
EXPOSE 80
ADD index.html /var/www/html/index.html
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]

[root@localhost opt]# vim run.sh

#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND
[root@localhost opt]# echo "this is test web" >index.html
[root@localhost opt]# ls
containerd                     Dockerfile  nginx    rh
debian-7.0-x86-minimal.tar.gz  index.html  nginx-c  run.sh
[root@localhost opt]# docker build -t httpd:centos .
Sending build context to Docker daemon  360.9MB
Step 1/9 : FROM centos
latest: Pulling from library/centos
3c72a8ed6814: Pull complete 
Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd
Status: Downloaded newer image for centos:latest
...........
Complete!
Removing intermediate container 9880030a295e
 ---> f84c627abf46
Step 5/9 : EXPOSE 80
 ---> Running in 4f9954356bcf
Removing intermediate container 4f9954356bcf
 ---> b3b4f4b089d2
Step 6/9 : ADD index.html /var/www/html/index.html
 ---> 87908e733e70
Step 7/9 : ADD run.sh /run.sh
 ---> 7431eb426807
Step 8/9 : RUN chmod 755 /run.sh
 ---> Running in 6e0655820974
Removing intermediate container 6e0655820974
 ---> 4213ef7887a4
Step 9/9 : CMD ["/run.sh"]
 ---> Running in af24df0ce174
Removing intermediate container af24df0ce174
 ---> d1f7f9e4b4b6
Successfully built d1f7f9e4b4b6
Successfully tagged httpd:centos
[root@localhost opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
httpd               centos              d1f7f9e4b4b6        About a minute ago   285MB
centos              latest              0d120b6ccaa8        3 months ago         215MB
[root@localhost opt]# docker run -d -p 1216:80 httpd:centos
631d54681adc5f5a6afcf3d7330ea375c688955d7d694ab9b43f41604e5e9f74
[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS                  NAMES
e0a65471ae69        httpd:centos        "/run.sh"           4 seconds ago       Up 3 seconds               0.0.0.0:1216->80/tcp   great_hoover

在这里插入图片描述
这就是实验步骤,仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值