【docker】Docker的基本指令和HTML/PYTHON/C++的简单创建示例

news2024/9/20 11:02:14

目录

🌊1. 什么是 Docker?

🌊2. Docker 安装

🌊3. Docker基本指令

🌊4. Docker 创建示例【联网情况】

🌍4.1 示例:HTML

🌍4.2 示例:Python 脚本

🌍4.3 示例:C++ 程序

🌊5. Docker 创建C++示例【无网情况】

🌍5.1 示例:Ubuntu环境

🌍5.2 示例:公司桌面云内

🌊6. Docker Hub 之上传与下载

🌍6.1 Docker Hub之上传

🌍6.2 Docker Hub之下载运行

🌊7. 结论


🌊1. 什么是 Docker?

Docker 是一个开源平台,专为简化开发、部署和运行应用程序而设计。通过使用称为“容器”(Container)的轻量级虚拟化技术,将应用程序及其依赖环境打包到一个独立的单元中,使应用程序能够在任何环境中一致地运行。

Docker 的核心概念

  1. 镜像(Image):镜像是一个只读模板,包含了运行应用程序所需的所有内容类似一个软件包,包含操作系统、应用程序代码、运行时、库和依赖项。镜像可以从 Docker Hub 或其他镜像仓库中获取,也可以自己创建。
    例子:如果你有 Python 应用程序,则可以创建一个包含 Python 解释器和应用程序代码的镜像。

  2. 容器(Container):容器是镜像的一个可运行实例,包含了运行应用程序的所有必要环境。容器是独立的、可移植的,并且可以在任何支持 Docker 的系统上运行【可认为是一个轻量级的、独立的虚拟机】
    例子:使用前面创建的 Python 镜像,你可以启动一个容器来运行你的应用程序。这个容器就像一个轻量级的虚拟机,里面有你的应用程序及其依赖项。

  3. Dockerfile:Dockerfile 是一个脚本文件,包含了一系列指令,用于定义如何创建 Docker 镜像。每条指令在 Docker 镜像中创建一个新的层(Layer)。
    例子:一个简单的 Dockerfile 可能包含以下内容:
     

    # 使用 Python 3.8 作为基础镜像
    FROM python:3.8-slim
    
    # 设置工作目录
    WORKDIR /app
    
    # 复制当前目录下的所有文件到工作目录
    COPY . .
    
    # 安装依赖包
    RUN pip install flask
    
    # 暴露容器内的 5000 端口
    EXPOSE 5000
    
    # 运行应用程序
    CMD ["python", "app.py"]
  4. Docker Hub:Docker Hub 是一个公共的镜像仓库,允许用户存储和分享 Docker 镜像。用户可以从 Docker Hub 下载已有的镜像,或者上传自己的镜像。
    例子:你可以从 Docker Hub 拉取官方的 Python 镜像,使用命令
     

    docker pull python:3.8-slim

🌊2. Docker 安装

传送门:【服务器】安装Docker环境_在服务器上安装docker


🌊3. Docker基本指令

# 1.列出正在运行的容器,包括停止的容器:
docker ps -a
# 如果查找名为 shuym-centos-container 的容器,可以执行以下命令:
docker ps -a | grep shuym-centos-container

# 2.使用 docker stop 命令停止容器。容器 ID 是 container_id
docker stop container_id
# 或者,容器 name 是 container_name
docker stop container_name


# 3.删除指定容器。假设容器 ID 是 container_id,执行以下命令删除容器:
docker rm container_id
# 或者,容器 name 是 container_name
docker rm container_name

# 4.列出所有本地镜像:
docker images

# 5.删除 Docker 镜像:假设镜像 ID 是 image_id,执行以下命令删除镜像:
docker rmi image_id

# 6.关闭 Docker 容器:停止容器而不删除它
docker stop container_id

# 7.启动指定容器:
docker start container_id

🌊4. Docker 创建示例【联网情况】

🌍4.1 示例:HTML

创建一个简单的 HTML 文件,作为 Web 服务器要提供的内容。

1. 创建 index.html 的文件:

vim index.html

内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>My Docker Website</title>
</head>
<body>
    <h1>Hello from Docker!</h1>
    <p>This is a simple Docker example.</p>
