docker 容器学习

笔者来介绍一下docker 容器的学习

1、docker容器背景

docker 里面有两个概念,镜像可看成一个类,而容器则是镜像的一个实例,从这个来看,那么一般镜像是一个,而容器可以有很多个。

  • 镜像:带一堆工具链的操作系统。
  • 容器:镜像的实例,可在此环境进行编译等操作,用完之后可以删除,也可以重复利用。

当然镜像也可以有很多个,装不同的环境,用的时候直接生成一个容器用即可。
在这里插入图片描述

2、docker环境搭建

  • 安装docker环境

sudo apt install docker.io

在这里插入图片描述

  • 修改docker镜像源

vim /etc/docker/daemon.json

"https://docker.registry.cyou"
"https://docker-cf.registry.cyou"
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi"
"https://dockertest.jsdelivr.fyi"
"https://mirror.aliyuncs.com".
"https://dockerproxy.com"
"https://mirror.baidubce .com"
"https://docker.m.daocloud.io”
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn"
"https://docker.mirrors.ustc.edu.cn"
"https://mirror.iscas.ac.cn"
"https://docker.rainbond.cc"
"https://udron5t9.mirror.aliyuncs.com

在这里插入图片描述
修改完源之后,确认可以正常拉取镜像这工作正常。

3、docker 命令操作

  • 拉取原始docker镜像
    在这里插入图片描述

  • 重命名docker镜像
    docker tag ubuntu:20.04 linux:ubuntu_20
    在这里插入图片描述

  • docker容器创建并进入(镜像名称 or 镜像ID均可)

docker run -it linux:ubuntu_20
docker run -it d06b4ee4192a

在这里插入图片描述

  • 进入已有docker环境

docker start 容器id // 启动容器
docker exec -it 容器id /bin/bash // bash方式交互式进入容器

在这里插入图片描述

  • docker容器环境进入(映射host与docker环境)

docker run --rm -it -w /root -v “$(pwd)/:/root” loooveos_linux:ubuntu_20
+ --rm:用完docker 容器就删除
+ -it:交互式形式进入docker容器,不然就在host层进行访问docker并执行操作
+ -w:指定docker 容器中的工作路径
+ -v:将host的路径映射到docker容器里面,“host路径:docker容器路径”

在这里插入图片描述

  • docker 容器环境变更提交到docker镜像

docker commit fab6e1f561b1 loooveos_linux:ubuntu_20
docker commit 容器id 镜像名称(or 镜像ID)
commit 之后,可以看image的历史记录,docker history 镜像

在这里插入图片描述

docker 容器是实例,可以实际操作并下载环境工具,这样可以提交到镜像,后续的镜像就带这样的工具运行了,注意提交的时候,tag变更一下,这样容器的版本历史都在。

  • docker 镜像 保存与加载

docker save -o loooveos_linux.tar loooveos_linux:ubuntu_20
docker load -i loooveos_linux.tar

在这里插入图片描述

  • 利用dockerfile 编译docker镜像

    • 利用makefile + dockerfile 生成docker镜像,
    • dockfile 配置docker 镜像的工具链,目录以及环境变量等
    • makefile可以用于执行docker命令,

dockerfie 如下

ARG UBUNTU_VERSION
FROM ubuntu:${UBUNTU_VERSION}.04# 安装必要的工具
COPY sources.list /etc/apt/sources.list
RUN apt-get update 
RUN apt-get -y update &&\DEBIAN_FRONTEND=noninteractive apt-get install -y \gcc \pkg-config \make \wget \cmake \git \autoconf \automake \libtool \python \python3 \python3-dev \locales \unzip \subversion \texinfo \sshpass \patchelf \util-linux RUN mkdir /linux
RUN mkdir /linux/llvm
COPY ./llvm /linux/llvm
RUN mkdir /linux/marvell-gcc
COPY ./marvell-gcc-5.2.1-16.02.0 /linux/marvell-gcc
RUN mkdir /linux/llvm-linux
COPY ./LLVM-19.1.0-Linux-X64 /linux/llvm-linuxENV PATH="$PATH:/linux/llvm-linux/bin"
RUN echo $PATH

makfile如下:

.PHONY: all image# docker image名称
TOOLCHAIN_DOCKER_IMAGE ?= linux:v1.1.0# Ubuntu默认使用20或18
UBUNTU_VERSION ?= 20all:  image# 编译docker image
image: docker build -f Dockerfile --network=host \--build-arg UBUNTU_VERSION=${UBUNTU_VERSION} \-t ${TOOLCHAIN_DOCKER_IMAGE} .

