第01章 初识 Docker 与容器 [略, 无实质内容]
云时代, 注重基于虚拟化技术的集群能力.
1.1 什么是 Docker
1. Docker 开源项目背景
2. Linux 容器技术 -- 巨人的肩膀
3. 从 Linux 容器到 Docker
1.2 为什么要使用 Docker
1. Docker 虚拟化的好处
2. Docker 在开发和运维中的优势
- 快速交付与部署
- 高效的资源利用
- 轻松的扩展与迁移
- 简单的更新管理
3. Docker 与虚拟机比较
1.3 Docker 与虚拟化
1.4 本章小结
第02章 核心概念与安装配置
三大核心概念
- 镜像 Image
- 容器 Container
- 仓库 Repository
2.1 核心概念
围绕三大核心概念展开
1. Docker 镜像
简单的理解为只读模板. 镜像是创建 Docker 容器的基础.
例如, 一个镜像可包含一个基本的操作系统环境, 里面仅安装了 Apache 应用程序. 可称其为一个 Apache 镜像.
通过版本管理和增量的文件系统, Docker 提供了一套十分简单的机制来创建和更新现有镜像.
用户也可以直接下载一个镜像使用.
jk: 可以将镜像简单的理解为 类
2. Docker 容器
类似于一个轻量级的沙箱. Docker 利用容器来运行和隔离应用.
容器是从镜像创建出来的应用运行实例. 它可以 启动, 开始, 停止, 删除.
而且各个容器是互相隔离, 互不可见的.
可以将容器看成简易版的 Linux 系统环境 (只有 Linux 系统和你所需要的软件).
镜像自身是只读的, 容器从镜像启动后, 会在镜像上创建一个可写层.
3. Docker 仓库
即 Docker 集中存放镜像的位置. 类似于 GitHub 或 Npm.
- 官方的是 Docker Hub. 国内也有腾讯云和阿里云.
- 也可以本地创建私有仓库.
利用
push
命令将镜像上传至仓库.使用
pull
命令从仓库拉取镜像.
2.2 安装 Docker 引擎
Docker 引擎是使用 Docker 容器的核心组件. 可支持多 OS 平台.
可在官网查看获取方式以及支持平台. https://docker.com
Docker 引擎有两个版本: 社区版 (Community, CE, 免费), 企业版本 (Enterprise, EE, 收费).
2.2.1 Ubuntu 环境下安装 Docker
1. 系统要求
系统最低 14.04 LTS. 推荐较新的系统.
可使用下面命令查看内核版本:
$ uname -a
# 或者
$ cat /proc/version
若使用 16.04 LTS, 为了让 Docker 使用 aufs 存储, 推荐安装两个软件包:
$ sudo apt-get update $ sudo apt-get install -y \ linux-image-extra-$(uname -r) \ linux-image-extra-virtual
2. 添加镜像源
首先安装 apt-transport-https 等软件包来支持 https 协议的源:
$ sudo apt-get update
$ sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
添加源的 gpg 秘钥
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
确认导入指纹 GPG 公钥
$ sudo apt-key fingerprint 公钥后8位
获取当前 操作系统代号
$ lsb_release -cs
下面添加 Docker 稳定版的官方源
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu 系统代号 stable"
添加成功后再次更新
$ sudo apt-get update
3. 开始安装 Docker
软件包名称为 docker-ce
$ sudo apt-get install -y docker-ce
若系统中含有旧版本会提示删除, 确认即可.
jk: 比较推荐的方式
上述为手动添加软件源的方式安装. 除此之外还可以使用官方提供的脚本来安装
$ sudo curl -sSL https://get.docker.com/ | sh
安装完成后会自动启动 Docker 服务.
还可以指定安装源中的其他版本 (略)
jk:
官方给出的安装步骤: https://docs.docker.com/engine/install/ubuntu/
阿里云的文档: https://developer.aliyun.com/article/110806
Docker官方在推广 Docker Desktop
2022年7月4日
2.2.2 CentOS 环境下安装 Docker [略]
2.2.3 通过脚本安装 [略]
在 2.2.1 结束部分有介绍
2.2.4 macOS 环境下安装 Docker [略]
2.2.5 Windows 下安装 Docker [略]
2.3 配置 Docker 服务
将当前用户加入安装中自动创建的 docker 用户组 (避免每次 sudo)
$ sudo usermod -aG docker 当前用户名
重新登录生效.
Docker 启动实际上调用了 dockerd
命令. 该命令支持多中参数.
例如, 启动 Docker 服务, 开启 Debug 模式, 并监听本地 2376 端口:
$ dockerd -D -H tcp://127.0.0.1:2376
似乎安装好 docker 后就会自动启动.
这些选项可以写入到启动配置文件中: 在 /etc/docker 目录下的 daemon.json 文件中.
{ "debug": true, "hosts": [ "tcp://127.0.0.1:2376" ] }
jk: 问题是还有什么参数???
操作系统也对 Docker 也有封装, Docker 默认配置文件在 /etc/default/docker
可以修改 DOCKER_OPTS
来修改启动参数.
文件默认是空的:
例如, 让 Docker 服务开启网络 2375 端口的监听:
DOCKER_OPTS="$DOCKER_OPTS -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
修改后, 通过 service 命令来重启 Docker 服务
$ sudo service docker restart
CentOS 或 RedHat 通过 systemd 来管理, 配置文件路径为 /etc/systemd/system/docker.service.d/docker.conf
更新后需要使用 systemctl 命令来管理 Docker 服务
$ sudo systemctl daemon-reload $ sudo systemctl start docker.service
如果启动存在问题, 可与查看 docker 日志. 可执行命令
$ journalctl -u docker.service
可以使用命令 docker info
查看 docker 信息.
2.4 推荐实践环境 [略]
2.6 本章小结
第03章 使用 Docker 镜像
Docker 的运行依赖于镜像.
如果本地没有镜像会从默认镜像仓库 (Docker Hub) 中下载. [镜像仓库可配置]
3.1 获取镜像
使用命令 docker [image] pull
命令从 Docker Hub 镜像源下载镜像. 命令格式为:
$ docker [image] pull NAME[:TAG]
NAME
是镜像仓库名 (用于区分镜像)
TAG
是镜像的标签 (常表示版本), 若不指定, 默认为lastest
通常描述一个镜像需要包括 名称 + 标签 信息.
例如, 获取 ubuntu 18.04 系统镜像可以使用下面命令
$ docker pull ubuntu:18.04
latest
一般会随发布新的版本而变化, 稳定性无法保证, 一般不推荐使用.从下载过程可见, 镜像文件一般由若干层 (layer) 组成
在镜像名前还可以跟上仓库路径. 默认为 docker hub, 例如使用网易蜂巢的镜像可以写成:
docker pull hub.c.163.com/public/ubuntu:18.04
pull 的子命令主要有:
$ docker pull --help
Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]
Pull an image or a repository from a registry
Options:
-a, --all-tags Download all tagged images in the repository
--disable-content-trust Skip image verification (default true)
--platform string Set platform if server is multi-platform capable
-q, --quiet Suppress verbose output
如果希望使用镜像代理服务器来加速 Docker, 可以在 Docker 服务启动配置中加上 --registry-mirror
来指定代理. 阿里的加速配置即为如此.
jk@jk-System-Product-Name:~$ cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://iglfr1u0.mirror.aliyuncs.com"]
}
将镜像下载到本地后即可使用镜像.
例如利用镜像创建容器 (好比使用类, 实例化一个对象的逻辑一样), 在其中运行 bash 应用, 执行打印 "Hello World"
$ docker run -it ubuntu:18.04 bash
即可进入这个 ubuntu 系统环境.
jk@jk-System-Product-Name:~$ docker run -it ubuntu:18.04
root@14682e28533c:/# echo "hello world"
hello world
root@14682e28533c:/# exit
exit
3.2 查看镜像信息
主要介绍 docker
的 ls
, tag
和 inspect
子命令.
1. 使用 images
命令列出镜像
使用 docker images
或 docker image ls
命令可以列出本机已有镜像.
jk@jk-System-Product-Name:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 6 months ago 141MB
ubuntu 18.04 5a214d77f5d7 9 months ago 63.1MB
其中 ID
是镜像的唯一标识, 如果有多个镜像, 但 ID
相同仅表示同一个镜像, 只是 Tag
等信息不同.
images
的子命令有
jk@jk-System-Product-Name:~$ docker images --help
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
Options:
-a, --all Show all images (default hides intermediate
images)
--digests Show digests
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet Only show image IDs
2. 使用 tag
命令添加镜像标签
可以使用该名字添加自定义标签, 以便管理
jk@jk-System-Product-Name:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 6 months ago 141MB
ubuntu 18.04 5a214d77f5d7 9 months ago 63.1MB
jk@jk-System-Product-Name:~$ docker tag nginx:latest nginxserver
jk@jk-System-Product-Name:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 6 months ago 141MB
nginxserver latest 605c77e624dd 6 months ago 141MB
ubuntu 18.04 5a214d77f5d7 9 months ago 63.1MB
其中 nginx
和 nginxserver
的 ID
是相同的, 表示同一个镜像.
3. 使用 inspect
命令查看详细信息
例如:
$ docker inspect ubuntu:18.04
4. 使用 history
命令查看镜像历史
例如:
$ docker history ubuntu:18.04
3.3 搜寻镜像
命令 docker search [option] 关键字
可以在 Docker Hub 官方仓库中搜寻镜像.
jk@jk-System-Product-Name:~$ docker search --help
Usage: docker search [OPTIONS] TERM
Search the Docker Hub for images
Options:
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print search using a Go template
--limit int Max number of search results (default 25)
--no-trunc Don't truncate output
3.4 删除和清理镜像
主要介绍 rm
和 prune
子命令.
1. 使用标签删除镜像
使用 docker rmi
或 docker image rm
命令可以删除镜像. 后可以跟标签或 ID
.
jk@jk-System-Product-Name:~$ docker rmi --help
Usage: docker rmi [OPTIONS] IMAGE [IMAGE...]
Remove one or more images
Options:
-f, --force Force removal of the image
--no-prune Do not delete untagged parents
jk@jk-System-Product-Name:~$ docker image rm --help
Usage: docker image rm [OPTIONS] IMAGE [IMAGE...]
Remove one or more images
Aliases:
rm, rmi, remove
Options:
-f, --force Force removal of the image
--no-prune Do not delete untagged parents
注意, 同一个镜像有多个
Tag
的时候, 若使用Tag
来删除, 仅会删除对应Tag
.
2. 使用镜像 ID
来删除镜像
当镜像创建的容器存在时, 镜像文件是无法被删除的.
可以使用 docker ps -a
查看本机上存在的所有容器.
不是说容器在运行无法删除, 容器存在就无法删除.
可以强制删除 (带上
-f
选项), 但不建议.一般操作是先用
rm
删除容器, 再删除镜像.
3. 清理镜像
清除遗留的镜像或未使用的镜像
$ docker image prune
jk@jk-System-Product-Name:~$ docker image prune --help
Usage: docker image prune [OPTIONS]
Remove unused images
Options:
-a, --all Remove all unused images, not just dangling ones
--filter filter Provide filter values (e.g. 'until=<timestamp>')
-f, --force Do not prompt for confirmation
3.5 创建镜像 [暂略]
创建镜像有三种方法:
- 基于已有镜像的容器创建
- 基于本地模板创建
- 基于
Dockerfile
创建
1. 基于已有容器创建
命令格式为: docker [container] commit [OPTIONS] CONTAINER [REPOSTORY[:TAG]]