零、Docker基本概念
1. 什么是Docker
Docker
是容器引擎,可以对进程进行封装隔离,属于操作系统层面的虚拟化技术。
2. Docker中的概念
2.1 镜像
镜像(Image
)是一个轻量级、独立、可执行的软件包,其中包含运行应用程序所需的一切:代码、运行时、系统工具、系统库和设置。可以用来创建Docker
容器,一个镜像可以创建多个容器。
Docker镜像 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含 任何动态数据,其内容在构建之后也不会被改变。
2.2 容器
容器(Container
)是一个标准的软件单元,它打包了代码及其所有依赖项,因此应用程序可以从一个计算环境快速可靠地运行到另一个计算环境。是使用镜像创建的运行实例,可以被启动、开始、停止、删除,每个容器都是相互隔离的、保证安全的平台。
容器与镜像的关系类似于面向对象编程中的对象与类,使用镜像创建容器。
2.3 仓库
仓库(Repository
)是集中存放镜像文件的场所。仓库分为公开仓库和私有仓库两种形式,最大的公开仓库是 DockerHub,存放了数量庞大的镜像供用户下载,国内的公开仓库有阿里云、网易云等。
一、安装与卸载
1. CentOS上的安装
1.1 卸载旧版本
旧版本的Docker叫做
docker
或docker-engine
,卸载掉旧版本及其相关依赖,新版本叫做docker-ce
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
1.2 安装新版本
可以选择以下几种方式进行安装:
- 建立仓库(镜像源),使用
yum
进行安装,使用这种方式可以很方便地安装和更新- 下载RPM包手动安装与更新,适用于没有网络连接的设备
- 使用脚本进行安装
1.2.1 配置镜像源
# 安装 yum-utils包
sudo yum install -y yum-utils
# 配置仓库
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1.2.2 安装最新版本docker
sudo yum install docker-ce docker-ce-cli containerd.io
1.2.3 启动docker
sudo systemctl start docker # 启动docker
sudo systemctl enable docker # 设置开机自启
1.2.4 验证是否安装成功
# 这条命令会下载一个test image(测试镜像)并在容器中运行,运行时,会打印一条消息并退出
sudo docker run hello-world
1.2.5 配置镜像加速
国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。由于镜像服务可能出现宕机,建议同时配置多个镜像。
vim /etc/docker/daemon.json # 编辑配置文件,文件内容如下:
// json中的内容,配置了多个镜像服务,其中腾讯镜像服务仅适用于腾讯云上的docker
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
# 重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
docker info # 查看镜像是否配置成功
省略...
Registry Mirrors:
https://mirror.ccs.tencentyun.com/
https://hub-mirror.c.163.com/
https://mirror.baidubce.com/
省略...
1.2.6 更新
按照安装流程,选择新版本即可
1.3 卸载
1.3.1 卸载docker及依赖包
sudo yum remove docker-ce docker-ce-cli containerd.io
1.3.2 卸载image、containers及自定义配置文件
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
二、基础实战
可以通过
docker COMMAND --help
命令查看对应命令的具体用法,例子如下:[root@VM-4-6-centos ~] 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
1. 镜像指令
1.1 下载镜像
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
docker pull redis # 下载最新版
docker pull redis:6.2.4 # 下载指定版本
1.2 查看镜像
docker images [OPTIONS] [REPOSITORY[:TAG]]
docker images # 查看镜像(默认隐藏中间图像)
docker images -a # 查看所有镜像
1.3 删除镜像
docker rmi [OPTIONS] IMAGE [IMAGE...] # IMAGE 可以是 镜像短ID、镜像长ID、镜像名 或者 镜像摘要
docker rmi redis:6.2.4 # 根据镜像名删除镜像
一个镜像可以对应多个标签,当我们删除了所指定的标签后,可能还有别的标签指向了这个镜像,如果是这种情况,那么Delete
行为就不会发生。所以并非所有的 docker image rm
都会产生删除镜像的行为,有可能仅仅是取消了某个标签而已。
当该镜像所有的标签都被取消了,该镜像很可能会失去了存在的意义,此时会触发Delete
行为。
2. 容器指令
2.1 启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# 常用的options:
--name=myname # 设置名字
-d # 指定后台运行
--restart=always # 设置开机自启
-p 88:80 # 端口映射
-v /some/content:/usr/share/nginx/html:ro # 主机目录与docker容器目录建立映射关系,ro表示容器中只读
2.2 查看容器
docker ps [OPTIONS]
docker ps # 查看正在运行中的容器
docker ps -a # 查看所有的容器
2.3 停止/重启容器
docker stop [OPTIONS] CONTAINER [CONTAINER...] # CONTAINER 可以是 容器ID 和 容器名称
docker restart [OPTIONS] CONTAINER [CONTAINER...]
2.4 删除容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]
# 常用的options:
-f # 强制删除
2.5 更新容器配置
docker update [OPTIONS] CONTAINER [CONTAINER...]
docker update CONTAINER --restart=always # 更新容器状态为开机自启
2.6 进入容器
docker exec [OPTIONS] CONTAINER COMMAND [ARG...] # 进入到正在运行的容器中
# 常用的options:
-i
-t # 二者通常联合使用 -it
docker exec -it a5c5448767e2 /bin/bash # 进入容器内部的系统,修改容器内容
2.7 提交改变
将自己修改好的容器提交,以后可以直接使用这个修改过的版本
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
# 常用的options:
-a # 修改者的名字
-m # 修改了的信息
docker commit -a "leifengyang" -m "首页变化" 341d81f7504f guignginx:v1.0
3. 其他指令
3.1 查看日志
docker logs [OPTIONS] CONTAINER
3.2 复制内容
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- # 把容器中指定位置的东西复制到主机中
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH # b