Docker—镜像制作与Dockerfile
一.镜像制作的三种方式
1.基于已有的镜像创建
查看镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 5e35e350aded 5 months ago 203MB
创建容器并且运行
[root@localhost ~]# docker create -it centos:7 /bin/bash
a739f598e610ac1013e5c07c6038e752977781c23f197b91425fa80925752321
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a739f598e610 centos:7 "/bin/bash" 21 seconds ago Created musing_chaum
基于该容器创建镜像(-m:指定信息,-a:指定镜像作者)
[root@localhost ~]# docker commit -m "new" -a "daoke" a739f598e610 daoke:centos
sha256:56e986bebc424a403cf26e93096946bdc140bb65af3e85771e6e52575a72d183
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
daoke centos 56e986bebc42 30 seconds ago 203MB
centos 7 5e35e350aded 5 months ago 203MB
2.基于本地模板创建镜像
提前准备安装包:debian-7.0-x86-minimal.tar.gz
把上实验创的镜像删除:
[root@localhost ~]# docker rmi 56e986bebc42
Untagged: daoke:centos
Deleted: sha256:56e986bebc424a403cf26e93096946bdc140bb65af3e85771e6e52575a72d183
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 5e35e350aded 5 months ago 203MB
创建镜像:
[root@localhost ~]# cat debian-7.0-x86-minimal.tar.gz | docker import - docker:new
sha256:f1b7f580106e9e8101f0429bfa6f873575eff91f38a875c42a73d7b86918e2fa
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker new f1b7f580106e 9 seconds ago 215MB
centos 7 5e35e350aded 5 months ago 203MB
3.基于dockerfile自定义镜像
把之前创建的镜像,容器全部删除干净:
[root@localhost ~]# docker rm a739f598e610
a739f598e610
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# docker images | awk '{print "docker rmi "$3}' | bash
Error response from daemon: invalid reference format: repository name must be lowercase
Untagged: docker:new
Deleted: sha256:f1b7f580106e9e8101f0429bfa6f873575eff91f38a875c42a73d7b86918e2fa
Deleted: sha256:3a1d67a7fe13e7d70786058b5929b4e6d925a49251c6fc1c8d2870076d7727b0
Untagged: centos:7
Untagged: centos@sha256:4a701376d03f6b39b8c2a8f4a8e499441b0d567f9ab9d58e4991de4472fb813c
Deleted: sha256:5e35e350aded98340bc8fcb0ba392d809c807bc3eb5c618d4a0674d98d88bccd
Deleted: sha256:77b174a6a187b610e4699546bd973a8d1e77663796e3724318a2a4b24cb07ea0
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
本地创建Dockerfile文件:
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
containerd rh
[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 chomd 755 /run.sh
CMD ["/run.sh"]
创建执行脚本:
[root@localhost opt]# vim run.sh
#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND
web页面:
[root@localhost opt]# echo "this is web test" > index.html
[root@localhost opt]# ls
containerd Dockerfile index.html rh run.sh
生成镜像:
[root@localhost opt]# docker build -t httpd:centos .
利用镜像,创建运行容器
[root@localhost opt]# docker run -d -p 1216:80 httpd:centos
访问页面:
192.168.88.131:1216
4.Dockerfile操作命令
Dockerfile是由一-组指令组成的文件
Dockerfile结构四部分
●基础镜像信息
●维护者信息
●镜像操作指令
●容器启动时执行指令
使用Dockerfile创建镜像并在容器中运行
操作命令:
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
健康检查