docker常用命令

138 阅读6分钟

官网地址:www.docker.com
docker hub仓库地址:hub.docker.com
安装文档连接:docs.docker.com/engine/inst…

docker run 干了些什么?

image.png

docker为什么比vm虚拟机快?

1、docker有着比虚拟机更少的抽象层
由于docker不需要hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在cpu、内存使用率上docker将会在效率上有明显优势。
2、docker用的是宿主机的内核,而不需要加载操作系统OS内核
当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作系统内核返回等比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程是分钟级别的,而docker直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟。

image.png

帮助启动类命令

启动docker:systemctl start docker
停止docker:systemctl stop docker
重启docker:systemctl restart docker
查看docker状态:systemctl status docker
开机启动:systemctl enable docker
查看docker概要信息:docker info
查看docker总体帮助文档:docker --help
查看docker命令帮助文档:docker 具体命令 --help

镜像命令

docker images

docker images 列出本地主机上的镜像;

image.png

表头解释:
REPOSITORY:镜像的仓库源仓库。
TAG:镜像的标签。
IMAGE ID:镜像ID。
CREATED:镜像创建时间。
SIZE:镜像大小。
同一个仓库源可以有多个TAG版本,代表这个仓库源的不同个版本,我们使用REPOSITORY:TAG来定义不同的镜像。
如果你不指定一个镜像的版本标签,例如你只使用ubuntu,docker将默认使用ubuntu:latest镜像。
OPTIONS解释:
-a:列出本地所有的镜像(含历史映像层)。
-q:只显示镜像ID

docker search

docker search 镜像名: 在远程仓库搜索某一个镜像,由于我们设置了阿里云镜像加速器,所以是从阿里云上搜的,而不是从docker hub上搜的。

image.png

image.png OPTIONS说明:
--limit: 只列出N个镜像,默认25个。
例如:docker search --limit 5 redis

docker pull

docker pull 某个镜像名字(下载镜像)
docker pull 镜像名[:TAG]
docker pull 镜像名字   等价于  docker pull 镜像名:latest
docker pull hello-world 下载(拉)hello-world镜像
docker pull ubuntu 拉ubuntu镜像

docker system df

有点类似linux的df -h命令,查看空间占用情况

docker system df 查看镜像/容器/数据卷所占的空间

image.png

docker rmi

docker rmi 镜像ID/名字   删除镜像
docker rmi -f hello-world 强制删除hello-world镜像 (-f 强制)
docker rmi -f 镜像名1:TAG 镜像名2:TAG   删除多个镜像
docker rmi -f $(docker images -qa)  删除全部(docker也支持命令续传)

什么是虚悬镜像:

仓库名和标签都是<none>的镜像,俗称虚悬镜像dangling image

image.png

容器命令

image.png
在自己电脑上装一个虚拟机,装上centos7提供linux环境,在linux环境安装上docker,在docker内用ubuntu来演示容器。

docker run

新建+启动容器

docker run [OPTIONS] IMAGE [COMMAND][ARG...]

OPTIONS说明:有些是一个减号,有些是两个减号

--name="容器新名字":为容器指定一个名称;如果run的时候不指定容器名字,会用系统随机分配的名字。
-d:后台启动容器并返回容器ID,也即启动守护式容器(后台运行)

-i:以交互式模式运行容器,通常与-t同时使用;
-t:为容器重新分配一个伪输入终端,通常与-i同时使用;
也即启动交互式容器(前台有伪终端,等待交互);不带参数启动容器时,没有命令输入窗口,需要加上-t参数,另外启动容器时,我们想进一步对容器进行操作,需要启动成交互式容器,需加上-i参数。

-P:随机端口映射,大写P;
-p:指定端口映射,小写p;

例如:使用镜像ubuntu:latest以交互式启动一个容器,在容器内执行/bin/bash命令。相当于跑到集装箱内开始干活了。

docker run -it ubuntu /bin/bash 用ubuntu启动一个交互式容器,命令行用/bin/bash
docker run -it --name=myu1 ubuntu bash 用ubuntu启动一个交互式容器,指定容器名称为myu1,命令行用bash

参数说明:

-i:交互式操作
-t:终端
ubuntu:ubuntu镜像
/bin/bash:放在镜像名后的是命令,这里我们需要一个交互式Shell,因此用的是/bin/bash。有了Shell,就可以随意执行合法的linux系统命令了。
要退出终端,直接输入exit

docker ps

列出所有当前正在运行的容器

image.png

docker ps 显示当前运行的容器
docker ps -a 显示当前运行+历史运行过的容器
docker ps -l 显示最近创建的容器
docker ps -n  2  显示最近创建的2个容器
docker ps -q 只显示当前运行的容器id

OPTIONS说明:

-a:列出当前正在运行的容器+历史上运行过的
-l:显示最近创建的容器
-n:显示最近n个创建的容器
-q:静默模式,只显示容器编号

退出容器