4、docker 编译

  • 非交互式命令,最后加bash -c “命令” 就可以进入docker 并执行相关命令。
  • 笔者test_hello目录下面有个hello.c文件,
  • 可以执行 gcc hell0.c 并执行./a.out文件
  • 当然也可以执行其他命令,比如makefile 或者python 脚本。
    在这里插入图片描述

5、参考与注意事项

注意事项:拉取的docker镜像源异常,无法下载,需要替换镜像源,包括没有基础的vim命令,必须使用外部文件替换,无法本地直接操作。
在这里插入图片描述

docker 命令执行

linux@android-compile-server:~/test_docker$ make
docker build -f Dockerfile --network=host \--build-arg UBUNTU_VERSION=20 \-t linux:v1.1.0 .
Sending build context to Docker daemon  9.152GB
Step 1/14 : ARG UBUNTU_VERSION
Step 2/14 : FROM ubuntu:${UBUNTU_VERSION}.04---> b7bab04fd9aa
Step 3/14 : COPY sources.list /etc/apt/sources.list---> 78f6741b1441
Step 4/14 : RUN apt-get update---> Running in e1cfdf9d197f
Fetched 35.7 MB in 3s (13.3 MB/s)
Reading package lists...
Removing intermediate container e1cfdf9d197f---> 0fe273ff0e56
Step 5/14 : RUN apt-get -y update &&    DEBIAN_FRONTEND=noninteractive apt-get install -y                       gcc             pkg-config             make             wget                                     cmake             git             autoconf             automake             libtool             python             python3             python3-dev             locales                                     unzip             subversion             texinfo             sshpass             patchelf                         util-linux                      vim---> Running in 0b41ef457f62
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
util-linux is already the newest version (2.34-0.1ubuntu9.6).
The following additional packages will be installed:alsa-topology-conf alsa-ucm-conf autotools-dev binutils binutils-commonbinutils-x86-64-linux-gnu ca-certificates cmake-data cpp cpp-9 file gcc-9gcc-9-base git-man krb5-locales less libapr1 libaprutil1 libarchive13libasan5 libasn1-8-heimdal libasound2 libasound2-data libatomic1libauthen-sasl-perl libbinutils libbrotli1 libbsd0 libc-dev-bin libc6libc6-dev libcanberra0 libcbor0.6 libcc1-0 libcrypt-dev libctf-nobfd0libctf0 libcurl3-gnutls libcurl4 libdata-dump-perl libdpkg-perl libedit2libencode-locale-perl liberror-perl libexpat1 libexpat1-dev libfido2-1libfile-fcntllock-perl libfile-listing-perl libfont-afm-perl libgcc-9-devlibgdbm-compat4 libgdbm6 libglib2.0-0 libglib2.0-data libgomp1 libgpm2libgssapi-krb5-2 libgssapi3-heimdal libhcrypto4-heimdal libheimbase1-heimdallibheimntlm0-heimdal libhtml-form-perl libhtml-format-perllibhtml-parser-perl libhtml-tagset-perl libhtml-tree-perllibhttp-cookies-perl libhttp-daemon-perl libhttp-date-perllibhttp-message-perl libhttp-negotiate-perl libhx509-5-heimdal libicu66libio-html-perl libio-socket-ssl-perl libisl22 libitm1 libjsoncpp1libk5crypto3 libkeyutils1 libkrb5-26-heimdal libkrb5-3 libkrb5support0libldap-2.4-2 libldap-common liblocale-gettext-perl liblsan0 libltdl-devlibltdl7 liblwp-mediatypes-perl liblwp-protocol-https-perl libmagic-mgclibmagic1 libmailtools-perl libmpc3 libmpdec2 libmpfr6 libnet-http-perllibnet-smtp-ssl-perl libnet-ssleay-perl libnghttp2-14 libogg0 libperl5.30libpsl5 libpython2-stdlib libpython2.7-minimal libpython2.7-stdliblibpython3-dev libpython3-stdlib libpython3.8 libpython3.8-devlibpython3.8-minimal libpython3.8-stdlib libquadmath0 libreadline8 librhash0libroken18-heimdal librtmp1 libsasl2-2 libsasl2-modules libsasl2-modules-dblibserf-1-1 libsigsegv2 libsqlite3-0 libssh-4 libssl1.1 libsvn1 libtdb1libtext-unidecode-perl libtimedate-perl libtry-tiny-perl libtsan0 libubsan1liburi-perl libutf8proc2 libuv1 libvorbis0a libvorbisfile3 libwind0-heimdallibwww-perl libwww-robotrules-perl libx11-6 libx11-data libxau6 libxcb1libxdmcp6 libxext6 libxml-libxml-perl libxml-namespacesupport-perllibxml-parser-perl libxml-sax-base-perl libxml-sax-expat-perllibxml-sax-perl libxml2 libxmuu1 linux-libc-dev m4 manpages manpages-devmime-support netbase openssh-client openssl patch perl perl-modules-5.30perl-openssl-defaults publicsuffix python2 python2-minimal python2.7python2.7-minimal python3-distutils python3-lib2to3 python3-minimalpython3.8 python3.8-dev python3.8-minimal readline-common shared-mime-infosound-theme-freedesktop tex-common tzdata ucf vim-common vim-runtime xauthxdg-user-dirs xxd xz-utils zlib1g-dev
Suggested packages:

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

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

