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

Docker 入门 ------容器互通以及Dockerfile

1. 端口映射以及容器互联

Docker 除了通过网络访问,还提供了两种很方便的功能来满足服务访问的基本需求:

  1. 允许映射容器内应用的服务端口到本地宿主主机
  2. 互联机制实现多个容器间通过容器名来快速访问

1.1 容器映射实现访问容器

1.1.1 从外部访问容器应用

当容器中运行一些网络应用时,可以通过-P或者-p来指定端口映射。-P会使Docker随机取一个端口号。

docker run -d -P training/webapp python app.py

在这里插入图片描述
表示本地主机的32769映射到了容器的5000端口

你也可以使用-p来指定端口绑定一个容器,格式:

HOSTPort:ContainerPort 或者 IP::ContainerPort

1.1.2 映射所有接口端口

docker run -d -p 5000:5000 training/webapp python app.py // 将本地的5000端口映射到容器的5000端口

也可以一次绑定多个端口

docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py // 将本地的5000端口映射到容器的5000端口,且本地3000端口也映射到容器的80端口

1.1.3 映射到指定地址的指定端口

docker -run -d -p127.0.0.1:5000:5000 training/webapp python app.py

此处用的就是ip:HOSTPORT:ContainerPort格式指定映射地址

1.1.4 映射到指定容器的任意端口

docker run -d -p 127.0.0.1::5000 training/webapp python app.py

此处用的就是IP::ContainerPort绑定本地主机任意端口到容器5000端口

docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

还可以使用udp标记来指定udp端口

1.1.5 查看映射端口的配置

docker port ContainerName

在这里插入图片描述
注意:容器有自己的内部网络和IP地址,使用docker inspect + 容器ID 可以获取容器的具体信息

1.2 互联机制实现便捷互访

容器的互联会在源和接受容器之间创建链接关系,接受容器可以通过容器名快速访问到源容器,而不用制定具体的IP地址

1.2.1 自定义容器命名

docker run -d -P --name web training/webapp python app.py

使用--name可以自定义容器名,以上就命名容器为web

docker ps -l 来验证
docker inspect -f “{{ .Name }}” [容器ID]

在这里插入图片描述
容器的名称是唯一的,如果你已经有了一个名为web的容器,你就不能创建一个相同名字的容器了,必须先rm在创建,如果在docker run使用--rm标记,那么会在容器终止后立即删除,注意--rm和-d参数不能同时使用

1.2.2 容器互联

创建容器:

docker run -d --name db training/postgres // 创建一个数据库容器
docker rm -f web // 删除之前的web容器
docker run -d -P --name web --link db:db training/webapp python app.py // 然后创建一个web容器,并且把他连接到db容器

此时。db容器和web容器为互联关系。 --link参数格式为--link name:alias 其中name是链接容器名称,alias是这个链接的别名。

注意: Docker相当于在两个容器之间创建了一个虚拟通道,而不需要再去映射它们的端口到宿主主机上。在启动db容器的时候没有使用-p-P标记,从而避免数据库服务端口暴露到外部网络中。

我们来测试两者之间连通性:

docker run -t -i --rm --link db:db training/webapp /bin/bash // 进入终端
cat /etc/host
ping db

在这里插入图片描述
这里我们可以看到db被解析成了172.18.0.3

2. 使用Dockerfile创建镜像

2.1 基本结构

Dockerfile主要分为四个部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令

例子:

FROM ubuntu  // 所创建的基础镜像信息
MAINTAINER docker_user docker_user@email.com // 维护者信息
RUN echo "deb http://archive.ubuntu.com/ubuntu raring main universe" >> /etc/apt/sources.list // 运行命令
RUN yum -y nginx // 运行命令
RUN echo "\ndaemmon off;" >> /etc/nginx/nginx.conf // 运行命令CMD /usr/bin/nginx // 启动容器时的默认指令

2.2 指令说明

2.2.1 FROM

解释: 指定所创建镜像的基础镜像,如果本地不存在,则默认会去Docker Hub下载指定镜像

格式:

FROM[image] | [image]:[tag] | [image]@[digest]

注意:Dockerfile第一条指令必须是FROM指令,如果在同一个Dockerfile中创建多个镜像,可以使用多个FROM指令(每个镜像一次)

2.2.2 MAINTAINER

解释: 指定维护者信息。

格式:

MAINTAINER image_creator@docker.com

生成的镜像会写入镜像的Author属性域中。

2.2.3 RUN

解释: 运行指定命令。

格式:

RUN [command] | [“executable”,“param1”,“param2”]

注意!上面第二种方式会被解析成一个JSON,所以必须使用双引号

