docker 入门 实例

2023-05-16

先决条件

验证是否已经做好准备

docker run hello-world

使用Dockerfile定义容器

Dockerfile将在您的容器内定义环境中执行的操作。对网络接口和磁盘驱动器的访问在此内环境内实现虚拟化,这将独立于系统的其余部分,因此您必须将端口映射到外度,并具体说明您要“复制”到该环境的文件。但是,在执行此操作后,您可以期望此Dockerfile中定义的应用构建的行为在运行时始终相同。
以下为Dockerfile的一个例子

# 将官方 Python 运行时用作父镜像
FROM python:2.7-slim

# 将工作目录设置为 /app
WORKDIR /app

# 将当前目录内容复制到位于 /app 中的容器中
ADD . /app

# 安装 requirements.txt 中指定的任何所需软件包
RUN pip install -r requirements.txt

# 使端口 80 可供此容器外的环境使用
EXPOSE 80

# 定义环境变量
ENV NAME World

# 在容器启动时运行 app.py
CMD ["python", "app.py"]

其他两个文件的内容:

requirements.txt

Flask
Redis

app.py

from flask import Flask
from redis import Redis, RedisError
import os
import socket

# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)

app = Flask(__name__)

@app.route("/")
def hello():
    try:
        visits = redis.incr("counter")
    except RedisError:
        visits = "<i>cannot connect to Redis, counter disabled</i>"

    html = "<h3>Hello {name}!</h3>" \
           "<b>Hostname:</b> {hostname}<br/>" \
           "<b>Visits:</b> {visits}"
    return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)

现在我们可以看到,在Dockerfile中的 pip install -r requirements.txt 将安装python的Flask和Redis库,而此应用将输出换将变量NAME以及对 socket.gethostname() 调用的输出。最后,由于Redis未在运行(因为我们仅安装了python库,而未安装Redis自身),因此我们应该期望尝试在此使用它将失败,并生成错误信息。

** 在容器内时,访问主机的名称将检索容器ID,这类似于正在运行的可执行文件的进程ID。

构建应用

进入到文件夹,并查看,文件夹下只有上述的三个文件

现在,运行构建命令。将创建Docker镜像,使用 -t 对其进行标记,该名称即为生成的镜像的repository名称。

docker build -t friendlyhello . 

通过 docker images 命令 查看位于您机器上的所有本地docker镜像库

运行应用

运行应用,使用 -p 参数将机器的4000端口映射到容器暴露的80端口:

docker run -p 4000:80 friendlyhello

