什么是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] 容器名 [新镜像名[:标签]]

-a指定镜像作者(如 -a "username <email>")。
-m添加镜像描述信息(如 -m "修改了Nginx默认页面")。
-p提交时暂停容器运行(避免提交过程中容器状态变化,默认 true)。
例:docker commit -m "change index.html" mynginx mynginx:v1.0   --把mynginx这个容器提交成mynginx:v1.0这个镜像,描述信息是更改index

保存镜像

 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

手动创建卷

docker volume create 卷名

删除卷

docker volume rm 卷名

目录挂载和卷映射的选择

如果你需要继承容器默认内容(比如不想手动复制 Nginx 默认页面)、或跨环境迁移数据,卷映射确实更省心,避免了 “初始为空” 的麻烦。

但如果你需要实时同步主机文件(比如开发时本地改代码,容器立即生效),目录挂载的 “主机目录优先” 特性反而更实用 —— 初始空目录刚好可以用来放自己的开发文件,覆盖容器默认内容。

这是我的个人学习笔记,主要用于记录自己对知识点的理解和梳理。由于目前仍在学习探索阶段,内容中难免存在理解偏差或表述疏漏,恳请各位大佬不吝赐教,多提宝贵意见~ 若有不同看法,欢迎理性交流探讨,感谢包容与指正!

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