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
这就是实验步骤,仅供参考