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

news/2024/7/22 0:00:22/文章来源:https://blog.csdn.net/m0_57532432/article/details/139098676

目录

🌊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.pyprint("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.luyixian.cn/news_show_1054485.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ableton Live 11 Suite for Mac:音乐创作的全能伙伴

在数字音乐创作的广阔天地中&#xff0c;Ableton Live 11 Suite for Mac无疑是一颗璀璨的明星。作为一款专业的音乐制作软件&#xff0c;它集合了音频录制、编辑、混音、母带制作等全方位功能&#xff0c;为Mac用户提供了无与伦比的音乐创作体验。 Ableton Live 11 Suite拥有直…

聊聊最近很火的混合专家模型(MoE)

前段时间&#xff0c;在2024年NVIDIA GTC大会上&#xff0c;英伟达不小心透露了GPT-4采用了MoE架构&#xff0c;模型有1.8万亿参数&#xff0c;由8个220B模型组成&#xff0c;与此前的GPT-4泄露的信息一致。 近半年多以来&#xff0c;各类MoE大模型更是层出不穷。在海外&#…

【机器学习】基于tensorflow实现你的第一个DNN网络

博客导读&#xff1a; 《AI—工程篇》 AI智能体研发之路-工程篇&#xff08;一&#xff09;&#xff1a;Docker助力AI智能体开发提效 AI智能体研发之路-工程篇&#xff08;二&#xff09;&#xff1a;Dify智能体开发平台一键部署 AI智能体研发之路-工程篇&#xff08;三&am…

FTP协议——BFTPD基本操作(Ubuntu+Win)

1、描述 本机&#xff08;Win10&#xff09;与虚拟机&#xff08;Ubuntu22.04.4&#xff09;上的BFTPD服务器建立FTP连接&#xff0c;执行一些基本操作。BFTPD安装教程&#xff1a;FTP协议——BFTPD安装&#xff08;Linux&#xff09;-CSDN博客 2、 步骤 启动BFTPD。启动文件…

工程文档CAD转换必备!快速将 DWG 转换到 PNG ~

Aspose.CAD 是一个独立的类库&#xff0c;以加强Java应用程序处理和渲染CAD图纸&#xff0c;而不需要AutoCAD或任何其他渲染工作流程。该CAD类库允许将DWG, DWT, DWF, DWFX, IFC, PLT, DGN, OBJ, STL, IGES, CFF2文件、布局和图层高质量地转换为PDF和光栅图像格式。 Aspose AP…

uni-app解决表格uni-table样式问题

一、如何让表格文字只显示一行&#xff0c;超出部分用省略号表示 步骤 &#xff1a; 给table设置table-layout:fixed; 列宽由表格宽度和列宽度设定。&#xff08;默认是由单元格内容设定&#xff09;让表格元素继承父元素宽度固定table-layout: inherit;overflow: hidden;超过…

Laravel 图片添加水印

和这个配合使用 Laravel ThinkPhP 海报生成_laravel 制作海报-CSDN博客 代码 //水印 $x_length $imageInfo[0]; $y_length $imageInfo[1];$color imagecolorallocatealpha($posterImage, 255, 255, 255, 70); // 增加透明度参数alpha$font_size 40; //字体大小 $angle …

面向链接预测的知识图谱表示学习方法综述

源自&#xff1a;软件学报 作者&#xff1a;杜雪盈, 刘名威, 沈立炜, 彭鑫 注&#xff1a;若出现无法显示完全的情况&#xff0c;可搜索“人工智能技术与咨询”查看完整文章 摘 要 作为人工智能的重要基石, 知识图谱能够从互联网海量数据中抽取并表达先验知识, 极大程度解决…

Make-An-Audio——用于语音生成的提示增强扩散模型

0.引言 论文提出了一个从文本生成语音的扩散模型 Make-An-Audio。该模型将文本提示作为输入&#xff0c;并据此生成语音。例如&#xff0c;输入 “一只猫在喵喵叫&#xff0c;一个年轻女人的声音”&#xff0c;就会输出猫在喵喵叫&#xff0c;一个女人在说话的音频。这项研究已…

基于SA模拟退火优化算法的TSP问题求解matlab仿真,并对比ACO蚁群优化算法

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于SA模拟退火优化算法的TSP问题求解matlab仿真,并对比ACO蚁群优化算法,对比两个算法的仿真时间&#xff0c;收敛曲线&#xff0c;以及路径规划的结果&#xff0…

GDPU Java 天码行空13

&#xff08;一&#xff09;实验目的 1、掌握JAVA中与网络程序开发相关的知识点&#xff1b; 2、理解并掌握网络编程开发思想及方法&#xff1b; 3、熟悉项目开发的分包方法和依据&#xff1b; 4、实现聊天室中客服端和服务器端的实现方法&#xff1b; 5、熟悉多线程程序开发方…

前端 |【JavaScript】JS 删除数组中某个元素的方法有哪些?超简洁六大方法!

一、length属性 在JavaScript中&#xff0c;length属性用于获取数组的长度。可用于删除数组中的最后一个元素&#xff0c;只需将长度减1即可。 // 创建一个数组 var a [1, 2, 3, 4, 5]; // 使用length属性获取数组长度 console.log(a.length); // 输出&#xff1a;5 a.lengt…

工业采集网关的功能主要有哪些?为企业带来哪些价值提升?天拓四方

一、行业背景 随着工业领域的快速发展&#xff0c;尤其是智能制造的兴起&#xff0c;工业自动化、智能化和数字化已成为工业转型升级的必然趋势。在这一进程中&#xff0c;工业数据采集和处理扮演着至关重要的角色。作为连接工业现场设备、传感器与上层管理系统的桥梁&#xf…

喜讯 国信华源荣获中国安全科技进步奖二等奖

喜讯&#xff01;喜讯&#xff01; 近日&#xff0c;由北京国信华源科技有限公司携手中国地质环境监测院等单位共同参与完成的《基于云端协同的突发性地质灾害三维场景模型构建与动力学模拟关键技术研究》项目荣获中国安全生产协会颁发的“第四届安全科技进步奖二等奖”荣誉证…

数据结构(一)顺序表

目录 一、概念&#xff08;一&#xff09;数据结构的三元素1. 逻辑结构&#xff08;1&#xff09;线性结构&#xff08;2&#xff09;非线性结构 2. 存储结构&#xff08;1&#xff09;顺序存储&#xff08;2&#xff09;链式存储&#xff08;3&#xff09;索引存储 3. 运算 &a…

【C++】<图形库> 三人成棋(面向对象写法)

目录 一、游戏需求 二、程序架构 三、代码实现 四、实现效果 五、已知BUG 一、游戏需求 构建一个五子棋游戏&#xff0c;在自定义棋盘宽度和高度的基础上&#xff0c;实现三人对战功能&#xff0c;并且能判定谁输谁赢。 二、程序架构 (1) 对象分析&#xff1a; 【1】 需…

mysql去除重复数据

需求描述 doc表有很多重复的title,想去除掉重复的记录 表结构 CREATE TABLE doc (id INT PRIMARY KEY,title VARCHAR(255),content TEXT );去重SQL -- 创建临时表 CREATE TEMPORARY TABLE temp_doc AS SELECT * FROM doc WHERE 10;-- 插入唯一的记录&#xff08;每个title最…

MiniPCIe/SATA双用插槽无法识别minipcie模块怎么回事!

在计算机和嵌入式系统设计中,MiniPCIe/SATA双用插槽作为一种高度集成的解决方案,提供了极大的灵活性与扩展能力。它不仅能够支持MiniPCIe接口的无线网卡、固态硬盘控制器等模块,还能适应SATA接口的硬盘或固态存储设备,大大丰富了系统配置的可能性。尽管设计初衷良好,但在实…

三方语言中调用, Go Energy GUI编译的dll动态链接库CEF

如何在其它编程语言中调用energy编译的dll动态链接库&#xff0c;以使用CEF 或 LCL库 Energy是Go语言基于LCL CEF开发的跨平台GUI框架, 具有很容易使用CEF 和 LCL控件库 interface 便利 示例链接 正文 为方便起见使用 python 调用 go energy 编译的dll 准备 系统&#x…

ubuntu server版 虚拟机根目录磁盘扩容

之前一直使用桌面版ubuntu,因为项目原因需要拉取的代码太大了且项目比较多选择了体量更小的Ubuntu server版,在使用中发现根目录的磁盘很快就用满了 如上,明明分配的300G但是/dev/mapper/ubuntu--vg-ubuntu--lv 只有98G都用满了 server版本与桌面版不同的是在server版安装的时…