看到python正在为应用提供服务(网址为http://0.0.0.0:80)的输出通知。但是,该消息来自容器的内部,内部不知道您已经将80端口映射到4000,因此争取的可访问的url为  http://localhost:4000

在浏览器中访问该URL,显示了 Hello World, 容器ID, 以及redis的错误信息

也可以在shell中使用curl命令查看相同内容。

** 此端口映射4000:80 说明您在Dockerfile中暴露的内容与使用docker run -p 发布的内容之间的差异。

上述的run命令,会保留控制台运行,当然可以直接设置器后台运行,即分离模式下运行

docker run -d -p 4000:80 friendlyhello

该命令返回的是长容器ID。 可以使用 docker ps 查看 当前运行的容器

如果想停止镜像,结束进程,执行 docker stop  [CONTAINER ID] 命令。 

停止后,继续docker ps查看,当前无正在运行的容器。

以上就是一个基本完整的创建镜像,运行容器的例子。

参考:https://docs.docker.com/get-started/part2/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker 入门 实例 的相关文章

随机推荐

  • UART通信协议

    UART 是用于控制计算机与串行设备的芯片 有一点要注意的是 xff0c 它提供了RS 232C 数据终端设备接口 xff0c 这样计算机就可以和调制解调器或其它使用RS 232C接口的串行设备通信了 作为接口的一部分 xff0c UART
  • stm32f103的IAP升级时,部分APP程序功能丢失,串口中断不起作用,怎么办?

    昨天我用stm32f103做IAP升级 xff0c APP程序是一个LED闪烁和一个串口1收发数据 结果IAP升级后 xff0c 发现APP程序只有LED闪烁但是串口1不行甚至引起死机 这种半死不活的现象是最莫名其妙的 xff0c 它一半在
  • 计算机的启动过程(详细)

    零 boot的含义 先问一个问题 xff0c 启动 用英语怎么说 xff1f 回答是boot 可是 xff0c boot原来的意思是靴子 xff0c 启动 与靴子有什么关系呢 xff1f 原来 xff0c 这里的boot是bootstrap
  • 史上最全Linux面试题(2020最新版)

    出处 xff1a https blog csdn net thinkwon article details 104588679 作者 xff1a ThinkWon 导读 xff1a 本文整理了最新的Linux面试题 xff0c 近3万字 x
  • Endnote中文参考文献格式下载地址(官网)

    Endnote中文参考文献格式官网下载地址 1 下载2 安装 1 下载 今天在写中文论文时 xff0c 发现Endnote里没有中文参考文献格式 上网找了一下有些下载尽然还要币 xff0c 最后看到其实官网里就有GBT7114格式 xff1
  • C++中String类对象的初始化和基本用法

    1 初始化的几种方法和错误案例 首先当然是包含头文件了 xff1a span class token macro property span class token directive keyword include span span c
  • C++中multimap和map容器及使用

    map multimap容器里存放的都是pair模板类的对象 xff0c 而且按照first成员从小到大排序 1 pair模板 pair模板类的定义如下 xff0c 其中有两个成员变量 xff1a first和second xff1a 2
  • Word标题前出现黑块解决办法

    最近Word写文章 xff0c 再次遇到了让人头疼的问题 xff0c 就是自己定义的多级列表 xff0c 某一级前面不显示数字而是一个黑块 之前就遇到过这个问题 xff0c 不知怎么就解决了 再次遇到就懵了 尝试了网上的几种方法 xff0c
  • 从印象笔记无法连接到服务器,到win 10 Eage浏览器无法访问

    昨天电脑上的印象笔记突然无法同步 xff0c 同步的图标上显示了红色的感叹号 按照网上很多的解决方法试了之后都无法解决 印象笔记也重新安装了 xff0c 也退出企图重新登录 xff0c 结果登录界面显示无法连接到服务器 按照官网给出的解决方
  • Crazyflie笔记一:概述开发范围、工具、特点介绍

    原文地址 xff1a http blog sina com cn s blog 402c071e0102v6ho html Crazyflie笔记一 xff1a 概述开发范围 工具 特点介绍 2015 01 04 12 48 31 转载 标
  • Ubuntu16.04如何设置自动休眠时间

    可能有的人觉得 xff0c 虚拟机几分钟没动就自己锁住了 xff0c 再次进入又要输密码非常麻烦 xff0c 那如何设置屏幕关闭时间呢 xff1f 下面就说一说 xff1a 1 打开设置选项 xff0c 在电脑的右上方 2 点击system
  • PX4使用I2C方式添加自定义传感器(1)

    PX4使用I2C方式添加自定义传感器 xff08 1 xff09 前言 毕业设计就是要在PX4上添加一个传感器 xff08 角度传感器 xff09 xff0c 由于板子上的接口数量很少 xff0c 很是宝贵 最后只能选择通过I2C通信方式
  • PX4通过I2C方式添加自定义传感器(2)

    PX4 I2C通信方式传感器驱动分析 xff08 以ets airspeed为例 xff09 1 说明 这篇文章我们就来看看I2C传感器的驱动过程 xff0c 当然里面也有很多东西我不是很理解 xff0c 所以仅谈我领悟的一些东西 我就以e
  • PX4通过I2C方式添加自定义传感器(3)

    添加自定义传感器并实现数据的发送和订阅 1 前期准备 1 1 建立文件夹和相关文件配置 我是在src drivers distance sensor文件夹下操作的 xff0c 当然其他文件夹下都类似 首先建立了两个文件夹angle sour
  • Matlab 同一文件夹下图片批量处理的两种简单方法

    Matlab 同一文件夹下图片批量处理的两种简单方法 最近因为实验中有许多图片需要处理 xff0c 本来的做法是一张张读取图片 xff0c 这是相当麻烦的 xff0c 因为每处理一张图片就需要修改相应的图片名 于是就想着要是可以批量处理就好
  • MATLAB实现图像巴特沃斯滤波、高频增强滤波及直方图均衡化

    1 巴特沃斯滤波器 1 1 基本概念 在图像处理中 xff0c 巴特沃斯滤波器传递函数如下 xff1a 巴特沃斯低通滤波器公式 xff1a 巴特沃斯高通滤波器公式 xff1a 在公式中 xff0c D u v 代表频域当中 xff0c 点
  • 偏最小二乘法PLS和PLS回归的介绍及其实现方法

    1 偏最小二乘法 xff08 PLS xff09 介绍 偏最小二乘法是一种新型的多元统计数据分析方法 xff0c 于1983年由S Wold和C Albano等人首次提出 偏最小二乘法实现了 xff0c 在一个算法下 xff0c 可以同时实
  • 功率放大芯片IR2184介绍

    IR2184引脚定义 xff1a IN一般为脉冲信号 xff0c 即全桥电路中的pwm波信号 xff0c 一般可以通过调节它的占空比来控制智能车电机的转速 SD信号为使能信号 xff0c 高电平有效 xff0c 芯片工作 Vb是高侧浮动电源
  • 为你解读7大类深度CNN架构创新综述(附论文)

    来源 xff1a 机器之心 本文约3000字 xff0c 建议阅读6分钟 本综述将最近的 CNN 架构创新分为七个不同的类别 xff0c 分别基于空间利用 深度 多路径 宽度 特征图利用 通道提升和注意力 深度卷积神经网络 xff08 CN
  • docker 入门 实例

    先决条件 验证是否已经做好准备 docker run hello world 使用Dockerfile定义容器 Dockerfile将在您的容器内定义环境中执行的操作 对网络接口和磁盘驱动器的访问在此内环境内实现虚拟化 xff0c 这将独立