相关文章

MongoDB社区版安装(windows)

下载地址 官网: MongoDB: The World’s Leading Modern Database | MongoDB 8.0.11版本下载地址: https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-8.0.11.zip 安装 解压安装包 解压结果目录如下: bin目录介绍 文件名称作用…

Git上传与下载GitHub仓库

新建GitHub仓库 … 本地上传GitHub 第一步:git add .第二步:git commit -m your content第三步:git push xxx main或者git push xxx master 对于第三步,首先看自己建立的仓库是master分支,还是main分支。以前都是默认m…

OpenCV 官翻 3 - 特征检测 Feature Detection

文章目录理解特征目标解释Harris角点检测目标理论OpenCV 中的 Harris 角点检测器亚像素级精度角点检测练习Shi-Tomasi角点检测器与优质跟踪特征目标理论基础代码SIFT(尺度不变特征变换)简介目标理论1、尺度空间极值检测2、关键点定位3、方向分配4、关键点…

2️⃣处理文本数据

本章介绍 为大语言模型的训练准备文本数据集将文本分割成词和子词token字节对编码(Byte Pair Encoding,BPE):一种更为高级的文本分词技术使用滑动窗口方法采样训练示例将tokens转换为向量,输入到大语言模型中 文章目录本章介绍2.1 理解词嵌入2.2 文本分词2.3 将tok…

TestCase Studio - 自动生成测试用例详解

你是否也曾为编写测试用例而头疼?点击按钮、填写表单、截图说明——这些重复操作让人心生倦意。 而现在,只需动动鼠标,TestCase Studio 就能自动录制你的 Web 操作,生成清晰的“Plain English”步骤、截图和定位器,彻…

Rust+ChatBoxAI:实战

Chatbox AI Chatbox AI 是一款基于人工智能技术的智能助手工具,旨在通过自然语言交互帮助用户完成多种任务。以下是其核心功能与特点: 功能概述 多模型支持:可连接 OpenAI、Claude、Gemini 等主流大语言模型,用户能自由切换不同 AI 服务。 本地运行:支持离线使用,数据隐…

服务器与工控机的区别解析

服务器和工控机虽然都是计算机,但它们的设计目标、使用环境和核心特性有本质的区别,就像轿车和越野车虽然都是车,但用途和构造截然不同。以下是它们的主要区别:核心设计目标:服务器: 数据处理、存储、网络服…

【大模型】深入解析大模型推理架构之 Prefill-Decode Disaggregation (PD分离)

深入解析大模型推理架构之 Prefill-Decode Disaggregation (PD分离) 文章目录深入解析大模型推理架构之 Prefill-Decode Disaggregation (PD分离)1 从统一到分离,推理架构为何演进?2 什么是Prefill-Decode分离?3 PD分离系统的工作流程4 PD分离…

D3动画--动态绘制文本下划线,支持自定义曲线

前言:在现实生活中,看书的时候,在文本的下面画个波浪线,画个横线,是很常见的行为。本篇文章使用D3动画来实现一个给文本绘制下划线的效果,可以暂停绘制,继续绘制,重新绘制&#xff0…

单表查询-分页提前获取数据

