Docker入门
1.Docker的概念
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低
1.1与虚拟机的区别
Docker相对于虚拟机是更"轻量级"虚拟化,目的和虚拟机一样都是创造"隔离环境"。
虚拟机需要创建一层"Guest OS",虚拟机是操作系统级别的隔离,容器本质上是进程级的资源隔离。
1.2.Docker仓库
可以对比与Github,对镜像进行托管,可以从仓库拉取镜像,也可以提交镜像到仓库。 (DockerHub)
1.3.Docker镜像
可以理解为虚拟机的操作系统ISO文件,利用镜像可以很方便的生成容器。
1.4.容器
可以理解为实际运行的虚拟机
1.5.tar文件
可以将镜像 save成tar文件,也可以从tar文件中load镜像,类似于虚拟机的vmdk文件。
在线Docker工具 https://labs.play-with-docker.com/
2.Docker容器使用
2.1容器的启动、关闭
docker run [options] <镜像名称>
-d 后台运行
-p 内外端口映射 90:80 外部90端口映射到容器的80
-P :是容器内部端口随机映射到主机的端口。
-v #指定文件路径映射 宿主机路径:内部路径
-t: 在新容器内指定一个伪终端或终端。
-i: 允许你对容器内的标准输入 (STDIN) 进行交互。
docker start <容器id> 启动一个已停止的容器
docker stop <容器id> 停止容器
docker restart <容器id> 重启容器
2.2 进入容器
docker attach 退回会停止容器
docker exec 退出不会停止容器
2.3 导出容器
docker export <容器ID> > nginx.tar
**docker import **
docker import http://example.com/exampleimage.tgz example/imagerepo #从URL 导入
docker import nginx-test.tar nginx:imp 或 cat nginx-test.tar | docker import - nginx:imp
2.4 查看容器信息
docker logs <容器ID> 查看容器内标准输出
docker top <容器ID> 查看容器内进程
docker inspect <容器ID> 查看dicker底层信息
2.5 删除容器
docker rm <容器ID>
2.6 容器之间的连接
docker run -p 指定内网端口映射
-P :是容器内部端口随机映射到主机的高端口 (49000~49900)
端口映射加上IP
docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py
upd协议
docker run -d -p 127.0.0.1:5001:5000/udp training/webapp python app.py
容器互联
1.创建 network
docker network create -d bridge test-net
-d:参数指定 Docker 网络类型,有 bridge、overlay。
2.启动容器 使用--network 参数
docker run -itd --name test1 --network test-net ubuntu /bin/bash
docker run -itd --name test2 --network test-net ubuntu /bin/bash
3.两个启动的容器内使用ping测试是否互联
配置Docker的DNS
/etc/docker/daemon.json 重启Docker
{
"dns" : [
"114.114.114.114",
"8.8.8.8"
]
}
docker run -it --rm ubuntu cat etc/resolv.conf #查看DNS是否生效
3.Docker镜像使用
docker pull nginx #获取nginx镜像
docker images #查看Docker镜像
docker commit 容器ID 镜像名称 #提交本地容器为镜像
docker build -t 镜像名 DockerFile路径 #通过DockerFile构建Docker镜像
docker save 镜像名 *.tar #将镜像生成tar文件
docker load *.tar
docker rmi #删除镜像
docker search <镜像名> #查找镜像
4.Docker仓库使用
官方维护的仓库DockerHub
docker login #登陆
docker logout #注销
docker search #查找镜像
docker pull #拉取镜像
docker push #推送镜像
docker tag ubuntu:18.04 username/ubuntu:18.04#打标签
docker push username/ubuntu:18.04
5.Docker File使用
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明 文件名严格区分大小写
构建镜像 在DockerFile文件目录下 docker build -t nginx:test
FROM 基于哪个镜像
WORKDIR 指定工作目录 WORKDIR 指定的工作目录,必须是提前创建好的 shell语句运行的目录
RUN 用于执行后面跟着的命令行命令 docker bulid 时运行
CMD 用于执行后面跟着的命令行命令 docker run 时运行
ENTRYPOINT
COPY <源路径> <容器目标路径>
上下文目录中复制文件或者目录到容器里指定路径
ADD 类似于COPY 可以为Url 压缩文件自动解压
ENV 指定环境变量
ARG 指定参数 仅用于build 可以用 --build-arg <参数名>=<值> 来覆盖
LABLE 指定元数据 docker inspect时查看
EXPOSE 暴露端口 docker run -P 随机映射到暴露的端口
VOLUME 定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。容器内的路径
USER 指定运行命令的用户
ONBUILD 用于延迟构建命令的执行 当前镜像构建不会执行 当下次构建以当前镜像为FROM时执行
6.Docker compose使用
Docker Compose 多容器项目
容器之间 内网 互相访问
容器和外部 通过 Docker网卡到宿主机网卡
容器之间相互访问的方法
1.A访问B 进入容器B 查看B的IP 进行访问
2.docker run时 使用 --link 容器名:映射名
docker run -d --link myA:A myB b
在myB容器中使用A 就可以解析到myA容器的IP
3.docker compose
通过docker-compose.yml的配置 来启动并运行多个容器
https://www.bilibili.com/video/av61131351
docker-compose up -d #构建 运行应用程序
https://www.runoob.com/docker/docker-compose.html
容器之间通过docker-compose.yml中的名字即可 互相访问
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构