</body>
</html>

2. 创建 Dockerfile文件

该文件描述了如何构建 Docker 镜像:

vim Dockerfile

内容如下:

# 使用基础镜像
FROM nginx:latest

# 将本地文件复制到容器中的指定路径
COPY index.html /usr/share/nginx/html

# 暴露容器的端口
EXPOSE 80

该 Dockerfile 使用了 Nginx 的官方镜像作为基础,然后将我们的 index.html 文件复制到 Nginx 的默认网站目录,并暴露了容器的 80 端口。

3. 构建 Docker 镜像。

在项目文件夹中执行以下命令:

docker build -t my-docker-example .

这将根据 Dockerfile 中的描述构建一个名为 my-docker-example 的 Docker 镜像。

4. 运行 Docker 容器。

执行以下命令:

docker run -d -p 8080:80 my-docker-example

这将在后台运行我们的 Docker 容器,并将主机的 8080 端口映射到容器的 80 端口。

现在,可以打开浏览器访问 http://localhost:8080,将看到一个简单的网页,显示 "Hello from Docker!"。

如果不支持浏览器可以输入命令:

curl http://localhost:8080

可以看到对应内容。测试完记得清理该docker容器与模板。


🌍4.2 示例:Python 脚本

创建一个简单的 Python 脚本。

1. 创建一个名为 app.py 的文件:

vim app.py

内容如下:

# app.py

print("Hello from Docker!")

2. 创建一个 Dockerfile

用于描述如何构建我们的 Docker 镜像。在项目文件夹中创建一个名为 Dockerfile 的文件:

vim Dockerfile

内容如下:

# 使用基础镜像
FROM python:3.9-slim

# 将本地文件复制到容器中的指定路径
COPY app.py /app/app.py

# 设置工作目录
WORKDIR /app

# 运行 Python 应用程序
CMD ["python", "app.py"]

该 Dockerfile 使用了 Python 官方镜像作为基础,然后将我们的 app.py 文件复制到容器的 /app 目录,并设置了工作目录为 /app,最后通过 CMD 指令运行了 Python 应用程序。

3. 构建 Docker 镜像。

在项目文件夹中执行以下命令:

docker build -t my-python-app .

这将根据 Dockerfile 中的描述构建一个名为 my-python-app 的 Docker 镜像。

4. 运行 Docker 容器。

执行以下命令:

docker run my-python-app

这将运行 Docker 容器,并在控制台上打印 "Hello from Docker!"。

测试完记得清理该docker容器与模板。


🌍4.3 示例:C++ 程序

1. 创建C++程序

vim hello.cpp

内容如下:

#include <iostream>

int main() {
    std::cout << "Hello from Docker and C++!" << std::endl;
    return 0;
}

2. 创建 Dockerfile

用于描述如何构建我们的 Docker 镜像。

vim Dockerfile

内容如下:

# 使用基础镜像
FROM gcc:latest

# 将本地文件复制到容器中的指定路径
COPY hello.cpp /usr/src/hello.cpp

# 设置工作目录
WORKDIR /usr/src

# 编译 C++ 程序
RUN g++ -o hello hello.cpp

# 运行可执行文件
CMD ["./hello"]

这个 Dockerfile 使用了 GCC 官方镜像作为基础,然后将我们的 hello.cpp 文件复制到容器的 /usr/src 目录,并在容器中编译它。最后通过 CMD 指令运行了编译后的可执行文件。

3. 构建 Docker 镜像。

在项目文件夹中执行以下命令:

docker build -t my-cpp-app .

这将根据 Dockerfile 中的描述构建一个名为 my-cpp-app 的 Docker 镜像。

4. 运行 Docker 容器。

执行以下命令:

docker run my-cpp-app

这将运行 Docker 容器,并在控制台上打印 "Hello from Docker and C++!"。

测试完记得清理该docker容器与模板。


🌊5. Docker 创建C++示例【无网情况】

在没有网络的情况下,可以通过在联网环境中提前下载好所需的 Docker 镜像,并将其传输到无网络的环境中进行部署。

🌍5.1 示例:Ubuntu环境

步骤 1:在有网络环境中准备

1. 下载 GCC Docker 镜像

docker pull gcc:latest

