1Docker镜像与容器,目录挂载和卷映射的选择
什么是docker
Docker 是一种工具,可以屏蔽不同底层环境的细节,能把应用和它需要的运行环境打包成镜像,通过容器实现跨环境一致运行,轻量又方便。
docker中比较重要的几个概念:
1:images(镜像)
从仓库下载镜像后,容器就是照着镜像作为模板生成的。镜像本身是静态的 “只读模板”,包含应用运行所需的所有依赖(代码、环境、配置),无法直接修改。
2:Container(容器)
容器相当于镜像的实例,它可以更改内容,并保存成新的镜像
3:Registry(仓库)
镜像都是从仓库下载的,你也可以把镜像上传到仓库
安装docker
1.下载repo文件到本地
wget -O /etc/yum.repos.d/docker.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.安装docker-ce
yum -y install docker-ce
3.启动docker服务并设置开机自启
systemctl start docker
systemctl enable docker
配置镜像加速
1.创建加速配置文件:
vim /etc/docker/daemon.json{"registry-mirrors": ["https://docker.m.daocloud.io","https://1ms.run","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn","https://iju9kaj2.mirror.aliyuncs.com","http://hub-mirror.c.163.com","https://cr.console.aliyun.com","https://hub.docker.com","http://mirrors.ustc.edu.cn"]
}
2.重新加载镜像加速,并重启docker服务
systemctl daemon-reload
systemctl restart docker
docker基本命令
下载镜像
docker pull 镜像名
下载指定版本镜像
docker pull 镜像名:版本号
查看镜像,列出本地主机上已下载的所有 Docker 镜像
docker images删除镜像
docker rmi 镜像名
运行容器,从指定镜像新建一个容器,并立即启动该容器。
docker run 镜像名-d 后台运行
--name 起别名
-p 80:80 端口映射,访问主机80等于访问容器80端口
例:docker run -d --name -p 80:80 nginx001 nginx
启动容器,启动一个已经创建但处于停止状态的容器(不会新建容器)。
docker start 容器id
停止容器
docker stop 容器id
重启容器
docker restart 容器id
删除指定容器
docker rm -f 容器id
查看容器
docker ps列出所有容器(包括正在运行和已停止的)
docker ps -a
进入容器内部,在运行的容器中执行命令,允许交互
docker exec -it 容器名 /bin/bash
docker port 容器名:查看容器的端口映射关系
docker logs 容器名:查看容器的日志输出
保存镜像命令
提交镜像
docker commit [OPTIONS] 容器名 [新镜像名[:标签]]
例:docker commit -m "change index.html" mynginx mynginx:v1.0 --把mynginx这个容器提交成mynginx:v1.0这个镜像,描述信息是更改index
-a
指定镜像作者(如 -a "username <email>"
)。-m
添加镜像描述信息(如 -m "修改了Nginx默认页面"
)。-p
提交时暂停容器运行(避免提交过程中容器状态变化,默认 true
)。
保存镜像
docker save -o 包名.tar 镜像名:标签
把镜像保存成一个压缩包
docker save -o mynginx.tar mynginx:v1.0
把mynginx:v1.0这个镜像保存成mynginx.tar
加载镜像
docker load -i 压缩包.tar
将通过
docker save
导出的镜像 tar 包导入到本地 Docker 环境docker load -i mynginx.tar
导入后会在本地恢复
mynginx:v1.0
镜像,包含完整的标签和历史层。
docker存储
目录挂载
目录挂载的核心是 “打破主机与容器的文件隔离,实现直接互通”
docker run -v /主机目录:/容器目录 镜像名
需指定主机绝对路径
docker run -d --name mynginx -p 80:80 -v /root/app/nghtml:/usr/share/nginx/html mynginx
此命令相当于把主机的/root/app/nghtml目录挂载到容器的/usr/share/nginx/html目录,而这两个目录是双向同步的
卷映射
卷映射使卷创建时就包含指定目录的文件,我认为非常适合用来备份,并且下次启动别的容器时也可以使用此卷
docker run -v 卷名:/容器目录 镜像名
不需要加路径,直接写卷名,所有卷都保存在/var/lib/docker/volumes
docker run -d --name mynginx1 -p 81:80 -v ngconf:/etc/nginx mynginx:v1.0
查看所有卷命令
docker volume ls
目录挂载和卷映射的选择
如果你需要继承容器默认内容(比如不想手动复制 Nginx 默认页面)、或跨环境迁移数据,卷映射确实更省心,避免了 “初始为空” 的麻烦。
但如果你需要实时同步主机文件(比如开发时本地改代码,容器立即生效),目录挂载的 “主机目录优先” 特性反而更实用 —— 初始空目录刚好可以用来放自己的开发文件,覆盖容器默认内容。
这是我的个人学习笔记,主要用于记录自己对知识点的理解和梳理。由于目前仍在学习探索阶段,内容中难免存在理解偏差或表述疏漏,恳请各位大佬不吝赐教,多提宝贵意见~ 若有不同看法,欢迎理性交流探讨,感谢包容与指正!