镜像制作:
- docker commit 容器名称 镜像名称
- dockerfile
方法一:docker commit
方法过程:
使用docker commit方法来制作镜像时,首先要先启动一个容器,然后在启动的容器中部署好所需要的服务和进程等,然后使用 docker commit 容器名 镜像名:版本(可以不带) 来制作出镜像,这样制作出来的镜像就会有容器中之前已经部署好的各种服务了;
缺点:
-
制作过程黑盒,对外不可见,其他人无法知道镜像的制作过程和特点, 时间久了可能会忘记镜像中的内容;
-
镜像一旦丢失或误删后,很难再复制出同样的镜像;
方法二:dcokerfile
dockerfile文件示例:
FROM centos:7
ADD entrypoint.sh /root # entrypoint.sh 是从工作目录下的文件 /root 镜像目录
USER root # 用root用户执行下方的指令
RUN yum install -y wget vim
RUN yum install -y vim wget
RUN yum install -y wget vim git
RUN yum install -y wget
RUN yum install -y openssh-server openssl
RUN yum install wget vim
RUN yum install git vim
USER jenkins # 容器启动会读取最后一个user作为用户继续执行
WORKDIR /root # 容器启动后的默认目录
ENTRYPOINT ["/bin/bash", "/root/entrypoint.sh"] # 容器的启动命令,即容器启动后首先运行的命令 该条命令即把之前通过add命令复制到镜像中的entrypoint.sh文件通过/bin.bash执行;
dockerfile 指 令:
- FROM (指定继承自哪个基础镜像)
- RUN (运行shell命令)
- ADD/COPY (复制文件,当复制的文件是压缩包时,add可以自动解压文件;而copy可以从另外的镜像中copy文件到临时镜像中; )
- USER (指定运行用户)
- ENTRYPOINT (指定容器启动命令)
- ENV (指定环境变量)
更多指令介绍:百度安全验证
镜像制作指令:
docker build -t 镜像名称:版本(可以省略) 工作目录(读取dockerfile的目录)
设置好dockerfile文件后,执行上述命令来制作镜像;
当dockerfile文件就在当前目录下时,可以写做:dcoker build -t demo .
-f :当要读取的dockerfile文件不叫做dockerfile时,使用 -f + 文件名来指定读取文件,该指令很少使用,一般读取的文件名就叫做dockerfile
-t :指定镜像名称(版本)
注意点:
使用该方法创建镜像时,会将工作目录下的所有文件都发送到docker damon,所以当前目录下存在其他文件,尤其是大文件时会大大降低效率,因此dockerfile文件都会单独保留在某一目录下;
制作过程:
发送工作目录下的文件到docker damon
启动临时容器
在临时容器中运行指令
删除临时容器
镜像创建成功