- 简介

| client即是本机安装的docker,相当于git |
| Docker_host相当于centos系统 |
| registry则是docker仓库,相当于GitHub |
| 镜像用于创建docker容器,一个镜像可以创建多个docker容器 |
| 容器是由镜像创建的运行实例,(镜像相当于类,容器相当于类创建的对象),容器相当于是简易的Linux系统,个人理解:容器是一个虚拟机,可在容器中安装各种软件或Linux系统,一个容器中跑一个软件或一个Linux系统,这样就能创建多个容器实例 |
| 仓库是集中存放镜像文件的场所 |
-
安装docker,centos版本需高于6.5

-
centos系统内核需高于2.6.32-431

-
安装docker步骤
| |
| yum install -y yum-utils device-mapper-persistent-data lvm2 |
| |
| sudo yum install docker-ce |
| |
| sudo systemctl start docker |
| |
| sudo service docker restart |
| |
| ps -aux | grep dockerd |
| |
| docker -v |
| |
| systemctl enable docker |
| |
| systemctl list-unit-files | grep docker |
| 打开阿里云镜像服务 --> 镜像镜像器 |
| |
| cd /etc/docker |
| |
| vim daemon.json |
| |
| { "registry-mirrors": ["https://ubjbax4m.mirror.aliyuncs.com"] } |
| |
| sudo systemctl daemon-reload |
| |
| sudo systemctl restart docker |

| docker version |
| docker info |
| docker --help |
| docker images |
| -a |
| -q |
| --digests |
| --no-trunc |
| |
| docker search [options] <镜像名称> |
| options说明: |
| --no-trun |
| -s |
| --automated |
| |
| docker pull <镜像名称>[:tag] |
| docker rmi -f 镜像id或名称 |
| docker rmi -f 镜像名:tag 镜像名2:tag |
| docker rmi -f $(docker images -qa) |
| docker run [options] <要运行的镜像> # 创建容器并启动 |
| options说明: |
| --name="容器新名字" # 为容器指定一个名称 |
| -d # 后台运行容器,并返回容器ID, 也即启动守护式容器 |
| -i #以交互模式运行容器,通常与-t同时使用 |
| -t # 为容器重新分配一个伪输入终端,通常与-i同时使用 |
| -P # 随机端口映射 |
| -p # 指定端口映射,有以下四种格式 |
| ip:hostPort:containerPort |
| ip::containerPort |
| hostPort:containerPort |
| containerPort |
| |
| docker pull centos # 例如先下载一个centos镜像,因为容器就相当于虚拟机,在虚拟机中跑centos系统 |
| 序号1列出所有镜像 |
| 序号2启动docker镜像 |
| 序号3处的[root@4d56fa33ac08]表示现在处于docker中的centos容器中 |
| 序号4查看进程,验证是否处于docker的centos容器中 |

| docker ps [options] |
| OPTIONS说明 |
| -a |
| -l |
| -n |
| -q |
| --no-trunc |
| |
| docker run -it image名称 |
| exit |
| ctrl + p + q |
| docker start CONTAINER_ID |
| docker restart CONTAINER_ID |
| docker stop CONTAINER_ID |
| docker kill CONTAINER_ID |
| docker rm CONTAINER_ID |
| docker rm -f CONTAINER_ID |
| docker rm -f $(docker ps -a -q) |
| docker ps -a -q | xargs docker rm |
| docker run -d image_id或image名称 |
| docker logs -f -t CONTAINER_ID |
| docker logs -f -t --tail <number> CONTAINER_ID |
| docker top CONTAINER_ID |
| docker inspect CONTAINER_ID |
| docker attach CONTAINER_ID |
| docker exec -it CONTAINER_ID <linux命令> |
| docker cp CONTAINER_ID:容器内的路径 主机路径 |

- docker镜像的底层原理是联合文件系统,即下载的docker镜像是一层层叠加的

| 例如下载centos镜像只是下载了精简的命令部分,centos镜像底层所依赖的环境是共用的当前centos主机 |
| 例如下载一个tomcat镜像,该镜像的底层需依赖kernel、centos、jdk8,最后暴露的一层才是tomcat |
| |


| docker run -it -p 8081:8080 tomcat:9 |
| |
| docker run -d -p 8082:8080 tomcat9 |
| docker run -it -P tomcat:9 |
| docker commit -a="作者" -m="备注信息" CONTAINER_ID chnq/tomcat9:9.1 |
- 容器数据卷:用于容器中数据持久化、用于容器间数据共享
| 容器数据卷使用方式一:使用命令 |
| docker run -it -v /宿主机上的路径:/容器上的路径 镜像名 |
| docker run -it -v /宿主机上的路径:/容器上的路径:ro 镜像名 |
| |
| |

| 数据卷使用方式二:dockerFile |
| |
| 在任意路径下新建一个可执行的shell脚本,自定义名称;例如vim Dockerfile |

| 编写内容如下,from表示要操作centos镜像,volume表示要在centos容器中新建多个共享的数据卷文件夹 |

| 编写完成后保存退出,就在Dockerfile所在目录下执行命令:docker build -f /mydocker/Dockerfile -t zzyy/centos . |
| docker build表示会构建一个新的镜像,-f表示脚本所在路径地址,-t表示自定义的名称,最后必须以点结尾 |


| 使用命令docker inspect CONTAINER_ID查看宿主机中的数据卷共享文件夹 |

| docker run -it --name docker01 centos |
| docker run -it --name docker02 --volumes-from docker01 centos |
| docker run -it --name docker03 --volumes-from docker02 centos |
| |
| 即是用来构建新的docker镜像的shell脚本 |
| 使用步骤:编写dockerFile -> build -> run |
| dockerFile模板:FROM scratch表示继承的总的源,最后的CMD表示执行当前脚本 |
| |

| 编写dockerFile文件时保留字必须大写,且后面必须接参数 |
| bulid时指令会从上往下执行;每条指令都会构建并提交一个新的镜像层 |
| dockerFile等同于原材料,build后生成的镜像相当于原材料制造的产品,run启动镜像生成容器 |
| |
| FROM:表示基于哪个镜像,继承自哪个镜像 |
| MAINTAINER:用于指定当前镜像的开发者的姓名和邮箱 |
| RUN:运行镜像时执行的命令,类似于Java中执行程序时再执行一下打印 |
| EXPOSE:当前容器对外暴露的端口 |
| WORKDIR:表示run启动该镜像生成容器后,会进入容器内的指定路径 |
| ENV:构建镜像过程中设置环境变量 |
| ADD:类似于Java中导入依赖并解压 |
| COPY:类似于Java中导入依赖不解压 |
| VOLUME:使用该镜像创建容器时会自动创建容器数据卷 |
| CMD:指定容器启动时要运行的命令,只有最后一条命令生效 |
| ENTRYPOINT:指定容器启动时要运行的命令,可追加命令 |
| ONBUILD:当构建一个子镜像时继承该镜像会触发onbuild命令 |
| 从docker hub 拉取下来的centos镜像启动后会默认进入根目录,但是不支持文本编辑器和查看IP |

| 可使用dockerFile基于原镜像之上自定义一个新的镜像 |
| 新建dockerFile编写如下内容 |

| 构建:docker build -f /dockerFile路径 -t 自定义镜像名:版本 . |
| 启动镜像,创建容器:docker run -it 新镜像名字:TAG |
| 列出镜像的变更历史:docker history 镜像名 |
| docker login |
| docker images -a |
| docker tag 镜像名:版本号 DockerHub用户名:自定义镜像名:版本号 |
| docker push hub用户名/自定义镜像名:版本号 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通