1、 问题 以下的例子如何优化呢&#xff1f; SELECT * FROM(SELECT INNER_TABLE.*, ROWNUM OUTER_TABLE_ROWNUM FROM (SELECT t1.* FROM ( SELECT * FROM T1 ) t1 WHERE 1 1 ORDER BY T1.TTIME DESC)INNER_TABLE ) OUTER_TABLE WHERE OUTER_TABLE_ROWNUM<25AND OUTER_TA…

Oracle触发器:数据世界的“隐形守护者“

今天&#xff0c;我想和大家聊一个在Oracle数据库领域既强大又神秘的话题——触发器&#xff08;Trigger&#xff09;​。在座的各位可能都写过SQL语句&#xff0c;做过表结构设计&#xff0c;甚至用过存储过程&#xff0c;但有很多人对触发器的态度可能是"既爱又怕"…

Python桌面版数独游戏(三版)-增加难易度模式

数独游戏难度模式解析 在数独游戏中&#xff0c;难度通常由已知数字&#xff08;提示数&#xff09;的数量决定。难度越高&#xff0c;已知数字越少&#xff0c;玩家需要推理的步骤越多。以下是不同模式下的算法区别和核心代码解析。 文章目录数独游戏难度模式解析1. **难度模…

k8s查看某个pod的svc

在 Kubernetes 中&#xff0c;要查看与特定 Pod 相关的 Service&#xff0c;可以通过以下方法&#xff1a;#### 方法一&#xff1a;通过标签匹配1. **获取 Pod 的标签**bashkubectl get pod <pod-name> --show-labels输出示例&#xff1a;NAME READY STATUS RESTARTS AGE…

通俗易懂卷积神经网络(CNN)指南

本文用直观类比和可视化方法&#xff0c;帮你彻底理解CNN的工作原理&#xff0c;无需深厚数学基础也能掌握计算机视觉的核心技术。卷积神经网络&#xff08;CNN&#xff09;是深度学习中革命性的架构&#xff0c;它彻底改变了计算机"看世界"的方式。本文将用最直观的…

AV1平滑缓冲区

对于解码的每一帧视频数据&#xff0c;解码器都必须从缓冲池中找到一个尚未被使用的帧缓冲区插槽来存储解码后的数据。分配的帧缓冲区插槽用于临时保存解码过程中生成的帧数据&#xff0c;直到它们被用于显示或进一步的处理。函数get_free_buffer的作用是在缓冲池中搜索尚未被分…

Python并发编程:突破GIL枷锁,高效利用多核CPU

解密concurrent.futures的双引擎&#xff1a;线程池与进程池的明智选择在Python并发编程领域&#xff0c;concurrent.futures模块堪称利器&#xff0c;但如何正确使用其两大核心组件——ThreadPoolExecutor和ProcessPoolExecutor&#xff0c;却让许多开发者困惑。本文将深入剖析…

在Windows Server 2012 R2中安装与配置IIS服务并部署mssql靶机教程

在Windows Server 2012 R2中安装与配置IIS服务全指南 IIS&#xff08;Internet Information Services&#xff09;作为Windows系统自带的Web服务组件&#xff0c;在企业级Web部署、内网服务搭建等场景中应用广泛。本文将详细介绍在Windows Server 2012 R2中安装IIS服务的完整流…

C#/.NET/.NET Core技术前沿周刊 | 第 47 期(2025年7.14-7.20)

前言 C#/.NET/.NET Core技术前沿周刊&#xff0c;你的每周技术指南针&#xff01;记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿&#xff0c;助力技术成长与视野拓宽。 欢迎投稿、推荐…

一.AD域与DFS集群-AD域安装

目录 1.网络规划 2.主域控安装 3.辅助域控安装 1.网络规划 服务器名称IP地址DNS名称主域控192.168.188.2pdc.test.cn辅助域控192.168.188.3bdc.test.cnDFS1192.168.188.4dfs1.test.cnDFS2192.168.188.5dfs2.test.cn 服务器系统版本为windows server 2022 2.主域控安装 第一…

BUUCTF在线评测-练习场-WebCTF习题[BSidesCF 2020]Had a bad day1-flag获取、解析

解题思路打开靶场&#xff0c;作者对我们进行了亲切的关怀老规矩查看源码、抓包并没有发现什么猫腻点下面两个按钮会出现猫猫狗狗的图片&#xff0c;此时我们发现url多了个 参数category那么比较明显就是提示我们是任意文件包含、任意文件读取漏洞了找不到任何信息&#xff0c;…