RUN可以使用\来进行换行

2.2.4 CMD

解释: 用来指定启动容器时默认执行的命令

格式:

CMD [“executable”,“param1”,“param2”] | command param1 param2 | [“param1”,“param2”]

其中第一种是使用exec执行,是最推荐的方式,第二种是提供给需要交互的应用,第三种是提供给ENTRYPOINT的默认参数

每一个Dockerfile只能有一条CMD命令,如果指定了多条,只有最后一条会执行

如果启动容器的时候手动指定了运行命令(RUN)则会覆盖掉CMD命令

2.2.5 LABEL

解释: 用来指定生成镜像的元数据标签信息。

格式:

LABEL [key]=[value] [key]=[value] …

2.2.6 EXPOSE

解释: 声明镜像内服务监听的端口

格式:

EXPOSE 22 80 8080

注意: 该指令只是起到声明作用,并不会自动完成端口映射。

在启动容器时,需要使用-P,Docker主机会自动分配一个宿主机的临时端口转发到指定端口

使用-p,可以具体声明从宿主机哪个本地端口映射过来

2.2.7 ENV

解释: 指定环境变量,在镜像生成过程中会被后续的RUN指令使用,在镜像启动的容器中也会存在。

格式:

ENV [key][value] | [key] = [value]

指令指定的环境变量在运行时可以被覆盖掉,如: docker run --env [key]=[value] …

2.2.8 ADD

解释: 复制指定的src路径下的内容到容器中的dest路径下

格式:

add [src][dest]

如果是tar文件,会自动解压到dest路径下,dest可以是绝对路径,或者是对于工作目录的相对路径。

2.2.9 COPY

解释: 复制本地主机的src到镜像容器的dest下,注意!和add是有区别的,copy主要复制的是本地主机

格式:

copy [src][dest]

2.2.10 ENTRYPOINT

解释: 指定镜像的默认入口命令,该入口命令会在启动容器时作为根命令执行,所有传入值作为该命令的参数

格式:

ENTRYPOINT [“executable”,“param1”,“param2”]
ENTRYPOINT command param1 param2

前者使用exec调用,后者在shell中执行。使用后CMD指令指定值将作为根命令的参数

每个Dockerfile中只能有一个ENTRYPOINT,当有多个时,只有最后一个有效。

在运行时,可以被 --entrypoint覆盖掉

2.2.11 VOLUME

**解释:**创建一个数据卷挂载点。

格式:

VOLUMe[“/data”]

2.2.12 USER

解释: 指定容器运行时的用户名或ID,后续RUN也会指定用户身份。

格式:

USER daemon

当服务不需要管理员时,也可以通过命令来指定运行用户,并且可以在之前创建所需要的用户。

RUN groupadd -r postgres && useradd -r -g postgres postgres

2.2.13 WORKDIR

解释: 为后续的RUN、CMD和ENTRYPOINT指令配置工作目录

格式:

WORKDIR [path]

2.2.14 ARG

解释: 指定一些镜像内使用的参数

格式:

ARG [name][=[default name]]

2.2.15 ONBUILD

解释: 配置当所创建的镜像作为其他镜像的基础镜像时,所执行的创建操作指令

ONBUILD [INSTRUCTION]

2.2.16 STOPSIGNAL

解释: 指定所创建镜像启动的容器接受退出的信号值

格式:

STOPSIGNAL [signal]

2.2.17 HEALTHCHECK

**解释: ** 配置所启动容器如何进行健康检查

格式:

HEALTHCHECK [OPTIONS] CMD command; // 根据所执行命令返回值是否为0判断
HEALTHCHECK NONE; // 禁止进行健康检查

OPTIONS选项说明:

指令解释
–interval默认30s,过多久检查一次
–timeout默认30s,每次检查等待结果的超时时间
–retries默认3,检查失败了,重试几次才确定

2.2.18 SHELL

解释: 其他命令使用shell时的默认shell类型

格式:

shell [“command”,“options”]

注意:Dockerfile开头添加#escape=来指定转义信息

2.3 创建镜像

Dockerfile通过docker build来创建镜像。

例如,指定Dockerfile所在路径为 /tmp/docker_builder/,希望生成的标签为build_repo/first_iamge

docker build -t build_repo/first_iamge /tmp/docker_builder/

2.4 使用.dockerignore文件

可以通过.dockerignore来让Docker忽略匹配模式下路径的目录和文件

2.5 最佳实践

遵循一下九条意见:

  1. 精简镜像用途
  2. 选用合适的基础镜像
  3. 提供足够清晰的命令注释和维护者信息
  4. 正确使用版本号
  5. 减少镜像层数
  6. 及时删除临时文件和缓存文件
  7. 提高生成速度
  8. 调整合理的指令顺序
  9. 减少外部源干扰