2. 保存 Docker 镜像到文件:将下载的 Docker 镜像保存为一个 tar 文件

docker save -o gcc_latest.tar gcc:latest

将 gcc_latest.tar 拷贝到无法联网的主机。


步骤 2:在无网络环境中构建和运行 Docker 镜像

 1. 创建C++程序

vim hello.cpp

内容如下:

#include <iostream>

int main() {
    std::cout << "Hello from Docker and C++!" << std::endl;
    return 0;
}

2. 创建 Dockerfile

用于描述如何构建我们的 Docker 镜像。

vim Dockerfile

内容如下:

# 使用基础镜像
FROM gcc:latest

# 将本地文件复制到容器中的指定路径
COPY hello.cpp /usr/src/hello.cpp

# 设置工作目录
WORKDIR /usr/src

# 编译 C++ 程序
RUN g++ -o hello hello.cpp

# 运行可执行文件
CMD ["./hello"]

这个 Dockerfile 使用了 GCC 官方镜像作为基础,然后将我们的 hello.cpp 文件复制到容器的 /usr/src 目录,并在容器中编译它。最后通过 CMD 指令运行了编译后的可执行文件。

3. 加载 Docker 镜像

在无联网环境中,将之前传输的 gcc_latest.tar 文件加载到 Docker:

docker load -i gcc_latest.tar

4. 构建 Docker 镜像

在项目文件夹中执行以下命令:

docker build -t my-cpp-app .

这将根据 Dockerfile 中的描述构建一个名为 my-cpp-app 的 Docker 镜像。

5. 运行 Docker 容器

docker run my-cpp-app

这将运行 Docker 容器,并在控制台上打印 "Hello from Docker and C++!"。

测试完记得清理该docker容器与模板。


🌍5.2 示例:公司桌面云内

1. 创建并运行 Docker 容器
创建并运行容器,指定共享内存大小,并挂载本地目录到容器目录。假设本地需要挂载的目录是 /home/shuym/,在容器内访问路径是 /root/host

docker run -it --privileged --name shuym-centos-container --shm-size=1g -v /home/shuym/my_test:/root/host centos:7.4.1708 /bin/bash

命令解释

  • docker run:这是用来创建并启动一个新的容器的命令。

  • -it

    • -i(interactive):保持标准输入打开,即使没有附加到容器上。
    • -t(tty):分配一个伪终端。通常与 -i 一起使用,以便用户能够以交互模式使用容器。
  • --privileged:授予容器扩展权限。这允许容器内的进程执行更多的系统操作,例如挂载设备、修改网络设置等。使用该标志可以让容器拥有更高的权限,但也存在安全风险。

  • --name shuym-centos-container:为容器指定一个名称 shuym-centos-container,便于后续管理和识别。

  • --shm-size=1g:设置容器的 /dev/shm 共享内存的大小为 1GB。默认值通常是 64MB。

  • -v /home/shuym/my_test:/root/host

    • -v(volume):挂载一个主机目录到容器中。这是一个数据卷的映射,用于在主机和容器之间共享文件。
    • /home/shuym/my_test:主机上的目录。
    • /root/host:容器中的目录。在容器中,这个目录会映射到主机上的 /home/shuym/my_test 目录,因此你可以在容器中访问和操作主机上的这些文件。
  • centos:7.4.1708:指定使用的 Docker 镜像。这表示基于 CentOS 7.4.1708 版本的镜像来创建容器。

  • /bin/bash:容器启动时执行的命令。在这种情况下,它启动一个 Bash shell,这样你可以在容器中进行交互式操作。

2. 进入创建的目录

cd /root/host

即可将原目录内容创建到docker 容器当前目录下。


🌊6. Docker Hub 之上传与下载

🌍6.1 Docker Hub之上传

首先,需要在 Docker Hub 上创建一个帐户。

在终端登录你的 Docker Hub 帐户:

docker login

输入你的 Docker Hub 用户名和密码。

接下来,需要给 Docker 镜像一个标签,以便将其上传到 Docker Hub。使用以下命令:

docker tag my-docker-example your-docker-hub-username/my-docker-example:latest

确保将 your-docker-hub-username 替换为你在 Docker Hub 上的用户名。

