当前位置: 首页 > news >正文

Docker 入门版

目录

1. 关于Docker

2. Dockr run命令中常见参数解读

3. Docker常见命令

4. Docker 数据卷

5. Docker本地目录挂载

6. 自定义镜像

Dockerfile 语法

自定义镜像模板

Demo

7. Docker网络


1. 关于Docker

在docker里面下载东西,就是相当于绿色面安装板,说人话就是docker里面会存有你想要下载软件的一切文件,包括环境,配置等,这些东西在doker里面称为镜像。

而docker里面常说的容器就是只运行镜像时,会把他和其他运行的镜像隔离开,因为不同的软件运行起来环境是很有可能不一样的,这样就可以避免冲突,这就是容器(容器是模拟了一个计算机。容器内部有自己独立的网络,独立的内存,独立的文件系统,模拟的没有那么完整,但是很像)。

博主举例:

在电脑上的软件商城下载了一个qq,然后打开了三个qq登录了三个账号。

这里软件商城就是镜像仓库,下载下来的不用安装可以直接用的qq就是镜像,打开了三个qq运行就是容器里面的三个进程

2. Dockr run命令中常见参数解读

-p:前面是宿主机端口,后面是容器内端口(宿主机端口是不一样的,多个映射时)

3. Docker常见命令

docker pull:下载镜像

docker images(image 镜像):查看所有镜像

docker rmi:删除镜像

自己构建镜像:先创建docker file,然后docker build来构建,然后打包好去部署的话,就要交给运维。有两种方式给他们,第一就是docker save保存到本地,变成一个压缩文件,然后同事就可以docker load加载到他的镜像里面(用的少)。第二种方式就是docker push推到镜像仓库(可以是公用仓库也可以是公司私有的仓库),然后同事就可以docker pull拉取下来。

docker run:创建并运行容器(这个命令是自动化的,如果发现镜像不存在就会去 镜像仓库拉取,然后再自动创建容器然后运行一条龙服务,然后容器就属于运行中的状态了,然后如果想把容器停止下来就可以docker stop,但是注意,这里停止的是容器内的一个进程(比如停止了容器里面的 一个mysql进程)但是容器还在,想重新启动mysql就用docker start启动容器内部停掉的进程。然后我怎么知道这个容器是否是启动的状态呢,就可以用docker ps查看当前容器的运行情况。删除容器就可以用docker rm。在容器运行中可以docker logs(-f持续输出日志)查看容器运行日志。还可以通过docker exec(-it就是指添加一个可交互的终端的意思:docker exec -it mysql bash就是进入了一个mysql的容器,添加了交互终端,并且是通过bash命令行的方式进行交互)进入到容器的内部,因为容器是隔离空间,本来我们是没有办法访问的,但是有时候需要对容器的修改,我们就可以通过这个命令进入容器。)

PS:

简化上面的书写:

可以去创建别名

vi ~/.bashrc

前面我我们更改的别名,后面是原始的写法

然后更改让他生效:

source ~/.bashrc

4. Docker 数据卷

一旦这个绑定产生,只需要在/html/_data目录下创建一个文件,就会自动跑到容器内的目录里面,反过来容器内的目录下做修改,宿主机的目录里这个文件也会修改。(双向映射)

volume:数据卷

然后到我们的需求

PS:挂载一定是在创建容器的时候才可以进行(同时发现,我们也不用调用docker volume create)

查看数据卷是否创建成功

查看这个卷的详细信息

验证之前的信息

然后我们现在来进行需求,改这个文件:

直接vscode打开要修改的宿主机里面的文件,就可以同步修改了容器内的数据!

有了数据卷,以后再想要修改容器内的数据,就不用进入容器内修改了!(因为容器内初始只会配置关于该镜像运行的内容,就比如vi就可能进去都没有就很麻烦,所以需要数据卷!)

5. Docker本地目录挂载

查mysql的时候发现会默认创建一个数据卷——匿名卷

他所挂载的目录(destination)是mysql的数据存储目录

6. 自定义镜像

好处是可以共享比较基础的层

就比如:

Dockerfile 语法

自定义镜像模板

Demo

运行容器

7. Docker网络

现在有两个网桥了一个是默认的一个是新增的

上面这种方式是容器已经存在了,让他去连一个网桥,现在我们来让容器运行的时候默认去连网桥

但是注意,这样就只有一个网桥了,不会加入默认的网桥了

相关文章:

  • jdk8中元空间是否会触发GC
  • GitLab的原理及应用详解(四)
  • 打造坦克游戏:类方法的深入解析
  • 【ARMv7-A】——ATPCS(ARM-Thumb 过程调用标准)
  • 邦注科技三机一体除湿干燥机在工业中的应用
  • 达梦数据库登报测评命令
  • 适合下班做的副业兼职、1天挣300,7天涨粉2万
  • HTML5和CSS3的新特性
  • K8s集群中的Pod调度约束亲和性与反亲和性
  • 分布式事务解决方案(最终一致性【可靠消息解决方案】)
  • grafana大盘展示node_expod节点
  • springboot发送短信验证码,结合redis 实现限制,验证码有效期2分钟,有效期内禁止再次发送,一天内发送超3次限制
  • 【C++】牛客——小红的口罩
  • NodeJS安装并生成Vue脚手架(保姆级)
  • 从需求角度介绍PasteSpider(K8S平替部署工具适合于任何开发语言)
  • canvas 高仿 Apple Watch 表盘
  • E-HPC支持多队列管理和自动伸缩
  • HomeBrew常规使用教程
  • IP路由与转发
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • JDK 6和JDK 7中的substring()方法
  • Making An Indicator With Pure CSS
  • nginx 负载服务器优化
  • nginx 配置多 域名 + 多 https
  • React系列之 Redux 架构模式
  • Vue全家桶实现一个Web App
  • Yeoman_Bower_Grunt
  • 大主子表关联的性能优化方法
  • 基于web的全景—— Pannellum小试
  • 嵌入式文件系统
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 实习面试笔记
  • 异常机制详解
  • 用element的upload组件实现多图片上传和压缩
  • 正则与JS中的正则
  • 白色的风信子
  • ionic异常记录
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #Lua:Lua调用C++生成的DLL库
  • (7)STL算法之交换赋值
  • (一)SvelteKit教程:hello world
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)程序员技术练级攻略
  • ***原理与防范
  • .axf 转化 .bin文件 的方法
  • .gitignore文件使用
  • .NET CF命令行调试器MDbg入门(一)
  • .Net Core中的内存缓存实现——Redis及MemoryCache(2个可选)方案的实现
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 通过系统影子账户实现权限维持
  • .NET 中的轻量级线程安全
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .net通过类组装数据转换为json并且传递给对方接口