exit: run 进去容器,exit退出,容器停止
ctrl+p+q: run 进去容器,crtl+p+q退出,容器不停止

启动已经停止运行的容器

docker start 容器ID或容器名

重启容器

docker restart 容器ID或容器名

停止容器

docker stop 容器ID或容器名

强制停止容器

docker kill 容器ID或容器名

删除已停止的容器

容器有保护机制,在运行的容器不能删除,需要先停止容器再删除,或者强制删除

docker rm 容器ID或容器名称
docker rm -f 容器ID或名称 (强制删除,不需要停止容器就可以删除)
一次性删除多个容器实例
docker rm -f $(docker ps -a -q)
或
docker ps -a -q | xargs docker rm

启动守护式容器(后台服务器)

在大部分的情况下,我们希望docker的服务是在后台运行的。我们可以通过-d指定容器的后台运行模式。
docker容器后台运行必须有一个前台进程,容器运行的命令如果不是一直挂起的命令,后台运行就会自动退出。这是docker的一个机制,换句话说,后台运行程序发现没有前台进程交互,就会自动退出。

docker run -d 容器 名|ID
用redis演示
前台交互式启动
docker run -it redis:6.0.8
后台守护式启动
docker run -d redis:6.0.8

查看容器日志

docker logs 容器名|ID

查看容器内运行的进程

docker top 容器名|ID

查看容器内部细节

docker inspect 容器名|ID

进入正在运行的容器并以命令式交互

第一种方式
docker exec -it 容器名|ID bashShell
例如:docker exec -it 容器ID /bin/bash  前台交互式重新进入
      dokcer exec -d 容器ID  /bin/bash  后台形式重新进入
第二种方式
docker attach 容器ID|名
两种方式的区别:
attach:直接进入容器启动命令的终端,不会启动新的进程,用exit退出,会导致容器停止。
exec:是在容器中打开新的终端,并且可以启动新的进程,用exit退出,不会导致容器的停止。
推荐使用第一种方式exec,避免exit退出时,意外导致容器停止。
一般用-d启动后台守护进程,再用exec进去干活。
用redis容器试试:
docker exec -it redis的id /bin/bash
redis-cli -p 6379
ping
set k1 v1
get k1

从容器内拷贝文件到主机上

主要用来备份文件

docker cp 容器ID:容器内路径 目的主机路径
例如:
docker cp 8fc04adf5ddb:/tmp/a.txt /tmp/c.txt   把8fc04adf5ddb实例中/tmp文件夹下的a.txt 拷贝到 主机/tmp目录下,命名为c.txt
通常用这种方式来备份容器实例内的重要文件,即使容器实例被删除,也可以保留住重要文件

导入和导出容器

这种可以直接把容器备份

export导出容器的内容留作为一个tar归档文件[对应import命令]
import从tar包中的内容创建一个新的文件系统再导入为镜像[对应export命令]

案例:
docker export 容器ID > 文件名.tar
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号

例如 
把容器8fc04adf5ddb,导出到/tmp下,命名为myu.tar
docker export 8fc04adf5ddb > /tmp/myu.tar 

把刚才导出的镜像导入(atguigu是镜像用户,随便写;ubuntu为镜像名称;3.7为镜像版本号,随便写)
cat /tmp/myu.tar | docker import - atguigu/ubuntu:3.7  

然后用docker images可以查到有 atguigu:ubuntu的镜像

小总结

attach 当前shell下attach连接指定运行镜像
build 通过dockerfile定制镜像
commit 提交当前容器为新的镜像
cp 从容器中拷贝指定文件或目录到宿主机中
create 创建一个新的容器,同run,但不启动容器
diff 查看docker容器变化
events 从docker服务获取容器实时事件
exec 在已存在的容器上运行命令
export 导出容器的内容 留作为一个tar归档文件[对应import命令]
history 展示一个镜像形成历史
images 列出系统当前镜像
import 从tar包的内容创建一个新的文件系统映射[对应export]
info 显示系统相关信息
inspect 查看容器详细信息
kill  kill指定docker容器
load 从一个tar包中加载一个容器[对应save]
login 注册或者登陆一个docker源服务器
logout 从当前docker registry退出
logs 输出当前容器日志信息
port 查看映射端口对应的容器内部源端口
pause 暂停容器
ps 列出运行的容器列表
pull 从docker源镜像服务器拉取指定镜像或者库镜像
push 推送指定镜像或者库镜像到docker源服务器
restart 重启运行的容器
rm 移除一个或者多个容器
rmi 移除一个或多个镜像[无容器使用该命令才可删除,否则需要删除相关容器才可继续,或-f强制删除]
run 创建一个新的容器并运行一个命令
save 保存一个镜像为一个tar包[对应load]
search 在docker hub中搜索镜像
start 启动容器
stop 停止容器
tag 给源中镜像打标签
top 查看容器中运行的进程信息
unpause 取消暂停容器
version 查看dokcer版本号
wait 截取容器停止时的状态值