最后,使用以下命令将标记过的镜像上传到 Docker Hub:

docker push your-docker-hub-username/my-docker-example:latest

这会将你的 Docker 镜像上传到 Docker Hub。


🌍6.2 Docker Hub之下载运行

使用以下命令从 Docker Hub 下载你的 Docker 镜像:

docker pull your-docker-hub-username/my-docker-example:latest

这会从 Docker Hub 下载你的 Docker 镜像到本地机器。

下载完成后,你可以运行该镜像:

docker run -d -p 8080:80 your-docker-hub-username/my-docker-example:latest

这将在后台运行从 Docker Hub 下载的 Docker 镜像,并将主机的 8080 端口映射到容器的 80 端口。

现在,你可以在浏览器中打开 http://localhost:8080,你应该能够看到与之前相同的简单网页,显示 "Hello from Docker!"。


🌊7. 结论

Docker 通过容器化技术简化了应用程序的开发、测试和部署过程,使得在不同环境中的应用程序运行更加一致。通过上述示例,可以看到如何编写 Dockerfile 构建镜像并运行容器。掌握 Docker,可以大大提升开发和运维的效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1697223.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

log4j2远程代码执行

漏洞复现 漏洞复现2 这个框架不是web框架了&#xff0c;不是服务器web网站框架了&#xff0c;是java日志框架&#xff0c;就是记录日志信息&#xff0c;每一个程序都有一个日志文件&#xff0c;这个就是java里面记录日志的一个框架&#xff0c;它存在的点也是日志框架那几个代…

Python语法(全)

前言&#xff1a; 下面是Python基本的语法&#xff0c;大家耐心观看&#xff01; 1.基础语法 1.1字面量 字面量&#xff1a;在代码中&#xff0c;被写下来的的固定的值&#xff0c;称之为字面 1.2字符串 字符串&#xff08;string&#xff09;&#xff0c;又称文本&#xff…

防火墙——域网络、专用网络、公用网络

在防火墙设置中&#xff0c;域网络、专用网络和公用网络是指计算机连接到网络时所处的不同环境。每种环境都有不同的安全级别和配置。 1、域网络&#xff08;宽松&#xff09; 域网络是指计算机加入了一个Windows域&#xff08;Domain&#xff09;环境&#xff0c;这通常在企业…

v-rep---script-function

作用&#xff0c;实现&#xff0c;参数讲解。 script-function标签 作用 问题&#xff1a;如何在插件的接口中调用lua脚本中定义的函数&#xff1f; 用于声明一个函数&#xff0c;这个函数的作用是通过v-rep提供的接口sim::callScriptFunctionEx()调用脚本的函数&#xff0…

用AI比赛助手降维打击数学建模,比赛过程详细介绍,这保研不就稳了吗

数学建模是个小众的赛道&#xff0c;可能很多大学生不知道&#xff0c;简单来说&#xff1a;他能薅学分、保研加分、毕业好找工作(简历上写一辈子)&#xff0c;尤其是基于GPT-4o模型&#xff0c;简直对他们是降维打击。 数学建模每年的比赛非常多&#xff0c;像国赛、美赛、深…

直流电机的基本原理与结构

一些基本定理 磁感应强度&#xff08;又称磁通密度&#xff09;B —— 表征磁场强弱及方向的物理量。单位&#xff1a;T 右手定则&#xff1a;伸开右手&#xff0c;使拇指与其余四个手指垂直&#xff0c;并且都与手掌在同一平面内&#xff1b;让磁感线从手心进入&#xff0c;…

软件设计师基础知识难点总结

软件设计师基础知识难点 I/O设备管理软件一般分为4个层次&#xff0c;如下图所示。 用户进程与设备无关的系统软件设备驱动程序中断处理程序硬件 直接查询控制 分为有无条件传送和程序查询方式&#xff0c;都需要通过CPU执行程序来查询外设的状态&#xff0c;判断外设是否准备好…

牛客热题:有效括号

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;有效括号题目链接方法一&#x…

数据结构--二叉搜索树

目录 二叉搜索树的概念 二叉树的实现 结点类 函数接口总览 实现二叉树 二叉搜索树的应用 K模型 KV模型 二叉搜索树的性能分析 二叉搜索树的概念 二叉搜索树&#xff08;Binary Search Tree&#xff0c;简称BST&#xff09;是一种特殊的二叉树&#xff0c;其具有以下几…