总结

本章节主要介绍了Docker容器如何进行互通,以及容器互通时需要注意的事项以及细节,然后详细的介绍了Dockerfile各个关键字的含义,以及如何使用,到这里Docker入门的章节就结束了,后面会有一个Docker实战篇。

相关文章:

Docker 入门 ------容器互通以及Dockerfile

1. 端口映射以及容器互联 Docker 除了通过网络访问,还提供了两种很方便的功能来满足服务访问的基本需求: 允许映射容器内应用的服务端口到本地宿主主机互联机制实现多个容器间通过容器名来快速访问 1.1 容器映射实现访问容器 1.1.1 从外部访问容器应…...

AI绘图模型不会写字的难题解决了

介绍 大家好,最近有个开源项目比较有意思,解决了图像中不支持带有中文的问题。 https://github.com/tyxsspa/AnyText。 为什么不能带有中文? 数据集局限 Stable Diffusion的训练数据集以英文数据为主,没有大量包含其他语言文本的…...

vue-cli创建项目时由esLint校验导致报错或警告的问题及解决

vue-cli创建项目时由esLint校验导致报错或警告的问题及解决 一、万能办法 一、万能办法 //就是在报错的JS文件中第一行写上 /* eslint-disable */链接: https://www.yii666.com/blog/288808.html 其它的方法我遇见了再补充...

uniapp:实现手机端APP登录强制更新,从本地服务器下载新的apk更新,并使用WebSocket,实时强制在线用户更新

实现登录即更新,或实时监听更新 本文介绍的是在App打开启动的时候调用更新,点击下方链接,查看使用WebSocket实现实时通知在线用户更新。 uniapp:全局消息是推送,实现app在线更新,WebSocket,ap…...

设计循环队列——oj题622

. 个人主页:晓风飞 专栏:LeetCode刷题|数据结构|Linux 路漫漫其修远兮,吾将上下而求索 文章目录 题目要求:应该支持如下操作:示例:提示: 结构体定义队列的创建基本操作判断队列是否为空&#xf…...

阿里后端实习一面面经

阿里后端实习一面面经 项目中使用到了es,es的作用? elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 es中的重要概念? 群集:一个或多个节点…...

element-ui组件DatePicker日期选择器移动端兼容

