Docker常用命令
帮助命令
docker version # Docker版本
docker info # Docker系统信息
docker 命令 --help # 命令帮助
帮助文档:https://docs.docker.com/reference/
镜像和容器的区别
Docker的生命周期由三部分组成:image + container + repository,镜像 + 容器 + 仓库。
我们可以将Docker镜像看做一个轻量级的系统,不同于VMware中的镜像,Docker镜像内部是一个精简的操作系统(OS),同时还包含应用运行所必须的文件和依赖包。例如,我们下载一个在VMware中可以使用的CentOS镜像可能大小会超过2G,而在下载一个用于Docker的CentOS镜像可能只需要200M(甚至有部分Linux发行版镜像大小只有约100M)。
概括的说,Docker镜像是一个只读的Docker容器模板,含有启动Docker容器所需的文件系统结构及其内容。
而镜像和容器之间的关系可以比作类和实例之间的关系,镜像是一种构建时(build-time)结构,而容器是一种运行时(run-time)结构。
仓库则是存储镜像的地方,默认使用Docker Hub(官方仓库,此外也还有第三方仓库),我们通过仓库将所需镜像下载到本地。
镜像命令
-
docker images:查看本地Docker上的所有镜像
[root@Tuzki01 ~]# docker images --help # 查看该命令的帮助 Usage: docker images [OPTIONS] [REPOSITORY[:TAG]] List images Options: # 显示所有镜像(常用) -a, --all Show all images (default hides intermediate images) # 显示镜像的签名信息 --digests Show digests # 过滤输出结果 -f, --filter filter Filter output based on conditions provided # 格式化字符串 --format string Pretty-print images using a Go template # 显示无删减的输出结果 --no-trunc Don't truncate output # 仅显示镜像ID(常用) -q, --quiet Only show image IDs # 有Linux基础的人应该知道,命令选项是可以结合使用的,如docker images -aq就是常用的一个命令 [root@Tuzki01 ~]# docker images # 显示所有镜像,这里只有刚下载好的hello-world镜像 REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest feb5d9fea6a5 6 days ago 13.3kB # REPOSITORY: 镜像的仓库源 # TAG: 镜像的标签 # IMAGE ID: 镜像ID # CREATED: 镜像创建时间 # SIZE: 镜像大小
-
docker search:在仓库上搜索镜像,相当于在https://hub.docker.com/上面进行搜索
[root@Tuzki01 ~]# docker search --help Usage: docker search [OPTIONS] TERM Search the Docker Hub for images Options: # 过滤输出结果 -f, --filter filter Filter output based on conditions provided # 格式化字符串 --format string Pretty-print search using a Go template # 限制搜索结果个数 --limit int Max number of search results (default 25) # 显示无删减的输出结果 --no-trunc Don't truncate output # 这里以MySQL为例,输出STARS数高于1000的结果 [root@Tuzki01 ~]# docker search -f stars=1000 mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 11490 [OK] mariadb MariaDB Server is a high performing open sou… 4357 [OK]
-
docker pull:下载镜像,可指定tag版本(需要docker支持该版本的下载),默认下载最新版
# docker pull 镜像名[:tag] [root@Tuzki01 ~]# docker pull mysql # 不加tag,默认下载最新版本 Using default tag: latest latest: Pulling from library/mysql # 分层下载,docker image的核心,联合文件系统 # 当mysql更新时,这些分层的镜像部分可以复用,无需全部重新下载,只需下载无法复用的镜像 07aded7c29c6: Pull complete f68b8cbd22de: Pull complete 30c1754a28c4: Pull complete 1b7cb4d6fe05: Pull complete 79a41dc56b9a: Pull complete 00a75e3842fb: Pull complete b36a6919c217: Pull complete 635b0b84d686: Pull complete 6d24c7242d02: Pull complete 5be6c5edf16f: Pull complete cb35eac1242c: Pull complete a573d4e1c407: Pull complete Digest: sha256:4fcf5df6c46c80db19675a5c067e737c1bc8b0e78e94e816a778ae2c6577213d Status: Downloaded newer image for mysql:latest docker.io/library/mysql:latest # 真实下载地址(下载时拉取的是这里的资源)
-
docker rmi:删除镜像
[root@Tuzki01 ~]# docker rmi --help # IMAGE可以使用镜像名[:tag](如mysql:5.7)删除,也可以通过ID删除,可以指定多个镜像 Usage: docker rmi [OPTIONS] IMAGE [IMAGE...] Remove one or more images Options: # 强制删除镜像 -f, --force Force removal of the image # 不删除 --no-prune Do not delete untagged parents # 删除所有镜像:docker rmi -f $(docker images -a)
容器命令
有镜像才能创建容器,这里使用centos镜像来进行学习:
docker pull centos
-
新建容器并启动
docker run [option] image # 常用参数 --name="Name" 按照容器名启动 -d 后台运行 -it 以交互方式运行 -p 指定日期端口 -p ip:主机端口:容器端口 -p 主机端口:容器端口(常用) -p 容器端口 容器端口 -P 随机端口 # 测试 docker run -it centos /bin/bash # 使用centos下的bash命令模式进行交互 exit # 停止容器并退出 ctrl + p + q # 不停止容器退出
-
docker ps:查看所有正在运行容器
-a:列出当前 + 历史运行的容器 -n=x:列出最近x个运行的容器 -q:仅显示容器ID
-
docker rm:删除容器
-f:强制删除容器(可以删除正在运行的容器) 删除所有容器命令: docker rm -f $(docker ps -a) docker ps -aq|xargs docker rm
-
启动/停止容器:
docker start 容器 # 启动容器 docker restart 容器 # 重启容器 docker stop 容器 # 停止容器 docker kill 容器 # 强制停止容器
其他常用命令
-
后台启动容器
docker run -d centos # 可能遇到的一个坑:运行之后可能会发现centos停止了,这是因为Docker容器在运行时,必须有一个前台应用没有前台进程,否则Docker发现自己没有提供服务,将自动退出 # 解决方案: 1. docker run -td centos,-t选项将为容器重新分配一个伪输入终端 2. docker run -it centos,之后ctrl + p + q退出容器
-
查看指定容器的日志:docker logs 容器ID
-t:带上时间戳 -f:格式化显示 --tail:指定显示条数
-
查看容器中进程信息:docker top 容器ID
-
查看镜像元数据:docker inspect 容器ID
-
进入当前正在运行的容器
# 开启一个指定容器的指定shell终端(常用) docker exec -it 容器ID /bin/bash # 进入指定容器正在执行的终端 docker attach 容器ID
-
从容器内拷贝文件到主机中
docker cp 容器ID:容器内路径 当前主机路径