Docker 入门教程
参考2小时搞定Docker 全程干货 基于CentOS7,感谢刘老师通俗易懂的教程
环境配置
只介绍基于 Debian 12 和 CentOS 7 的操作方法
Debian 12
Docker 从仓库安装的官方教程,结合 USTC 镜像的使用帮助,总结出以下方法
安装 apt 工具
1
2sudo apt update
sudo apt install ca-certificates curl gnupg添加 GPG key:
1
2
3sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg添加 USTC 源
1
2
3
4echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.ustc.edu.cn/docker-ce/linux/debian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null安装 Docker CE
1
2sudo apt-get update
sudo apt-get install docker-ce为 Docker 添加 sudo 权限
1
2
3
4
5sudo groupadd docker ## 添加 docker 用户组
sudo gpasswd -a $USER docker ## 将登陆用户加入到 docker 用户组中
newgrp docker ## 更新用户组
sudo service docker restart ## 重启 docker
docker ps ## 测试 docker 命令是否需要 sudo
CentOS 7
安装 CentOS 7 时选择基础设施服务器即可,不需要 GUI
安装 yum 工具
1
yum install -y yum-utils device-mapper-persistent-data lvm2 --skip-broken
替换阿里云镜像源,对于 CentOS 7,使用以下命令替换默认配置
1
2
3yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast安装 Docker CE
1
yum install -y docker-ce
Docker 使用中会涉及到各种端口,为了方便练手可以关闭防火墙,如果你的 Linux 在公网上,请跳过这一步
1
2
3
4## 关闭防火墙
systemctl stop firewalld
## 禁止开机启动防火墙
systemctl disable firewalld查看 docker 版本
1
docker -v
配置 Docker Hub 源
这里使用阿里云的镜像,可以注册或者支付宝等阿里系应用扫码登录,如果有别的选择请跳过,找到这段代码,直接在终端中运行即可
1 |
|
启动 Docker
1 |
|
查看容器日志
1 |
|
基础知识
操作基础
通俗地说,镜像(image)是静态的环境,容器是镜像运行后的环境
访问 DockerHub 搜索镜像,https://hub.docker.com/,搜索 redis
拉取镜像
1
docker pull redis
查看本地镜像
1
docker images
将镜像导出到磁盘
1
2
3
4
5## docker save -o 文件名称 镜像名称/ID
docker save -o redis.tar redis
## 使用 --help 可以查看命令提示,例如查看 save 的提示
docker save --help删除本地镜像
1
2## docker rmi 镜像名称/ID,通过 ID 可以删除指定镜像
docker rmi redis:latest导入镜像
1
2## docker load -i 文件名称
docker load -i redis.tar
容器操作
-
docker run
新建并启动容器 -
docker start/stop/pause/unpause
启动/停止/暂停/恢复容器 -
docker exec -it
进入容器执行命令 -
docker logs
查看容器运行日志 -
docker ps
查看运行中容器的状态 -
docker rm
删除指定容器
Nginx 容器示例
拉取 nginx 镜像
创建并启动容器
1
2
3
4## --name:指定容器名称(任意指定)
## -p:宿主机端口:容器端口 将宿主机端口与容器端口映射(宿主机端口任意,容器端口一般固定)
## -d:后台运行容器
docker run --name mynginx -d -p 80:80 nginx查看容器
1
2
3
4## 当前运行的容器
docker ps
## 所有容器
docker ps -a访问宿主机的 IP:端口
Redis 容器示例
拉取 redis 镜像
创建并启动容器
1
docker run --name myredis -d -p 6379:6379 redis
进入容器
1
2
3## -it: 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
## bash:进入容器后执行的命令
docker exec -it myredis bash进入容器后
1
2## 使用 redis 客户端操作 redis
redis-cli以上命令可以合并为一条执行
docker exec -it myredis redis-cli
数据卷
- 一个容器运行了一段时间,肯定会产生一些数据,比如日志、数据库数据、新
改的配置文件等等,如果这些数据文件存放在容器中,当我们删除容器时,这
些数据也会被随之删除 - 在 docker 中,提供了一种存储数据的方法,叫做“数据卷”,可以达到数据共
享的目的 - 其实就是映射目录
基本概念
可以把“数据卷”Data Volumes 理解成“宿主机中的目录”,当把某个卷和
容器中的某个目录建立映射关系后,就相当于把宿主机中的某个目录和容器中的某
个目录建立了映射关系
- 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效与方便
- 对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作
- 对数据卷的更新不会影响镜像,解耦应用和数据
- 卷会一直存在,直到没有容器使用,可以安全地卸载它
- 由命令创建的卷存在宿主机
/var/lib/docker/volumes
数据卷的操作
基本命令
数据卷(volume)操作的基本语法 docker volume [COMMAND]
create
创建一个 volume
inspect
显示一个或多个 volume 的信息
ls
列出所有的 volume
prune
删除未使用的 volume
rm
删除一个或多个指定的 volume
示例
创建数据卷:
docker volume create testA
查看数据卷:
docker volume ls
查看对应卷的详细信息:
docker volume inspect testA
1
2
3
4
5
6
7
8
9
10
11[
{
"CreatedAt": "2023-07-24T18:19:11+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/testA/_data",
"Name": "testA",
"Options": null,
"Scope": "local"
}
]在 linux 的 docker 主机中创建一个卷时,其在宿主机对应的目录(挂载点)路径
为/var/lib/docker/volumes/卷名/_data
挂载卷
在创建容器时,可以通过
--volume
或-v
(数据卷:容器内目录)参数挂载一个数据卷到某个容器目录1
2
3## 创建一个名为testAcon的容器,将testA卷映射到容器的/data目录中
## 如果卷映射的目录在容器中不存在时,会自动在容器中创建对应的目录
docker run --name testAcon -v testA:/data -d redis一个容器可以使用多个卷,只需要多次使用-v 选项指定即可
1
2
3## 当指定的卷不存在时,docker 会自动创建对应的卷
## 命令中的 testB 数据卷会被自动创建
docker run --name testBcon -v testA:/data -v testB:/var/log -d redis
在使用数据卷相关的命令时,可以直接使用新的卷名和路径,对于不存在的项目,docker 会自动创建
绑定挂载(自定义宿主机目录)
通常,使用绑定挂载就是为了将宿主机中的配置文件挂载到容器中,如果是整
个目录的数据,建议使用卷,卷只能映射目录,不能映射文件
前面创建的数据卷都存放在
/var/lib/docker/volumes
目录中,这个目录是固定
的,它们都能被docker volume
命令管理docker 还有一种映射宿主机目录的方法,称之为“绑定挂载”,绑定
挂载能够将指定的宿主机目录挂载到容器中,只需要将卷名替换成宿主机上的目
录路径即可1
2## 将宿主机的 /root/test1 目录映射到容器的 /data1 目录中
docker run -d --name testAcon -v /root/test1:/data1 redis官方建议使用卷,而不是绑定挂载,但是绑定挂载可以直接将宿主机中的文件(非目录)直接挂载到容器中,比如
1
2## 将宿主机中的 /etc/localtime 文件映射到容器中的 /etc/localtime 文件
docker run -d --name testAcon -v /etc/localtime:/etc/localtime alpine绑定挂载不会生成任何卷,它直接将指定的宿主机目录映射到容器中,所以
docker volume
命令无法查看或管理到绑定挂载的路径