一. docker的安装
- 先安装gcc以及gcc-c++环境
yum -y install gcc
yum -y install gcc-c++
- 安装需要的软件包
yum install -y yum-utils
- 设置stable镜像仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 更新yum软件包索引
yum makecache fast
- 安装DOCKER CE
yum -y install docker-ce docker-ce-cli containerd.io
- 启动docker
systemctl start docker
- 检查docker的版本
docker version
- 停止docker
systemctl stop docker
- 重启docker
systemctl restart docker
- 查看docer的状态
systemctl status docker
- 设置开机启动docker
systemctl enable docker
- 查看docker的概要信息
docker info
- 查看docker的帮助文档
docker --help
- 查看docker的命令帮助文档
docker 具体命令 --help
二. docker的卸载
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
三. 为什么docker比虚拟机快
(1)docker有着比虚拟机更少的抽象层
由于docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
(2)docker利用的是宿主机的内核,而不需要加载操作系统OS内核
当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作系统内核返回等比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟。
四. docker常用命令
一. 镜像命令
查询本地docker镜像
- 列出本地主机的镜像,参数说明,-a:列出本地所有的镜像,-q:只显示镜像id,各个选项说明:
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签版本号
- IMAGE ID:镜像
- IDCREATED:镜像创建时间
- SIZE:镜像大小
- 同一仓库源可以有多个 TAG版本,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest镜像
docker images
查询远程某个镜像
- 网站 hub.docker.com
- 命令
docker search [OPTIONS] 镜像名字
- 参数说明,--limit : 只列出N个镜像,默认25个,如:docker search --limit 5 redis
拉取某个镜像
- 下载镜像
docker pull 镜像名字[:TAG]
- 没有tag就拉取最新版本的镜像
查看镜像/容器/数据卷所占的空间
docker system df 查看镜像/容器/数据卷所占的空间
删除镜像
docker rmi 某个XXX镜像名字ID
- 删除单个镜像
docker rmi -f 镜像ID
- 删除多个镜像
docker rmi -f 镜像名1:TAG 镜像名2:TAG
- 删除全部,慎用
docker rmi -f $(docker images -qa)
二. 容器命令
- 有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)
新建+启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run -it centos /bin/bash
参数说明
- --name="容器新名字"为容器指定一个名称;
- -d: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行);
- -i:以交互模式运行容器,通常与 -t 同时使用;
- -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;也即启动交互式容器(前台有伪终端,等待交互);
- -P: 随机端口映射,大写P
- -p: 指定端口映射,小写p
列出当前所有正在运行的容器
docker ps [OPTIONS]
参数说明:
- -a: 列出当前所有正在运行的容器+历史上运行过的
- -l: 显示最近创建的容器。
- -n:显示最近n个创建的容器。
- -q: 静默模式,只显示容器编号。
退出容器
- exit,run进去容器,exit退出,容器停止
- ctrl+p+q,run进去容器,ctrl+p+q退出,容器不停止
启动已停止运行的容器
docker start 容器ID或者容器名
重启容器
docker restart 容器ID或者容器名
停止容器
docker stop 容器ID或者容器名
强制停止容器
docker kill 容器ID或容器名
删除已停止的容器
- 删除单个
docker rm 容器ID
- 一次性删除多个
docker rm -f $(docker ps -a -q) 或者
docker ps -a -q | xargs docker rm
从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
导入和导出容器
- export 导出容器的内容留作为一个tar归档文件 [对应import命令]
- import 从tar包中的内容创建一个新的文件系统再导入为镜像 [对应export]
docker export 容器ID > 文件名.tar
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
三. 案例
拉去并启动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 attach 容器ID
- 区别
- attach 直接进入容器启动命令的终端,不会启动新的进程。用exit退出,会导致容器的停止。
- exec 是在容器中打开新的终端,并且可以启动新的进程。用exit退出,不会导致容器的停止。
- 进去redis客户端操作,一般使用-d后台启动程序,再使用exec进入容器实例
docker exec -it 容器ID /bin/bash
docker exec -it 容器ID redis-cli