docker镜像,容器,挂载卷

文章目录

镜像

什么叫镜像?

Docker镜像是一个特殊的文件系统(分层的联合文件系统),除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等信息)。

什么叫分层的文件系统呢?

例如我们去dockerhub上搜索centos,我这里安装的是centos8的版本,所以去看看8下面都有啥吧;

标红的地方点进去,我们看下它的dockerfile(dockerfile是指构建docker镜像的指令脚本)


可以看到centos8的dockerfile很简单,from是说明它基于什么构建的,可以看到centos8是基于scratch这个空镜像来构建的;add 添加一个centos的压缩包;LABEL是标签说明,CMD是运行完此镜像后默认执行的指令,可以看到启动centos8镜像后,它指定进入了bash脚本界面;

官方说明:scratch镜像是一个空的镜像,可以用于构建busybox等超小镜像,可以说是真正的从零开始构建属于自己的镜像

注📢:macos系统其实也采用了分层的文件系统,去dockerhub搜Ubantu也可以看到它对应的镜像;或者你在升级你的mac系统时,如果点开详情,或者看它的更新包,可以看到它的更新包中包含了基于上次安装的数据卷(volumes);

docker镜像常用相关命令:

docker image ls # 列出当前宿主机上所有镜像
docker image ls ubuntu:16.04 # 列出指定的镜像
docker pull hello-world #拉取镜像
docker run hello-world #运行镜像
docker rmi hello-world #删除镜像
docker run -i -t --rm ubuntu:16.04 /bin/bash
#-i:允许你对容器内的标准输入进行交互
#-t:在新容器内指定一个伪终端或终端
#–rm:容器退出后立即删除容器。一般情况下,无需指定此参数。一般我测试用的话可以加上,容器停止后立即删除容器
# ubuntu:16.04:以此镜像为基础启动容器
# /bin/bash:指定的交互式Shell
docker inspect 578c3e61a98c #查看指定镜像id 镜像的详情
docker image rm 578c3e61a98c # docker删除指定镜像Id镜像
docker image rm $(docker image ls -q) #删除所有镜像
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms64m -Xmx512m" elasticsearch:7.7.1 # 后台运行名称为elasticsearch的镜像,并指定端口映射;将9300映射到9200的宿主机端口上,-e指定单机运行模式,-e指定运行的java环境配置 容器名称为elasticsearch:7.7.1

容器

docker的镜像启动后就是一个容器了,之前我们安装docker时,运行了HelloWorld的测试程序镜像,那么它启动后就是一个容器实例(就是我们运行的服务);

我们看下protainerUi容器的详情:

[
    {
   
   
        # 发现镜像Id580c0e4e98b06d 是容器id的前缀
        "Id": "sha256:580c0e4e98b06d258754cf28c55f21a6fa0dc386e6fe0bf67e453c3642de9b8b",
        # 用的是最新的版本
        "RepoTags": [
            
<think>嗯,用户想了解如何在Docker中创建容器挂载数据。首先,我需要回忆Docker的基本命令,特别是docker run的用法。记得数据挂载有两种方式:具名挂载和匿名挂载,还有直接挂载主机目录。 用户可能需要具体的示例,所以得举几个例子。比如,挂载主机目录到容器,使用-v参数。比如docker run -v /宿主机路径:/容器路径。这时候要确保路径正确,特别是Windows和Linux的路径差异可能需要说明。 然后,具名挂载的例子,使用具名,比如创建一个名为my_volume的,然后挂载容器里。这时候可能要用到docker volume create命令,不过其实docker run的时候如果不存在会自动创建,所以可能不需要手动创建。需要提到docker volume inspect来查看的详细信息,这样用户知道如何检查挂载情况。 匿名挂载的话,只需要指定容器内的路径,宿主机路径由Docker自动生成,但可能不太方便管理,所以通常推荐具名挂载。不过还是应该提到,让用户了解区别。 另外,数据容器也是一个概念,可以通过--volumes-from来共享。比如创建一个数据容器,然后其他容器挂载它的。这个可能在多个容器需要共享数据时有用,比如备份或者多个服务访问同一数据。 用户可能还关心如何验证挂载是否成功,可以在容器内创建文件,然后在宿主机查看是否存在,或者用docker inspect命令查看挂载点。 还要注意权限问题,有时候容器内的用户可能没有写权限,导致挂载的目录不可写,这时候可能需要设置权限或者使用特权模式,但这里可能不需要深入,除非用户提问。 安全问题方面,挂载主机目录可能会有风险,特别是挂载系统目录,需要提醒用户注意。 可能还需要提到数据的作用,比如持久化数据,避免容器删除后数据丢失,这样用户理解为什么需要挂载数据。 最后,给出具体的命令示例,分步骤说明,这样用户可以直接复制粘贴使用。同时,引用中的docker volume inspect和docker run命令需要对应上,确保示例准确。</think>### Docker 容器创建与数据挂载教程 #### 1. **基础命令格式** Docker 创建容器挂载数据的核心命令为: ```bash docker run -v [宿主机路径|名]:[容器路径] [其他参数] [镜像名] ``` 通过 `-v` 参数实现目录挂载,支持三种形式: - **主机目录挂载**:直接绑定宿主机目录 - **具名挂载**:使用预定义的数据名称 - **匿名挂载**:自动生成随机名 --- #### 2. **操作示例** **场景1:主机目录挂载** ```bash docker run -d --name nginx-web \ -v /home/user/nginx/html:/usr/share/nginx/html \ -p 80:80 \ nginx ``` - **验证挂载**: ```bash # 宿主机创建文件 touch /home/user/nginx/html/test.txt # 进入容器检查 docker exec nginx-web ls /usr/share/nginx/html ``` **场景2:具名挂载** ```bash # 创建数据(可省略,Docker会自动创建) docker volume create app-data # 启动容器 docker run -d --name mysql-db \ -v app-data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:8.0 ``` - **查看信息**: ```bash docker volume inspect app-data ``` 输出显示挂载点路径(如 `/var/lib/docker/volumes/app-data/_data`)[^1] **场景3:匿名挂载** ```bash docker run -d --name temp-storage \ -v /app/config \ alpine ``` - **查看匿名**: ```bash docker volume ls ``` --- #### 3. **数据容器共享** ```bash # 创建数据容器 docker create --name volume-container \ -v /shared-data \ busybox # 其他容器共享数据 docker run -d --name app1 \ --volumes-from volume-container \ nginx docker run -d --name app2 \ --volumes-from volume-container \ nginx ``` --- #### 4. **关键注意事项** 1. **路径规范**: - Windows 路径使用 `//C/Users` 格式 - 容器内路径需为绝对路径 2. **权限控制**: - 添加 `:ro` 限制容器只读(如 `-v data:/app:ro`) 3. **数据持久化**: - 容器删除后,具名/匿名会保留,需手动清理: ```bash docker volume rm [名] docker volume prune # 清理未使用 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值