可以在 docker hub网站搜索镜像 https://hub.docker.com/ ,也可以使用 docker search 来搜索镜像
获取容器镜像
docker pull ubuntu
启动容器
docker run -d -p 8080:8080 ubuntu /bin/bash
容器必须要有一个运行的服务,否则容器就是stop状态
镜像和容器的关系
从 docker hub 上 pull 的都是镜像,可以使用 docker run 或 docker create 将镜像启动为容器
docker run:等于 docker create + docker start ,将镜像启动为容器并运行容器
docker create:将镜像启动为容器,但是不会运行容器
docker start:运行容器
先把一个镜像启动为容器,对容器做了更改之后,使用docker commit命令生成一个新的镜像
需要创建Dockerfile文件,在最后需要指定路径,当前路径则为 . ,构建镜像时会打包指定路径下的所有文件,所以不要有无用的文件
Dockerfile格式
1.文件内容包含
#注释
指令(大写) 参数(小写)
2.构架镜像时,按顺序执行
3.第一个指令必须是FROM(不包括注释),是为了确定基础镜像
Dockerfile常用指令
# 指定基础镜像,本地没有会从dockerHub pull
FROM
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
# 作者,不推荐使用,即将被废弃
MAINTAINER(depreacted)
MAINTAINER <name>
# 给镜像指定各种元数据,不会对镜像造成影响
LABEL
LABEL <key>=<value> <key>=<value> ...
# 从宿主机复制文件到创建的新镜像文件,可以使用通配符
COPY
COPY <from>...<to>
COPY ["<from>"...."<to>"]
#如 COPY hom*.txt /mydir/
# 用法和COPY一样,ADD还支持URL路径,TAR文件会自动解压
ADD
ADD <from>...<to>
ADD ["<from>"...."<to>"]
# 为Dockerfile中所有的RUN,CMD,ENTRYPOINT,COPY和ADD设定工作目录,只会影响当前WORKDIR之后的指令
WORKDIR
WORKDIR <dirpath>
# 用来在镜像中创建挂载点(镜像中没有会创建),随机挂载宿主机上的卷或者其他容器上的卷,使用docker inspect查看宿主机上的挂载路径
VOLUME
VOLUME <mountpoint>
VOLUME ["<mountpoint>"]
# 镜像要暴露的端口,如要使用端口,在执行docker run -p时生效
EXPOSE
# 用来给镜像定义所需的环境变量,并且可以被Dockerfile文件中位于其之后的其他指令(如ENV,ADD,COPY,WORKDIR等)所调用,使用$varname或${varname}
ENV
ENV <key> <value>
ENV <key>=<value>...
# 用法同ENV,指定一个变量,可以在docker build创建镜像的时候,使用--build-arg <varname>=<value>来指定参数
ARG
ARG <name>[=<default value>]
# 指定docker build过程中运行指定的指令
RUN
RUN <command>
# <命令行命令> 等同于,在终端操作的 shell 命令
RUN ["<executable>","<param1>","<param2>"]
#RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline
# 容器启动时运行的命令,如果存在多个 CMD 指令,仅最后一个生效。
CMD
CMD <command>
CMD ["<executable>","<param1>","<param2>"]
CMD ["<param1>","<param2>",...] # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
# 在镜像运行为容器后执行的命令,可以写多个,但只有最后一个(CMD和ENTRYPOINT中的一个)会生效
ENTRYPOINT
ENTRYPOINT<command>
ENTRYPOINT["<executable>","<param1>","<param2>"]
# 用来在Dockerfile中定义一个触发器,可以使用其他指令,在这个镜像被下一次构建镜像且作为基础镜像时生效
ONBUILD
ONBUILD <instruction>
实例,先创建一个文件夹,里面有构建镜像时的必需文件,创建Dockerfile文件,内容为
#this is jingxiang FROM centos ARG myname=yjh MAINTAINER $myname LABEL author=yjh ADD jdk-....tar.gz /usr/local/ ENV JAVA_HOME=/usr/local/jdk-... ENV CLASSPATH=.:$JAVA_HOME/lib ENV PATH=$PATH:$JAVA_HOME/bin WORKDIR $JAVA_HOME RUN yum -y install vim VOLUME ["/data"] EXPOSE 8080 CMD ls ENTRYPOINT ["java","-version"]
构建镜像: docker build -t mycentos .
原文:https://www.cnblogs.com/yjh1995/p/12584559.html