Ubuntu安装Docker
先简单介绍一下Docker:
Docker是一个开放源代码的开放平台软件,用于开发应用、交付应用和运行应用。Docker允许用户将基础设施中的应用单独分割出来,形成更小的颗粒,从而提高交付软件的速度。 Docker容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、更能高效地利用服务器。
Docker有几个重要概念:
- 镜像(Image):镜像是容器运行所需的只读模板,包含应用及其所有依赖(库、配置、环境)。镜像通常是分层构建的。
- 容器(Container):容器是一个运行时实例,它是由镜像(Image)创建的。每个容器是相互隔离的,拥有自己的文件系统、网络、进程空间等。
- Dockerfile:Dockerfile 是用于构建镜像的脚本文件,包含了一系列指令(如 FROM、RUN、COPY、CMD 等),用来描述如何构建镜像。
- Docker Engine:Docker 引擎是运行在主机上的守护进程,它负责构建镜像、运行容器、管理网络和存储等。
- Docker Hub:一个公共的镜像仓库,类似于 GitHub,你可以从中拉取官方或社区发布的镜像,也可以上传自己的镜像。
1.操作系统要求
要安装 Docker Engine,需要以下 Ubuntu 版本之一的 64 位版本:
- Ubuntu Oracular 24.10
- Ubuntu Noble 24.04(LTS)
- Ubuntu Jammy 22.04(LTS)
- Ubuntu Focal 20.04(LTS)
Ubuntu 的 Docker Engine 与 x86_64(或 amd64)、armhf、arm64、s390x 和 ppc64le(ppc64el)架构兼容。
其他版本的Ubuntu安装Docker不受官方支持,但是依然可能有效,可以试一试。
关于Ubuntu虚拟机的从零开始安装,可以参考之前的文章(从零开始配置虚拟机环境),不过其中使用的是Ubuntu16,可以换成22。
2.卸载旧版本
在安装 Docker Engine 之前需要卸载所有冲突的软件包。
Linux 发行版可能提供了非官方的 Docker 软件包,这些软件包可能与 Docker 官方提供的软件包冲突。所以必须在安装 Docker Engine 正式版之前卸载这些软件包。
要卸载的非官方软件包是:
docker.io
docker-compose
docker-compose-v2
docker-doc
podman-docker
此外,Docker Engine 依赖于containerd
和runc
。Docker Engine 将这些依赖项捆绑为一个捆绑包:containerd.io
。如果之前安装了containerd
或runc
,请卸载它们以避免与 Docker Engine 捆绑的版本冲突。
运行以下命令卸载所有冲突的软件包:
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
3.安装Docker
步骤1. 更新系统 & 安装依赖:
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
步骤2. 创建 Docker keyrings 目录
sudo mkdir -p /etc/apt/keyrings
步骤3. 下载并导入GPG公钥(阿里云镜像)
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
步骤4. 添加阿里云镜像源(使用 jammy)
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
步骤5. 更新 APT 缓存
sudo apt update
步骤6. 安装 Docker 及其组件
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
步骤7. 允许当前用户不使用 sudo 运行 docker
sudo usermod -aG docker $USER
newgrp docker # 当前终端生效(或注销重新登录)
步骤8. 验证安装(不报错即是安装成功)
docker version
docker run hello-world
4.启动和校验
1.启动Docker
systemctl start docker
2.停止Docker
systemctl stop docker
3.重启
systemctl restart docker
4.设置开机自启
systemctl enable docker
5.执行docker ps命令,如果不报错,说明安装启动成功
docker ps
5.配置镜像加速
Docker 默认从 Docker Hub(registry-1.docker.io)拉取镜像,这是一个国外的服务器,速度慢且镜像较大时下载容易失败,所以我们会配置镜像加速。
1.配置加速地址:
vim /etc/docker/daemon.json
可能是一个新文件,这没有问题
2.添加以下内容(先摁键盘的i
下面变成INSERT就可以输入,输入完成后先摁ESC
再输入 :wq
保存并退出):
{
"registry-mirrors": [
"https://docker.211678.top",
"https://docker.1panel.live",
"https://hub.rat.dev",
"https://docker.m.daocloud.io",
"https://do.nark.eu.org",
"https://dockerpull.com",
"https://dockerproxy.cn",
"https://docker.awsl9527.cn"
]
}
3.重启docker:
systemctl daemon-reload
systemctl restart docker
4.验证是否生效:
docker info
输出最后应包含:
Registry Mirrors:
https://docker.211678.top/
https://docker.1panel.live/
https://hub.rat.dev/
https://docker.m.daocloud.io/
https://do.nark.eu.org/
https://dockerpull.com/
https://dockerproxy.cn/
https://docker.awsl9527.cn/
Live Restore Enabled: false
6.以MySQL为例试验
我们尝试用Docker来安装一个MySQL软件。
我们直接安装最新版的MySQL,在命令行中输入以下命令:
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql
安装完成后的界面大概如下:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
使用 docker ps
可以查看容器的状态。
我直接使用IDEA来测试对于这个MySQL的连接,状态如下:
如果提示我们不知道MySQL的版本,可以使用下面的语句查看:
docker exec -it mysql mysql -uroot -p123456 -e "SELECT VERSION();"
也可以在Mysql后面指定特定版本,需要修改Docker 刚开始运行的语句:
docker run -d \
--name mysql57 \
-p 3307:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7
7.Docker常用命令
7.1 镜像相关(Image)
命令 | 说明 |
---|---|
docker pull 镜像名[:标签] | 拉取镜像,如:docker pull mysql:8.0 |
docker images | 查看本地镜像 |
docker rmi 镜像ID或名称 | 删除镜像 |
docker rmi -f 镜像ID | 强制删除镜像 |
docker image prune | 删除未使用的悬挂镜像 |
docker image prune -a | 删除所有未使用的镜像 |
7.2 容器相关(Container)
命令 | 说明 |
---|---|
docker run 镜像 | 启动一个新容器(默认前台) |
docker run -d 镜像 | 后台运行容器 |
docker run -it 镜像 /bin/bash | 进入容器交互式终端 |
docker ps | 查看运行中的容器 |
docker ps -a | 查看所有容器(包括已停止) |
docker stop 容器名/ID | 停止容器 |
docker start 容器名/ID | 启动已停止容器 |
docker restart 容器名/ID | 重启容器 |
docker rm 容器名/ID | 删除容器 |
docker rm -f 容器名/ID | 强制删除正在运行的容器 |
docker container prune | 删除所有已停止的容器 |
7.3 容器内部操作
命令 | 说明 |
---|---|
docker exec -it 容器名 bash | 进入容器终端(推荐) |
docker attach 容器名 | 附加到容器(按 Ctrl+P+Q 退出) |
docker logs 容器名 | 查看容器日志 |
docker top 容器名 | 查看容器内运行的进程 |
docker inspect 容器名 | 查看容器详细信息 |
docker cp 容器ID:路径 本地路径 | 从容器拷贝文件到主机 |
docker cp 本地路径 容器ID:路径 | 从主机拷贝文件到容器 |
7.4 镜像构建(Dockerfile)
命令 | 说明 |
---|---|
docker build -t 镜像名:标签 . | 使用 Dockerfile 构建镜像 |
docker tag 镜像ID 新名称:标签 | 给镜像打标签 |
docker save 镜像 > 文件.tar | 导出镜像为文件 |
docker load < 文件.tar | 从文件导入镜像 |
7.5 网络相关
命令 | 说明 |
---|---|
docker network ls | 查看所有网络 |
docker network inspect 网络名 | 查看网络详情 |
docker network create 自定义网络 | 创建用户自定义网络 |
docker network connect 网络 容器 | 将容器连接到网络 |
docker network disconnect 网络 容器 | 将容器从网络断开 |
7.6 数据卷(Volume)
数据卷是 Docker 提供的一种机制,用于在容器之间共享数据或将数据持久化到宿主机上。
命令 | 说明 |
---|---|
docker volume create 卷名 | 创建数据卷 |
docker volume ls | 查看所有数据卷 |
docker volume inspect 卷名 | 查看卷详细信息 |
docker volume rm 卷名 | 删除卷 |
docker volume prune | 清理无用数据卷 |
7.7 系统清理与信息
命令 | 说明 |
---|---|
docker system df | 查看 Docker 使用的空间 |
docker system prune | 清理所有未使用的资源(镜像、容器、网络) |
docker info | 查看 Docker 系统信息 |
docker version | 查看 Docker 版本 |
7.8 快捷清理命令(危险)
命令 | 说明 |
---|---|
docker rm -f $(docker ps -aq) | 删除所有容器 |
docker rmi -f $(docker images -q) | 删除所有镜像 |
docker volume rm $(docker volume ls -q) | 删除所有数据卷 |
ocker version` | 查看 Docker 版本 |
7.8 快捷清理命令(危险)
命令 | 说明 |
---|---|
docker rm -f $(docker ps -aq) | 删除所有容器 |
docker rmi -f $(docker images -q) | 删除所有镜像 |
docker volume rm $(docker volume ls -q) | 删除所有数据卷 |