dcoker build和docker run的区别
dcoker buile:
创建一个镜像,在dockerfile中可以运行多个RUN命令,也可以使用CMD命令,但是如果在docker run 容器创建的时候使用了CMD就会被覆盖,如果没有使用就默认使用build构建的CMD命令
dockerfile主要命令如下:
-
FROM:
命令格式:FROM <image>
用法说明:第一个指令必须是FROM了,其指定一个构建镜像的基础源镜像,如果本地没有就会从公共库中拉取,没有指定镜像的标签会使用默认的latest标签,可以出现多次,如果需要在一个Dockerfile中构建多个镜像
-
MAINTAINER:
命令格式:MAINTAINER <name> <email>
用法说明:描述镜像的创建者和其邮箱
-
RUN:
命令格式:RUN <command>
用法说明:可以通过&符号连接多个RUN语句
- CMD:
命令格式:CMD <command>
用法说明:可以使用多次,但是只有最后一个生效
-
EXPOSE:
命令格式:EXPOSE <port> [<port>...]
用法说明:告诉Docker服务器容器对外映射的容器端口号,在docker run -p的时候生效
- EVN:
命令格式:EVN <key> <value> #只能设置一个
EVN <key>=<value>#可以设置多个
用法说明:设置容器的环境变量,可以让其后面的RUN命令使用,容器运行的时候这个变量也会保留
- ADD:
命令格式:ADD <src> <dest>
用法说明:复制本机文件或目录或远程文件,添加到指定的容器目录,支持GO的正则模糊匹配。路径是绝对路径,不存在会自动创建。如果源是一个目录,只会复制目录下的内容,目录本身不会复制。ADD命令会将复制的压缩文件夹自动解压(如果是远程的压缩文件将不会自动解压),这也是与COPY命令最大的不同
- COPY:
命令格式:COPY <src> <dest>
用法说明:COPY除了不能复制网络文件。其它功能和ADD相同
- ENTRYPOINT:
命令格式:ENTRYPOINT "command"
用法说明:这个命令和CMD命令一样,唯一的区别是不能被docker run命令的执行命令覆盖,如果要覆盖需要带上选项--entrypoint,如果有多个选项,只有最后一个会生效
- VOLUME:
命令格式:VOLUME ["path"]
用法说明:在主机上创建一个挂载,挂载到容器的指定路径。docker run -v命令也能完成这个操作,而且更强大。这个命令不能指定主机的需要挂载到容器的文件夹路径。但docker run -v可以,而且其还可以挂载数据容器
- USER:
命令格式:USER daemon
用法说明:指定运行容器时的用户名或UID,后续的RUN、CMD、ENTRYPOINT也会使用指定的用户运行命令
- ONBUILD:
命令格式:ONBUILD [INSTRUCTION]
用法说明:配置当前所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。意思就是,这个镜像创建后,如果其它镜像以这个镜像为基础,会先执行这个镜像的ONBUILD命令
- 一个例子:
1 FROM centos 2 MAINTAINER arrow "arrow@qq.com" 3 RUN mkdir -p /opt/python/ 4 RUN mkdir -p /data/script/ 5 RUN "pip install django uwsgi " 6 ADD operations.tar.gz /data/object/ 7 ADD uwsgi_script.tar.gz /data/script/ 8 ENV PYTHON_HOME /opt/object 9 EXPOSE 8080 10 ENV PATH $PATH:$PYTHON_HOME /bin 11 CMD "uwsgi --ini /data/script/uwsgi.ini"
- 运行docker build:
1 docker build -t centos_python:v1
dcoker RUN:
创建一个容器:
1 docker run --name myweb -d -it --rm centos_python:v1