docker --version
查看docker的版本信息
docker info
查看docker的基本信息
docker images
查看docker的本地镜像
docker ps
查看正在运行的容器
docker ps -a
查看所有的容器(包括未运行的)
docker login
登录Docker Hub的账号,以便从Docker Hub下载或上传镜像。
如果不登录账号,pull或push时,可能报错:net/http: TLS handshake timeout
docker logout
退出登录
docker build -t .
根据 Dockerfile 的内容创建镜像,并给镜像命名。
docker run -p 4000:80
运行容器,本地主机的4000端口映射到容器的80端口。
docker run -d -p 4000:80
后台运行容器。
docker stop
关闭指定的容器,为容器的ID。
docker kill
强制关闭指定的容器。
docker rm
删除指定的容器。
docker rm $(docker ps -a -q)
删除所有的容器。(在 Windows 中,需在 Git Bash 或 Bash for Windows 中执行该 Linux 命令)
docker rmi
删除指定的镜像。
docker rmi $(docker images -q)
删除所有的镜像。(在 Windows 中,需在 Git Bash 或 Bash for Windows 中执行该 Linux 命令)
docker tag /:
给镜像打标签,以便上传镜像。
docker push /:
上传镜像。
docker run /:
运行镜像。
docker pull
下载镜像。
Dockerfile 是一个文本文件,该文件的内容是创建镜像和启动容器时相关的指令。
Dockerfile 中以 # 号开头的行表示注释。
Docker 可以通过 docker build 命令根据 Dockerfile 的内容来创建镜像。
这里,先介绍 Dockerfile 中常用的指令选项。
语法:FROM
用 FROM 指定构建镜像的基础源镜像(父镜像),如果本地没有指定的镜像,则会自动从 Docker 的公共库 pull 镜像下来。
FROM 必须是 Dockerfile 中非注释行的第一个指令,即一个 Dockerfile 从FROM语句开始。FROM可以在一个 Dockerfile 中出现多次,如果有需求在一个 Dockerfile 中创建多个镜像。如果FROM语句没有指定镜像标签,则默认使用latest标签。
语法:MAINTAINER
指定创建镜像的用户。
语法:WORKDIR
为后面的RUN、CMD、ENTRYPOINT等指令,配置当前的工作目录。
可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
# 最终路径是/a/b/c
WORKDIR指令可以在ENV设置变量之后调用环境变量。
ENV DIRPATH /path
WORKDIR $DIRPATH/$DIRNAME
# 最终路径是 /path/$DIRNAME
语法:ADD
将文件(支持远程URL格式)拷贝到容器指定的路径中(支持通过 Go 的正则模糊匹配)。
可以是文件或者目录,但必须是 Dockerfile 所在路径的相对路径。如果是文件,表示拷贝文件本身;如果是目录,只会拷贝该目录中的所有文件(不包括目录本身)。
必须是绝对路径,如果不存在,就会自动创建。
ADD . /app
# 将Dockerfile文件所在目录中的所有文件,拷贝至/app目录
语法:RUN
每条RUN指令将在当前镜像基础上执行指定的命令,并提交为新的镜像,后续的RUN都以之前RUN提交后的镜像为基础。
镜像是分层的,可以通过一个镜像的任何一个历史提交点来创建,类似源码的版本控制。
RUN产生的缓存在下一次构建镜像时默认不会失效,就会被重用,但可以通过–no-cache选项禁用缓存,即docker build --no-cache。
语法:EXPOSE […]
指定docker容器对外开放的端口,可同时指定多个端口。
EXPOSE 80
# 指定容器的端口为80
语法: ENV
定义环境变量。
会被后续的RUN指令使用,并在容器运行时保留。
ENV NAME World
# 定义环境变量$NAME的值为World
语法:CMD
CMD 指令在 Dockerfile 中只能使用一次,如果有多个,则只有最后一个会生效。
CMD 的作用是为了在启动容器时提供一个默认的命令执行选项。如果用户启动容器时指定了运行的命令,则会覆盖掉CMD指定的命令。
注意:CMD 在启动容器的时候执行,build(创建镜像)时不执行;而 RUN 只是在创建镜像时执行,镜像构建完成之后,启动容器就与RUN无关了,不要混淆两者的用法。
COPY 的用法与 ADD 相同,只不过COPY不支持远程的URL。
语法:VOLUME
创建一个可以从本地主机或其他容器挂载的挂载点。