镜像
docker images [REPOSITORY[:TAG]]
查看所有/[指定]
镜像
docker rmi <image>
删除指定镜像
docker tag <image> <REPOSITORY>:<TAG
> 重命名镜像
docker build <路径>
在指定路径下搜索Dockerfile文件, 并利用其创建镜像
(路径输入-
表示从标准输入中读取Dockerfile内容)
-f
允许使用非名为Dockerfile的文件进行创建
--build-arg <key>=<value>
传递参数给Dockerfile(用ARG <key>
接收)
--no-cache
不使用缓存, 每次构建都会重新执行所有步骤(在确保镜像最新性或当Dockerfile变化时很有用)
-t <name>:<tag>
给镜像命名
容器
docker ps
查看所有容器(运行中)
-a
查看所有容器(包含未运行的)
docker run [option] <image> [COMMAND] [ARG...]
创建容器
-p <host_port>:<container_port>
指定端口映射
-P
将Dockerfile中指定的所有暴露的端口 自动随机映射到主机的 高端口上(大于1023)
-it
创建一个有交互式终端的容器, 要在COMMAND
中指定使用的终端
-e <key>=<value>
设置容器中的环境变量
--name <name>
为容器设置名称
-d
在后台运行
-v <host_path>:<container_path>
将主机的目录或文件挂载到容器内
挂载:容器在挂载目录中可以访问主机上的被挂载目录,并且对容器内挂载目录的修改也会反映在主机目录上
[COMMAND] [ARG...]
在创建容器后, 在容器中运行指定的命令
docker start|stop|restart|pause|unpause <container>
启动|停止|重启|停止|取消停止 容器
docker rm <container>
删除容器
-f
强制删除一个运行中的容器
-v
删除与容器关联的卷(默认不会删除卷)
docker exec <container> [OPTIONS] <COMMAND> [<ARG>...]
在容器中执行指定命令
-d
在后台运行指令
-it
分配一个交互式伪终端, 要在COMMAND
中指定使用的终端
镜像仓库
- 登录 login|登出 logout
- docker login
- docker logout
- 上传镜像 push
- docker push
容器名
[:TAG
]
- 注:容器要改为
用户名
/名字
后才可以上传
- 下载镜像 pull
- 搜索镜像 search
Dockerfile
FROM <image>[:<tag>=latest]
#指定基础镜像,必须要有
LABEL <key>=<value> ...
#为所创建的镜像添加元数据,如作者、版本、描述等信息, 可以有多个LABEL指令,它们会合并成一个元数据集合
WORKDIR <path>
#指定在容器中执行各种命令的工作目录(容器中没有该目录会自动创建),后续的COPY ADD RUN都会在该路径下执行
COPY [--chown=<user>:<group>] <host_path>... <container_path>
ADD [--chown=<user>:<group>] <host_path>... <container_path>
#两个都是复制主机文件到容器中,提供--chown可在复制文件的同时更改文件的所有者和所有组
#相比COPY,ADD还可以处理远程文件 并 自动解压压缩文件, 在<container_path>处可填入url下载远程文件
RUN <command>
#运行命令,若想运行多个命令,可用&&连接
#每个RUN都会创建一个镜像层,每个层中都包含了该层操作所产生的文件系统变化,若有过多镜像层会导致镜像变得臃肿
EXPOSE <port>[/<protocol>=tcp] ...
#暴露指定端口,使其可在创建容器时进行 端口映射, protocol可指定端口对应的协议
ENV <key>=<value> [<key>=<value>...]
#设置环境变量
CMD ["<executable>", "<param1>", ...] 或 CMD <command> <param1> ...
#指定容器启动时要执行的默认命令,如果在docker run命令中指定了其他命令,那么CMD指令中的命令会被覆盖
#第二种形式会在/bin/sh -c下执行
#若有多个CMD, 则只有最后一个会生效
ENTRYPOINT ["<executable>", "<param1>", ...] 或 ENTRYPOINT <command> <param1> ...
#与CMD相似,但不会被docker run命令指定的命令覆盖,而是将docker run命令中的参数作为参数传递给ENTRYPOINT指令中的命令
#ENTRYPOINT主要用于创建可执行的容器镜像,使得容器像一个独立的可执行程序
多阶段构建:允许在一个Dockerfile中使用多个FROM指令,将构建过程分为多个阶段, 并且可以在阶段之间传递文件,从而实现将构建过程和运行过程分离,构建出更精简、更安全的 Docker 镜像
FROM <image>[:<tag>=latest] as <name>
#给该阶段构建设置名字
COPY --from=<name> <name_path>... <this_path>
#可在其它阶段中将该阶段的文件复制过来
docker-compose.yml
#docker-compose是一个用于定义和运行多容器Docker应用程序的工具,适合用于复杂的、由多个容器组成的应用场景
version: "<version>"
services:
<service_name>:
build: <dockerfile_dirpath>
ports:
- "<host_port>:<container_port>"
--终端中--
docker-compose up 启动程序
-d 后台运行
docker-compose down 关闭程序
--volumes 删除所有卷
--rmi 删除镜像(不会删基础镜像)