01、docker基础指令
docker的安转可以采用yum和二进制方式安装,在此不再赘述
docker镜像和容器
系统的安装盘就叫镜像,常见的Ghost技术做的GHO系统镜像和Docker镜像非常像。
Docker镜像是分层的
Docker镜像拉取下来,可以直接运行,运行后的东西就叫做容器,一个镜像可以启动很多容器。
容器就是镜像启动后的状态,在Linux系统中就是一个进程,但容器是可以进入的,就像进入了一个虚拟机里
1)配置加速器
编写 /etc/docker/daemon.json
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]
}
EOF
重启docker服务
systemctl restart docker
检查是否生效
docker info |grep -A 3 'Registry Mirrors'
2)拉取镜像
docker pull busybox
## 这个busybox就是系统镜像名字,是从hub.docker.com拉取镜像
3)查看当前系统镜像
docker image ls
## 或者
docker images
4)搜索镜像
docker search ubuntu
## 如果需要查询镜像版本,访问官网 https://hub.docker.com
## 搜索对应的镜像名字,然后点tag进入查看
拉取指定版本的镜像
docker pull nginx:1.23.2
5)给镜像打标签
docker tag busybox:latest aminglinux:1.2.3
6)启动容器
docker run -it busybox
## 把镜像启动为容器,-i表示让容器的标准输入打开
## -t 表示分配一个伪终端
## -d 表示后台启动
## 要把 -i -t -d 放到镜像名字前面
7)查看容器
docker ps -a
## 如果不加 -a ,则不显示已经停止的容器
8)停止容器
docker stop 容器Id
## 容器Id,通过 docker ps 来获取
10)删除容器
docker rm 容器Id
## 如果容器未停止,会报错,则需要加 -f
10)删除镜像
docker rmi aminglinux:1.2.3
## 这里因为aminglinux:1.2.3 为 busybox 的一个tag,所以此操作只会删除此tag
## 并不会真正删除镜像
## 如果该镜像没有tag,则直接删除镜像
也可以直接指定镜像Id进行删除
docker rmi 镜像id
11)拉取镜像+启动容器
docker run -itd redis
12)启动容器时,给容器自定义名字
docker run --name web01 -itd ubuntu
13)容器运行后直接退出并删除
docker run --rm -it ubuntu bash -c "sleep 30"
14)进入容器操作
docker exec -it web01 bash
进去后,相当于进入了一个虚拟机,可以安装其他软件,比如nginx
apt update
apt install -y nginx
15)将容器重新打包成新镜像
docker commit -m "install nginx" -a "aming" web01 nginx_ubuntu:1.0
## 这里的web01可以改为容器Id
在此查看镜像列表,发现多了一个nginx_ubuntu:1.0
16)将镜像保存为一个文件
docker save nginx -o nginx.img
17)将导出的镜像文件导入
docker load -i nginx.img
## 或者
docker load --input nginx.img
18)将容器导出为一个文件
docker export web01 > web01.tar
19)将导出的文件导入为新的镜像
docker import - ubuntu_test < web01.tar
20)docker save 和 docker export 的差异
docker save 保存的是镜像,docker export 保存的是容器
docker save 会保留镜像所有的历史纪录,docker export不会,即没有commit历史
docker load 用来载入镜像包,docker import 用来载入容器包,但两者都会恢复为镜像
docker load 不能对载入的镜像重命名,而docker import 可以为镜像指定新名词
Docker的数据持久化
1.本地目录映射到容器里
mkdir -p /data/
docker run -tid -v /data/:/data ubuntu bash
# -v 用来指定挂载目录
# :前面的/data/为宿主机的本地目录
# :后面的/data/为容器里的目录,会在容器中自动创建
在宿主机本地目录中创建一个文件
echo "hello" > /data/1.txt
再进入容器中查看
docker exec -it 容器Id或者容器名 bash -c "cat /data/1.txt"
2.数据卷
创建数据卷
docker volume create testvol
## testvol 为数据卷的名字
列出数据卷
docker volume ls
查看数据卷信息
docker volume inspect testvol
使用数据卷
docker run -itd --name aming01 -v testvol:/data/ ubuntu
## 与之前的直接映射本地目录不同,:左边为数据卷的名字
多容器共享一个数据卷
docker run -itd --name aming02 -v testvol:data/ ubuntu
3.将宿主机的文件传输进容器里
docker cp /etc/fstab aming01:/tmp/test.txt
docker exec -it aming01 cat /tmp/test.txt
docker网络
Docker服务启动时会生成一个docker0网卡,这个网卡是实现容器网络通信的根本
默认容器使用的网络类型为桥接(bridge)模式,这个桥接和VMware中的桥接不一样
更类似于VMware中的NAT模式
每启动一个容器,都会产生一个虚拟网卡 vethxxx
查看docker容器网络相关规则
iptables -nvL -t nat
## 可以看到docker相关规则,容器可以联网,就是靠这些规则实现的
1.host模式
docker run -itd --net=host --name aming03 ubuntu
可以进入容器内,查看hostname 查看IP地址
这种模式容器和宿主机共享主机名、IP
2.container模式
改模式下,启动容器时,需要指定目标容器Id或者name,意思是将要启动的容器使用和目标容器一样的网络,即IP一样
docker run -itd --net=container:/aming01 --name aming04 ubuntu
可以进入容器查看aming01和aming04的网络情况
3.none模式
即不需要配置网络
docker run -itd --net=none --name=aming05 ubuntu_test bash
查看
docker exec -it aming05 bash -c "ip add"
4.birdge模式
也就是默认模式,可以--net=bridge 也可以不指定--net,默认就是bridge
5.端口映射
docker run -itd -v /data/:/var/www/html/ -p 8088:80 --name aming06 ubuntu_test
-p 宿主机监听端口:容器监听端口
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现