docker安装及常见命令
1. docker基础知识
1.1 什么是docker
docker就是一项容器虚拟化的技术.
容器虚拟化技术:简单而言,就是把开发环境和代码一起打包做成一个容器,放在其他电脑上就可以直接运行。类似于虚拟机,把环境配好,就可以直接运行了,但是容器虚拟化和虚拟机还是有很大区别。
1.2 docker能做什么
一次构建,随处运行。
更快捷的应用交付和部署;更便捷的升级和扩缩容;更加简单的系统运维;更高效的计算机资源利用。
它解决了虚拟机存在的资源占用多,冗余步骤多和启动慢的特点,剔除掉虚拟机中模拟的硬件以及不必要的的东西都剔除了。保留了必要的内核和用户自己根据需要安装的容器,所以更加轻便。
1.3 docker三要素
镜像(image):docker镜像,image,就是一个只读的模板,镜像可以用来创建docker容器,一个镜像可以创建多个容器。
容器(container): docker利用容器独立运行的一个或者一组应用。容器就是镜像创建的具体实例,可以把容器看成是一个简易版的linux系统
仓库:就是存放镜像的地方
1.4 安装docker
docker要求cent os 系统的内核要高于3.10.
本次安装选择在cent os7上进行安装。
# 查看linux版本
uname -r
3.10.0-1160.el7.x86_64
卸载旧版本(如果之前安装过旧版本)
yum remove docker docker-common docker-selinux docker-engine
添加yum依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
设置yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
安装docker
yum install docker-ce
启动并加入开机自启
# 启动
systemctl start docker
# 允许开机自启
systemctl enable docker
验证是否安装成功
docker version
Client: Docker Engine - Community
Version: 20.10.10
API version: 1.41
Go version: go1.16.9
Git commit: b485636
Built: Mon Oct 25 07:44:50 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.10
API version: 1.41 (minimum version 1.12)
Go version: go1.16.9
Git commit: e2f740d
Built: Mon Oct 25 07:43:13 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.11
GitCommit: 5b46e404f6b9f661a205e28d59c982d3634148f8
runc:
Version: 1.0.2
GitCommit: v1.0.2-0-g52b36a2
docker-init:
Version: 0.19.0
GitCommit: de40ad0
⚠️ 国外镜像一般很难访问,建议配置阿里云镜像
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1.5 阿里云镜像加速配置
阿里云镜像加速地址: https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
进入后里面有配置加速器信息
vi /etc/docker/daemon.json
验证配置阿里云镜像加速器成功
docker info后显示Registry Mirrors中显示有阿里云
2. docker 镜像命令
2.1 查看本地镜像
[root@javatools ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
options | 含义 |
---|---|
-a | 列出本地所有的镜像,包含中间镜像 |
-q | 只显示镜像id |
--digests | 显示镜像的摘要信息 |
--no-trunc | 显示完整的镜像信息 |
2.2 查找镜像
[root@javatools ~]# docker search hello-world
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
hello-world Hello World! (an example of minimal Dockeriz… 1575 [OK]
参数 | 说明 | 举例 |
---|---|---|
--no-trunc | 显示出完整的镜像描述 | docker search hello-world --no-trunc |
--filter | 过滤 | docker search --filter=stars=30 --no-trunc hello-world |
2.3 拉取镜像
# 如果不输入:tag, 其实默认是:latest
docker pull image_name: tag
2.4 删除某个镜像
docker rmi 某个镜像名字ID
⚠️ -f 强制删除
命令 | 说明 |
---|---|
docker rmi -f 镜像id | 删除一个 |
docker rmi -f 镜像1:TAG 镜像2:TAG2 | 删除多个 |
docker rmi -f $(docker images -qa) | 删除全部 |
3. docker 容器命令
有镜像才能创建容器。本次下载一个cent os 镜像。 docker pull cent os
3.1 新建并启动容器
docker run [options] image [command][args]
参数说明 | 含义 |
---|---|
-name | 容器新名字,为容器指定一个名字 |
-d | 以后台运行容器,并返回容器id |
-i | 以交互式模式运行容器,通常与-t同时使用 |
-t | 为容器重新分配一个伪输入终端,通常与-i 同时使用 |
-P | 随机端口映射 |
-p | 指定端口映射 |
比如: docker run -it centos:latest /bin/bash 后面的 /bin/bash 写不写, 都是一样的。启动成功后,终端左边会显示容器的ID
![image-20211117105433255](https://img2020.cnblogs.com/blog/1483664/202111/1483664-20211117114917883-250891480.png)
docker run --name="centos7" -it centos 启动一个容器名为centos7
3.2 列出所有正在运行的容器
docker ps [OPTIONS]
参数说明 | 含义 |
---|---|
-a | 列出当前所有正在运行的容器+历史运行过的 |
-l | 显示最近创建的容器 |
-n | 显示最近n个创建的容器 |
-q | 静默模式,只显示容器编号 |
--no-trunc | 不截断输出 |
docker ps -a
3.3 退出容器
- exit: 容器停止退出
- ctrl+p+q: 容器不停止退出
3.4 启动容器
docker start 容器id或容器名
3.5 重启容器
docker restart 容器id或容器名
3.6 停止容器
docker stop 容器id或容器名
3.7 强制停止容器
docker kill 容器id或容器名
3.8 删除已停止的容器
docker rm 容器id
一次性删除所有容器
docker rm -f $(docker ps -a -q)
3.9 启动守护式容器
docker run -d 容器名
docker容器后台运行,就必须要有一个前台进程,容器运行的命令如果不是那些一直挂起的命令(top、tail), 就会自动退出。这是由于docker的机制问题。
3.10 查看容器日志
docker logs -f -t --tail 容器id
参数 | 说明 |
---|---|
-t | 加入时间戳 |
-f | 跟随最新的日志打印 |
--tail | --tail 数字 显示最后多少条 |
3.11 查看容器内部运行的进程
docker top 容器id
3.12 查看容器内部细节
docker inspect 容器id
3.13 进入正在运行的容器并以命令行交互
- docker exec -it 容器ID bashShell
- docker attach 容器ID
区别
attach 直接进入容器启动命令的终端,不会启动新的进程
exec 是在容器中打开新的终端,并且可以启动新的进程
3.14 文件拷贝
docker cp 容器ID:容器内路径 目的主机路径
4. docker卸载
# 停止服务
systemctl stop docker
# 移除docker
yum -y remove docker-ce
# 删除相关依赖包
rm -rf /var/lib/docker
5. 安装过程排错
- 报错1错误:软件包:docker-ce-rootless-extras-20.10.12-3.el7.x86_64 (docker-ce-stable)需要:slirp4netns >= 0.4
错误:软件包:docker-ce-rootless-extras-20.10.12-3.el7.x86_64 (docker-ce-stable)需要:fuse-overlayfs >= 0.7
错误:软件包:3:docker-ce-20.10.12-3.el7.x86_64 (docker-ce-stable)需要:container-selinux >= 2:2.74
错误:软件包:containerd.io-1.4.13-3.1.el7.x86_64 (docker-ce-stable)需要:container-selinux >= 2:2.74,您可以尝试添加 --skip-broken 选项来解决该问题。
根据报错提示信息,可以看出是container-selinux版本低或没有安装的原因,导致系统不兼容,所以需要升级重新安装。
# 从阿里源拉取依赖
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install epel-release -y
# 安装最新的contain-selinu
yum install container-selinux -y
再次执行docker安装命令yum install docker-ce -y
,安装成功。