服务与架构
由于一般都是用 sudo 安装的 docker,所以使用 docker 的时候也需要用管理员权限运行命令,一般开发 / 测试 / 个人服务器环境下推荐将非 root 用户添加进 docker 组里面,这样就不用重复输入 sudo 提升权限了。将非 root 用户添加进 docker 组按照这个流程:
-
把用户加入 docker 组
-
重新登录
-
重启 Docker
-
再试一下命令
但是在生产环境中不建议这样使用,因为 docker 组的权限几乎等价于「能以 root 权限运行容器」。攻击者只要拿到这个用户的 shell,就可以通过 docker run -v /:/host ... 等方式逃逸到宿主机,读写任意文件,甚至提权为 root。
镜像§
Docker 镜像包含了运行应用所需的所有文件、库和配置,但它是只读的。基于镜像就能快速创建容器实例,实现「一次打包,到处运行」。
-
查看本地镜像
-
在 docker hub 上搜索镜像
-
拉取镜像
-
拉取指定版本的镜像
-
删除镜像
容器§
容器是「镜像的运行实例」,是一个轻量级、可移植的执行环境。它共享主机内核,但文件系统、网络和进程空间完全隔离,轻便高效(秒级启动),无需完整虚拟机。
-
创建并持续在后台运行的名为 con1 的
ubuntu22.04 容器 -
创建并持续运行名为 con2 的
ubuntu22.04 容器并进入终端 -
列出所有包括已停止的容器
-
停止运行容器
- 容器名、容器ID 都可以
-
删除容器
- 容器名、容器ID都可以
-
进入容器的交互式终端
- 容器名、容器ID都可以, 但是后面要接一个命令
数据卷§
数据卷相当于共享目录,可以允许多个容器同时读写。并且当容器销毁时,数据卷数据不受影响。
当数据卷过多时可以创建数据卷容器集中管理数据卷,但它不是中间层跳板。其他容器只是通过继承数据卷容器的挂载点从而指向宿主机目录,所以数据卷容器删除后,其他容器依旧可正常访问数据卷。
-
列出所有数据卷
-
创建运行容器并将数据卷挂载到容器目录
-
创建运行数据卷容器
-
将数据卷容器挂载到当前容器