CSP俄罗斯方块(简单易懂)

开始将题目理解成了&#xff0c;开始的列应该是从输入图案的最左端开始计算&#xff0c;将前面所有的空列都删掉&#xff0c;代码如下&#xff1a; #include<bits/stdc.h> using namespace std; const int N 1e410; const int M 1e510; int a[20][20]; int b[5][5];int…

【yolov10】使用自己的数据集训练目标检测模型

【yolov10】使用自己的数据集训练目标检测模型 一、anaconda安装二、环境配置三、数据集制作1、labelimg的安装2、使用labelimg 四、正片1、下载yolov10源码2、数据集目录3、训练4、推理 一、anaconda安装 直接参考前一篇博客&#xff1a; https://blog.csdn.net/m0_71523511/…

八国多语言微盘微交易所系统源码 单控点控 K线完好

安装环境linux NGMySQL5.6PHP7.2&#xff08;函数全删&#xff09;pm2管理器&#xff08;node版本选择v12.20.0&#xff09; config/ database.php 修改数据库链接 设置运行目录 public 伪静态thinkphp

【图解IO与Netty系列】IO的同步与异步、阻塞与非阻塞,Linux五种IO模型

IO的同步与异步、阻塞与非阻塞&#xff0c;Linux五种IO模型 IO的同步与异步&#xff0c;阻塞与非阻塞阻塞IO与非阻塞IO同步IO与异步IO Linux五种IO模型BIONIOIO多路复用信号驱动IOAIO IO的同步与异步&#xff0c;阻塞与非阻塞 我们有时会看到类似于同步阻塞式IO、同步非阻塞式…

【python】python 全国5A级景区数据采集与pyecharts可视化(源码+数据+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

C++ prime 第五版 第14章 重载运算与类型转换

一、基本概念 重载的运算符是具有特殊名字的函数&#xff1a;它们的名字由关键字operator和其后要定义的运算符号共同组成。和其他函数一样&#xff0c;重载的运算符也包含返回类型、参数列表以及函数体。 我们不能为内置类型的运算对象重定义运算符。对于一个运算符函数来说&…

美甲店会员预约系统管理小程序的作用是什么

女性爱美体现在方方面面&#xff0c;美丽好看的指甲也不能少&#xff0c;市场中美甲店、小摊不少&#xff0c;也跑出了不少连锁品牌&#xff0c;70后到00后&#xff0c;每个层级都有不少潜在客户&#xff0c;商家需要获取和完善转化路径&#xff0c;不断提高品牌影响力与自身内…

Python学习---利用Python操作数据库

如何理解连接connection和游标 cursor&#xff1f; connection就像是连接出发地和目的地的高速公路cursor就像是在高速公路上的货车-拉货我们使用游标就可以完成对数据的操作当我们完成操作完成后就可以停下货车&#xff0c;然后公路再停止使用。 pysql实现查询 ""…

Linux基础(七):Linux 系统上的库文件生成与使用

学过C语言我们知道&#xff0c;C语言有标准库和自定义库&#xff0c;这些方便了我们的实际开发&#xff0c;提供了已经实现好的函数接口&#xff0c;我们使用的时候&#xff0c;只需要引入头文件即可&#xff0c;那具体的实现过程又是怎么样的呢&#xff1f;我们又该如何实现我…

[7] CUDA之常量内存与纹理内存

CUDA之常量内存与纹理内存 1. 常量内存 NVIDIA GPU卡从逻辑上对用户提供了 64KB 的常量内存空间&#xff0c;可以用来存储内核执行期间所需要的恒定数据常量内存对一些特定情况下的小数据量的访问具有相比全局内存的额外优势&#xff0c;使用常量内存也一定程序上减少了对全局…

Java进阶学习笔记24——Object类

Object类: Object类是Java中所有类的祖宗类&#xff0c;因此&#xff0c;Java中所有类的对象都可以直接使用Object类中提供的一些方法。 所有类都是Object类的子孙类。 API文档&#xff1a; Object类的成员方法&#xff1a; Object类的常见方法&#xff1a; Student类&…