element-ui组件DatePicker日期选择器移动端兼容 css /** 移动端展示 **/ media screen and (max-width: 500px) {.el-picker-panel__sidebar {width: 100%;}.el-picker-panel {width: 400px!important;}.el-picker-panel__content {width: 100%;}.el-picker-panel__body{marg…...

burpsuite 爆破

靶场搭建:phpstudy的安装与靶场搭建 - junlin623 - 博客园 (cnblogs.com) 账号字典:XXTK: 一些弱口令、fuzz字典 (gitee.com) 网盘链接:https://pan.baidu.com/s/1v5pAwaTwoeCnJgkUXf3iLQ?pwd=mllm 提取码:mllm --来自百度网盘超级会员V2的分享 一、暴力破解 - 基于…...

SparkSQL基础解析(三)

1、 Spark SQL概述 1.1什么是Spark SQL Spark SQL是Spark用来处理结构化数据的一个模块,它提供了2个编程抽象:DataFrame和 DataSet,并且作为分布式SQL查询引擎的作用。 我们已经学习了Hive,它是将Hive SQL转换成MapReduce然后提…...

gz-hamonic 安装提示缺少许多依赖无法安装

在软件更新源中增加gz-hamonic的软件源, 点击添加,在输入框中填入如下语句: deb http://packages.osrfoundation.org/ubuntu jammy main 如图所示: 然后执行 sudo apt -get install gz-hamonic即可安装。 如下图 在终端中输入…...

新版Edge卸载

新版Edge卸载:步骤与注意事项 随着Windows 10的发布,微软推出了新版Edge浏览器。虽然新版Edge浏览器具有许多优秀的新功能和改进,但有时您可能希望卸载它并使用其他浏览器。在本文中,我们将向您介绍如何卸载新版Edge浏览器&#…...

Ansibe自动化基础

目录 一.Ansibe自动化概述 1.特点 2.工作特性 3.应用场合 二.ansibe安装即相关文件说明 1.安装 2.相关文件 3.主配置文件内容详解 4.ansibe运行机制 三.ansibe管理节点命令 1.Ansibe 四.主机组配置 1.基本配置 第一种: 第二种: 2.设置SSH…...

2023 年中国高校大数据挑战赛赛题B DNA 存储中的序列聚类与比对-解析与参考代码

题目背景:目前往往需要对测序后的序列进行聚类与比对。其中聚类指的是将测序序列聚类以判断原始序列有多少条,聚类后相同类的序列定义为一个簇。比对则是指在聚类基础上对一个簇内的序列进行比对进而输出一条最有 可能的正确序列。通过聚类与比对将会极大…...

决策树--分类决策树

1、介绍 ① 定义 分类决策树通过树形结构来模拟决策过程,决策树由结点和有向边组成。结点有两种类型:内部结 点和叶结点。内部结点表示一个特征或属性,叶子节点表示一个类。 ② 生成过程 用决策树分类,从根结点开始&#xff…...

【2024/1/5】

2024/1/5周报 本周开展工作下周工作计划 本周开展工作 首先的话就是跟大家汇报一下上一个项目的进度,那因为一些我这边的不可控的因素暂时进行搁置,随后的话还是需要在进行做的。 因此我们最近在做一个web端的项目,这个项目的具体的就不汇报…...

CNN——VGG

1.VGG简介 论文下载地址:https://arxiv.org/pdf/1409.1556.pdf VGGNet 是由牛津大学视觉几何小组(Visual Geometry Group, VGG)提出的一种深层卷积网络结构,他们以 7.32% 的错误率赢得了 2014 年 ILSVRC 分类任务的亚军&#xff…...

深入理解Java中的多线程编程与并发控制

当谈论到 Java 编程语言时,多线程编程和并发控制是其中最重要的话题之一。Java 在多线程领域有着强大的支持和丰富的工具集,允许开发人员利用并发性来提高程序性能和效率。本文将深入探讨 Java 中的多线程编程和并发控制,包括线程的创建、同步…...

提供10个mysql的实例和思路

学生信息管理系统 学生表(id, name, gender, age, class_id)班级表(id, name)思路:通过学生表和班级表进行关联,可以实现学生信息的查询、添加、修改、删除等操作。 订单管理系统 订单表(id, us…...

FPGA项目(14)——基于FPGA的数字秒表设计

1.功能设计 设计内容及要求: 1.秒表最大计时范围为99分59. 99秒 2.6位数码管显示,分辨率为0.01秒 3.具有清零、启动计时、暂停及继续计时等功能 4.控制操作按键不超过二个。 2.设计思路 所采用的时钟为50M,先对时钟进行分频,得到100HZ频率…...

浅谈指数移动平均(ema)

经常在各种代码中看到指数移动平均(比如我专注的网络传输领域),但却不曾想到它就是诠释世界的方法,我们每个人都在被这种方式 “平均”… 今天说说指数移动平均(或移动指数平均,Exponential Moving Average)。 能查到的资料都侧重于其数学形…...

1-并发编程线程基础

什么是线程 在讨论什么是线程前有必要先说下什么是进程,因为线程是进程中的一个实体,线程本身是不会独立存在的。 进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,线程则是进程的一个执行路径&#…...

vue中动态出来返回的时间秒数,在多少范围显示多少秒,多少范围显示分,小时等等

在Vue中&#xff0c;你可以使用计算属性&#xff08;computed property&#xff09;或过滤器&#xff08;filter&#xff09;来根据动态返回的时间秒数来显示不同的时间单位&#xff0c;比如秒、分、小时等等。 下面是一个使用计算属性的示例&#xff1a; <template>&l…...

English: go through customs

文章目录 常见单词机场指示登机和中转降落以及公共服务签证篇出/入境卡篇入境英语会话篇 常见单词 customs: 海关 (kʌstəmz)cash: 现金 (kʃ)passport: 护照 (pspɔːt)luggage/baggage: 行李 (lʌɡɪdʒ/ˈbɡɪdʒ)Exchange: 换钱 (ɪks’tʃeɪndʒ)airport: 飞机场 (ɛ…...

Nginx 多端口部署多站点

目录 1.进行nginx.conf 2.复制粘贴 3.修改端口及站点根目录 4. 网站上传 1.进行nginx.conf 在 nginx 主要配置文件 nginx.conf 中&#xff0c;server 是负责一个网站配置的&#xff0c;我们想要多个端口访问的话&#xff0c;可以复制多个 server 先进入到 nginx.conf 中 …...

从零开始配置kali2023环境:配置jupyter的多内核环境

在kali2023上面尝试用anaconda3&#xff0c;anaconda2安装实现配置jupyter的多内核环境时出现各种问题&#xff0c;现在可以通过镜像方式解决 1. 搜索镜像 ┌──(holyeyes㉿kali2023)-[~] └─$ sudo docker search anaconda ┌──(holyeyes㉿kali2023)-[~] └─$ sudo …...

Dart调用JS对10000条定位数据滤波

使用Dart调用JS&#xff0c;还是为了练习跨语言调用&#xff1b; 一、编写对应的JS代码 平时在开发时不推荐将算法放在JS里&#xff0c;我这里是简单的做一下数据过滤&#xff1b; 首先生成一些随机定位数据&#xff0c;在实际开发中可以使用真实数据&#xff1b; // 随机定…...

大模型应用实践:AIGC探索之旅

随着OpenAI推出ChatGPT&#xff0c;AIGC迎来了前所未有的发展机遇。大模型技术已经不仅仅是技术趋势&#xff0c;而是深刻地塑造着我们交流、工作和思考的方式。 本文介绍了笔者理解的大模型和AIGC的密切联系&#xff0c;从历史沿革到实际应用案例&#xff0c;再到面临的技术挑…...

【.NET Core】异步编程模式

【.NET Core】异步编程模式 文章目录 【.NET Core】异步编程模式一、概述二、基于任务的异步模式&#xff08;TAP&#xff09;2.1 TAP模式命名、参数和返回类型2.2 TAP初始化异步操2.3 TAP如何编译2.4 手动生成TAP方法2.5 混合方法实现TAP2.6 TAP中Await挂起执行2.7 TAP中使用Y…...

macOS通过外置驱动器备份数据

通过外置驱动器备份数据&#xff08;谨慎操作&#xff09; 1.将外置驱动器连接到您的 Mac。驱动器容量应等于或大于您当前的启动磁盘。驱动器还应该是您可以抹掉的。 2.使用 macOS 恢复功能 抹掉外置驱动器&#xff0c;然后将 macOS 安装 到外置驱动器上。确保您选择的外置驱动…...

rtsp解析视频流

这里先说一下 播放rtsp 视频流&#xff0c;尽量让后端转换一下其他格式的流进行播放。因为rtsp的流需要flash支持&#xff0c;现在很多浏览器不支持flash。 先说一下这里我没有用video-player插件&#xff0c;因为它需要用flash ,在一个是我下载flash后&#xff0c;还是无法播放…...

网站教程网/百度指数总结

MapReduce编程模型 【1】先对输入的信息进行切片处理。 【2】每个map函数对所划分的数据并行处理&#xff0c;产生不同的中间结果输出。 【3】对map的中间结果数据进行收集整理&#xff08;aggregate & shuffle&#xff09;处理&#xff0c;交给reduce。 【4】reduce进行计…...

住房和城乡建设委员会官方网站/seo优化是什么

本文档的Copyleft归rosetta所有&#xff0c;使用GPL发布&#xff0c;可以自由拷贝、转载&#xff0c;转载时请保持文档的完整性。参考资料&#xff1a;《Linux设备驱动程序》第3版 LDD3e, LKD3e, 《 Linux per-CPU实现分析 》&#xff0c;linux-2.6.27&#xff0c;irq_balance要…...

手动修改目录wordpress/淘宝网站的推广与优化

1.问题背景 opencv 官方手册 文档 练习题 使用轨迹栏创建颜色和画笔半径可调的Paint应用程序。有关绘制的信息&#xff0c;请参阅有关鼠标处 理的先前教程。 2.代码部分 另外一个官方demo留下的作业&#xff0c;代码难以精美&#xff0c;请理解。 import numpy as np impor…...

本地网站环境搭建/怎么在网上推销产品

文章目录GitHub官网官网Demo指引zuul概念zuul功能授权和安全认证监控统计动态路由压测Load shadding [降低负载]Static Response handling [静态响应处理]Multiregion Resiliency1.zuul是一个提供动态路由&#xff0c;监控&#xff0c;弹性&#xff0c;安全等网关服务;GitHub官…...

如何做网站的实时画面/美国疫情最新情况

本文首发于InfoQ。 Java 8在Lambda表达式、接口默认方式、新的日期API等方面引入的新特性广受关注&#xff0c;同时在并发编程方面也做出了大量改进。以往的几个Java版本都对java.util.concurrent做了不同程度的增强&#xff0c;比如Java 7的Fork/Join框架&#xff0c;而Java 8…...

mip wordpress/十大技能培训机构排名

1、什么是主从复制1、主从的作用2、主从的原理3、从数据库的读的延迟问题了解吗&#xff1f;如何解决&#xff1f;4、做主从后主服务器挂了怎么办&#xff1f;一、什么是主从复制?主从复制&#xff0c;是用来建立一个和主数据库完全一样的数据库环境&#xff0c;称为从数据库&…...