官网地址:www.docker.com
docker hub仓库地址:hub.docker.com
安装文档连接:docs.docker.com/engine/inst…
docker run 干了些什么?
docker为什么比vm虚拟机快?
1、docker有着比虚拟机更少的抽象层
由于docker不需要hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在cpu、内存使用率上docker将会在效率上有明显优势。
2、docker用的是宿主机的内核,而不需要加载操作系统OS内核
当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作系统内核返回等比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程是分钟级别的,而docker直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟。
帮助启动类命令
启动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 列出本地主机上的镜像;
表头解释:
REPOSITORY:镜像的仓库源仓库。
TAG:镜像的标签。
IMAGE ID:镜像ID。
CREATED:镜像创建时间。
SIZE:镜像大小。
同一个仓库源可以有多个TAG版本,代表这个仓库源的不同个版本,我们使用REPOSITORY:TAG来定义不同的镜像。
如果你不指定一个镜像的版本标签,例如你只使用ubuntu,docker将默认使用ubuntu:latest镜像。
OPTIONS解释:
-a:列出本地所有的镜像(含历史映像层)。
-q:只显示镜像ID
docker search
docker search 镜像名: 在远程仓库搜索某一个镜像,由于我们设置了阿里云镜像加速器,所以是从阿里云上搜的,而不是从docker hub上搜的。
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 查看镜像/容器/数据卷所占的空间
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
容器命令
在自己电脑上装一个虚拟机,装上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
列出所有当前正在运行的容器
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 截取容器停止时的状态值