Docker
一、认识docker
1.1.什么是docker
Docker官网介绍:
Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. With Docker, you can manage your infrastructure in the same ways you manage your applications. By taking advantage of Docker’s methodologies for shipping, testing, and deploying code quickly, you can significantly reduce the delay between writing code and running it in production.
Docker是一个用于开发、发布和运行应用程序的开放平台。Docker能够使您的应用和基础设置分离开来,以便于快速交付软件。通过Docker,可以像管理应用程序一样管理基础设施。通过利用Docker的交付,测试和快速部署的优势,可以有效减少编码和生产中运行之间的延迟。
Docker可以用来做什么?
- 快速,一致性的应用交付
- 响应式部署和扩展
- 同一台硬件上运行更多工作负载
1.2.Docker的架构和概念
Docker使用客户端-服务器架构。Docker客户端与Docker守护进程对话,后者执行构建、运行和分发Docker容器的繁重任务。Docker客户端和守护程序可以在同一系统上运行,或者您可以将Docker客户端连接到远程Docker守护程序。Docker客户端和守护进程使用REST API通过Unix套接字或网络接口进行通信。另一个Docker客户端是Docker Compose,它允许您使用由一组容器组成的应用程序。
- Docker Daemon:Docker守护进程(Dockrtd)监听API请求并管理Docker对象如镜像、容器、网络和卷等。守护进程也可以和其他守护进程通信来管理Docker服务。
- Docker Client:Docker客户端是许多Docker用户与Docker交互的主要方式,当使用如:
docker run命令时,客户端将命令发送给dockerd,由dockerd执行这些命令,Docker命令使用Docker API,Docker客户端可以和多个守护进程通信。 - Docker Desktop:Docker Desktop是一款易于安装的应用程序,适用于您的Mac、Windows或Linux环境,使您能够构建和共享集装箱化的应用程序和微服务。Docker Desktop包括Docker守护进程(Dockerd)、Docker客户端(Docker)、Docker Compose、Docker Content Trust、Kubernetes和Credential Helper。有关详细信息,请参阅Docker Desktop。
- Docker Registries:Docker仓库用来存储Docker镜像,Docker Hub是公共的镜像仓库,是默认的镜像仓库地址,也可以配置自己的私人仓库地址。当使用
docker run或者docker pull命令时,将从配置的仓库地址拉取需要的镜像,当使用docker push命令,镜像将被推送到配置的仓库地址。 - Images:镜像是一个只读模板,包含创建Docker容器的说明。通常一个镜像是基于另一个镜像,使用一些额外的定制特性。例如,你构建一个基于ubuntu镜像的镜像,但是安装了Apache Web服务器和应用程序,以及使应用程序运行的配置。
也可以创建自己的镜像,也可以只使用其他人创建并发布到仓库的镜像。要构建您自己的镜像,您需要创建一个Dockerfile,该文件使用简单的语法来定义创建和运行镜像所需的步骤。Docker文件中的每个指令都会在镜像中创建一个层。当您更改Docker文件并重建镜像时,只会重建那些已更改的层。与其他虚拟化技术相比,这是镜像如此轻便、小巧和快速的部分原因。 - Containers:容器是镜像的可运行实例。您可以使用Docker API或CLI创建、启动、停止、移动或删除容器。您可以将容器连接到一个或多个网络,为其附加存储,甚至可以基于其当前状态创建新的镜像。
默认情况下,容器与其他容器及其主机之间的隔离相对较好。您可以控制容器的网络、存储或其他底层子系统与其他容器或主机的隔离程度。
容器由其镜像以及在创建或启动时提供的任何配置选项来定义。当容器被移除时,对其状态的任何未存储在永久存储中的更改都将消失。
示例:docker run
以下命令运行一个ubuntu容器,交互地连接到本地命令行会话,并运行/bin/bash。
docker run -i -t ubuntu /bin/bash
运行此命令时,将发生以下情况(假设使用默认Docker仓库):
- 如果本地没有
ubuntu镜像,Docker会从默认的仓库拉取,和执行docker pull ubuntu命令效果一样。 - Docker会创建一个新的容器,和执行
docker container create命令效果一样。 - Docker分配给容器一个读写文件系统,作为最后一层。允许运行的容器在其本地文件系统中创建或修改文件和目录。
- Docker创建一个网络接口使容器连接到默认网络,因为没有指定网络选项。包括分配给容器IP地址。默认情况下,容器可以通过宿主机的网络连接到外部网络。
- Docker启动容器并执行
/bin/bash。因为容器以交互的方式运行并连接到终端(-i和-t标识),可以在输出记录到终端的时使用键盘提供输入。 - 当执行
exit终止/bin/bash命令时,容器停止但是并未被移除,可以重新启动或者移除容器。
二、Ubuntu环境下安装Docker
Docker可以在多个平台下载安装使用,Windows、Linux、MacOS下都可以,以下以Linux环境安装。
2.1.Docker环境准备
为了Docker Desktop安装成功,Linux主机需要满足以下配置:
- 支持64位内核和CPU虚拟化
- KVM虚拟化支持。按照KVM虚拟化支持说明检查是否启用了KVM内核模块,以及如何提供对KVM设备的访问
- QMENU版本必须是5.2或者更高,推荐使用最新版本
- 系统初始化系统
- Gnome、KDE或META桌面环境
- 至少4G内存
- 启用在用户命名空间中配置ID映射,请参阅文件共享
2.2.Docker安装先决条件
- 参照2.1。
- 有64位版本的Ubuntu Jammy Jellyfish 22.04(LTS)或Ubuntu Impish Indri 21.10。X86_64(或AMD64)体系结构支持Docker Desktop。
- 非Gnome桌面环境,
gnome-terminal必须已被安装。
# 执行如下命令
sudo apt install gnome-terminal
- 卸载Docker Desktop for Linux的技术预览版或测试版
sudo apt remove docker-desktop
2.3.Docker的推荐安装方法
- 设置Docker的仓库
- 下载最新的DEB包
- 执行如下命令安装Docker
sudo apt-get update
sudo apt-get install ./docker-desktop-<version>-<arch>.deb
安装Docker Engine步骤
-
设置仓库
- 更新
apt程序包索引并安装以下程序,允许apt通过https方式使用仓库
sudo apt-get update sudo apt-get install \ca-certificates \curl \gnupg \lsb-release- 添加Docker官方GPG密钥
sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg- 设置Docker仓库
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null - 更新
-
安装docker engine
- 更新
apt包索引
sudo apt-get update- 安装Docker Engine、Containerd和Docker Compose
# 安装默认版本 sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin ############分割线########## # 或者指定版本 # 查看 apt-cache madison docker-ce | awk '{ print $3 }' # 5:20.10.21~3-0~ubuntu-jammy # 5:20.10.20~3-0~ubuntu-jammy # 5:20.10.19~3-0~ubuntu-jammy # 5:20.10.18~3-0~ubuntu-jammy # 定义版本 VERSION_STRING=5:20.10.20~3-0~ubuntu-jammy sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-compose-plugin- 运行
hello-world镜像验证docker engine是否安装成功
# 该命令下载一个测试镜像并在容器中运行,当容器运行时,打印一条消息并退出 docker run hello-world - 更新
- 如需要卸载docker
- 卸载 Docker Engine, CLI, containerd和Docker Compose包
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin- 镜像、容器和自定义配置等不会自动删除,如需要删除这些,执行以下命令
sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd
三、Docker安装redis示例
3.1.拉取镜像
- 查看可使用镜像
docker search redis
3.2. 拉取镜像,不指定版本默认latest
docker pull redis
# 或者可以指定版本
# docker pull redis:version
3.3. 启动redis容器
docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name redis -v /usr/local/redis/conf/redis.conf:/usr/local/redis/conf/redis.conf -v /usr/local/redis/data:/usr/local/redis/data -d redis redis-server /usr/local/redis/redis.conf --appendonly yes --requirepass 123456
命令说明:
- --log-opt:日志相关
- -p 6379:6379:端口映射,将宿主机的端口和容器映射,外部应用可以通过宿主机端口访问容器中镜像示例
- name redis:容器名称
- -v:挂载文件或目录,前半部分为宿主机路径(绝对路径),后半部分为容器路径
- -d redis:后台启动redis
- redis-server ./usr/local/redis/redis.conf:指定配置文件
- --appendonly yes:开始redis持久化
- --requirepass 123456:设置连接密码
3.4. 查看容器启动状态
# 查看启动状态
docker ps -a
# 进入容器
docker exec -it [容器id] redis-cli
3.5.测试容器
1.通过docker exec进入redis创建key值
2.通过外部连接工具连接redis容器
小结
通过这些基本的操作,对docker有了初步的了解,以此来记录此次学习笔记,也希望能对其他人有所帮助。这里只是记录了docker的一些皮毛,还有更多的docker知识需要学习,再接再厉。