Docker基础篇
尚硅谷 2022 版 Docker 实战教程官方课程资料:https://pan.baidu.com/s/1AyYbnDRoD-m2xBPvfvjh7Q?pwd=8gfh
提取码:8gfh
一.Docker 简介与安装
Docker 两个主要部件:
- Docker: 开源的容器虚拟化平台:http://www.docker.com
- Docker Hub: 用于分享、管理 Docker 容器的 Docker SaaS 平台 – Docker Hub
Docker 为什么出现?
解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
1. Docker 基本组成
Docker 镜像
Docker 镜像是 Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。相当于容器的“源代码”,docker 镜像文件类似于 Java 的类模板,而 docker 容器实例类似于 java 中 new 出来的实例对象。
Docker 仓库
Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。
Docker 容器
Docker 容器和文件夹很类似,一个 Docker 容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。
2. Docker 的安装
参考官方网站:Install Docker Engine on CentOS | Docker Documentation
以下操作均需要管理员权限,如果不是 root 角色下,需要在每条命令前加 sudo
- 卸载旧版本
1 | yum remove docker \ |
- 安装需要的软件包
1 | yum install -y yum-utils |
- 设置 stable 镜像仓库
这里不能按照官网的操作,因为我们要设置自己的阿里云镜像仓库!!
1 | yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo |
- 更新 yum 软件包索引
1 | yum makecache fast |
- 安装 DOCKER CE
1 | yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin |
- 启动 Docker、查看 docker 版本
1 | systemctl start docker |
- HelloWorld
1 | docker run hello-world |
3. 配置阿里云镜像加速
- 注册一个阿里云账号,进入控制台,选择容器镜像服务
- 直接复制粘贴官方的代码
4.底层原理
为什么 docker 比 VM 虚拟机 快?
- docker 有着比虚拟机更少的抽象层
- 由于 docker 不需要 Hypervisor(虚拟机)实现硬件资源虚拟化,运行在 docker 容器上的程序直接使用的都是实际物理机的硬件资源。因此在 CPU、内存利用率上 docker 将会在效率上有明显优势。
- docker 利用的是宿主机的内核,而不需要加载操作系统 OS 内核
- 当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作系统内核返回等比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载 OS,返回新建过程是分钟级别的。而docker 由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个 docker 容器只需要几秒钟。
二. Docker 常用命令
1. 帮助启动类命令
命令 | 描述 |
---|---|
systemctl start docker | 启动 docker |
systemctl stop docker | 停止 docker |
systemctl restart docker | 重启 docker |
systemctl status docker | 查看 docker 状态 |
systemctl enable docker | 开机启动 |
docker info | 查看 docker 概要信息 |
docker –help | 查看 docker 总体帮助文档 |
docker 具体命令 –help | 查看 docker 命令帮助文档 |
2. 镜像命令
命令 | 描述 | 说明 |
---|---|---|
docker images | 列出本地主机上的镜像 | -a :列出本地所有的镜像 -q :只显示镜像 ID。 |
docker search XXX | 在仓库中搜索某个镜像 | –limit : 只列出 N 个镜像,默认 25 个 |
docker pull XXX:[tag] | 下载某个镜像 | 没有 TAG 就是最新版 |
docker system df | 查看镜像/容器/数据卷所占的空间 | 无 |
docker rmi XXX | 删除某个镜像 (名字/ID) | -f 强制删除 , 可以一次删除多个 |
docker commit -m=”提交的描述信息” -a=”作者” 容器 ID 要创建的目标镜像名:[标签名] | 提交容器副本使之成为一个新的镜像 |
3. 容器命令
有镜像才能创建容器,这是根本前提。
命令 | 描述 | 说明 |
---|---|---|
docker run [OPTIONS] IMAGE [COMMAND] [ARG…] | 新建+启动容器 | –name=”xxx”:为容器指定一个名称; -d: 后台运行容器并返回容器 ID,也即启动守护式容器(后台运行); -i:以交互模式运行容器,通常与 -t 同时使用; -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用; -P: 随机端口映射,大写 P -p: 指定端口映射,小写 p |
docker ps [OPTIONS] | 列出当前所有正在运行的容器 | -a :列出当前所有正在运行的容器+历史上运行过的 -l :显示最近创建的容器。 -n:显示最近 n 个创建的容器。 -q :静默模式,只显示容器编号。 |
exit;ctrl+p+q | 退出容器 | exit 退出,容器停止;ctrl+p+q 退出,容器不停止 |
docker start ID/name | 启动已停止运行的容器 | |
docker restart ID/name | 重启容器 | |
docker stop ID/name | 停止容器 | |
docker kill ID/name | 强制停止容器 | |
docker rm ID | 删除已停止的容器 | |
docker logs ID | 查看容器日志 | |
docker top ID | 查看容器内运行的进程 | |
docker inspect ID | 查看容器内部细节 | |
docker exec -it 容器 ID bashShell docker attach 容器 ID |
进入正在运行的容器并以命令行交互 | attach 直接进入容器启动命令的终端,不会启动新的进程,用 exit 退出,会导致容器的停止。 exec 是在容器中打开新的终端,并且可以启动新的进程用 exit 退出,不会导致容器的停止。(推荐) |
docker cp 容器 ID:容器内路径 目的主机路径 | 从容器内拷贝文件到主机上 | |
docker export 容器 ID > 文件名.tar | 导出容器 | |
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号 | 导入容器 |
三. Docker 容器数据卷
是什么?
类似 Redis 的 rdb 和 aof 文件,类似 Linux 虚拟机和 win 宿主机共享文件夹。将 docker 容器内的数据保存进宿主机的磁盘中,运行一个带有容器卷存储功能的容器实例。
1.宿主和容器间映射添加容器卷
- 通过命令直接挂载
1 | docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名 |
- 查看数据卷是否挂载成功
1 | docker inspect 容器ID |
- 此时在宿主机或容器的对应挂载目录中修改数据都是同步的。
2.读写规则映射添加
读写(默认):re
- docker run -it –privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
只读:ro
- docker run -it –privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名
设置了只读之后,在容器中就无法写入内容了。
此时如果宿主机写入内容,可以同步给容器内,容器可以读取到。
3.卷的继承和共享
- 容器 1 完成和宿主机的映射
- 容器 2 继承容器 1 的卷规则
1 | docker run -it --privileged=true --volumes-from 父类 --name u2 ubuntu |
四.Docker 常规安装简介
总体步骤:
- 搜索镜像
- docker seacher xxx
- 拉取镜像
- docker pull xxx
- 查看镜像
- docker images
- 启动镜像
- 服务端口映射
- docker run -it -p xxxx:xxxx xxx
- 停止容器
- docker stop xxx
- 移除容器
- docker rm xxx(ID)
相关的应用安装参考:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 coderbin!