ubuntu20从docker安装到制作自己的镜像使用记录

news2024/11/13 19:15:01

ubuntu20从docker安装到制作自己的镜像使用记录

第一章:配置环境

1.ubuntu20
2.docker镜像18.04
3.参考:https://www.runoob.com/docker/docker-tutorial.html

第二章:安装docker

一、安装docker

参考1:Ubuntu安装docker并运行测试【docker默认最新,虚拟机版本22.04】
目前docker的几个大的国内镜像站都嘎了,需要配置镜像文件。镜像网址参考:docker镜像加速源配置,目前可用镜像源列举

1.安装教程

Step1:更新系统软件包
sudo apt update

Step2:安装依赖包【用于通过HTTPS来获取仓库】
sudo apt install apt-transport-https ca-certificates curl software-properties-common

Step3:添加Docker官方GPG密钥
sudo -i
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/trusted.gpg.d/docker-ce.gpg

Step4:验证
sudo apt-key fingerprint 0EBFCD88
0EBFCD88 是公钥的指纹。执行这个命令后,系统会显示与该指纹相关的公钥信息。

Step4:添加Docker阿里稳定版软件源
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

Step5:再次更新软件包
sudo apt update

Step6:安装默认最新版
sudo apt install docker-ce docker-ce-cli containerd.io

Step7:测试,安装好后默认启动
sudo docker run hello-world
如果输出“Hello from Docker!”则表示Docker已经成功安装。

Step8:查看有哪些镜像
sudo docker images

Step9:配置用户组
sudo usermod -aG docker galaxfy
su - galaxfy  # 刷新shell状态
docker images # 验证

Step10:其他docker运行命令
查看状态:sudo systemctl status docker
启动:sudo systemctl start docker
开机自启:sudo systemctl enable docker
停止:sudo systemctl stop docker

其他:安装特定版docker
sudo apt-cache madison docker-ce  # 显示可用版本
sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io # 将需要的版本替换VERSION_STRING进行安装,例如 5:20.10.17~3-0~ubuntu-focal

2.镜像网址配置
在pull拉取镜像时,如果拉不到文件,可以尝试修改daemon.json文件
依次输入如下指令:

sudo nano /etc/docker/daemon.json

写入:

{
  "registry-mirrors": [ "https://docker.registry.cyou",
  "https://hub.uuuadc.top",
  "https://docker.anyhub.us.kg",
  "https://dockerhub.jobcher.com",
  "https://docker.ckyl.me",
  "https://docker.awsl9527.cn",
  "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"
  ]
}

使用的是 nano,可以通过按 Ctrl + O 保存文件,然后按 Enter 确认文件名,最后按 Ctrl + X 退出编辑器。
输入:

sudo systemctl daemon-reload  
sudo systemctl restart docker

二、验证

终端输入:

sudo docker run hello-world

出现:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete 
Digest: sha256:63421b18c1443a9a85139225293fae7541fb40b7832d9deff80b6a9a75ce3604
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

表示安装成功。

第三章:docker的使用

一、hello world

开始学习的第一步,必然是“hello world”!
终端输入:

sudo docker run ubuntu:18.04 /bin/echo "Hello world"

会报错。
在这里插入图片描述
应该是权限问题,增加sudo即可。

sudo docker run ubuntu:18.04 /bin/echo "Hello world"

输出:
在这里插入图片描述

各个参数解析:

  1. docker: Docker 的二进制执行文件。
  2. run: 与前面的 docker 组合来运行一个容器。
  3. ubuntu:18.04 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
  4. /bin/echo “Hello world”: 在启动的容器里执行的命令

以上命令完整的意思可以解释为:Docker 以 ubuntu18.04镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果。

二、运行交互式的容器

这句话有点拗口,个人理解就是和docker中的容器进行交互。
输入指令:

sudo su
sudo docker run -i -t ubuntu:18.04 /bin/bash

出现root@3ba0a1b6cfce:字样
在这里插入图片描述
表示目前已经进入了新建的ubuntu18.04的docker中了。
再输入指令:

cat /proc/version
ls

在这里插入图片描述
可以看到新建的容器中该文件夹下的目录。

输入指令退出该容器,回到本机环境。

exit

在这里插入图片描述

三、启动容器

创建一个以进程方式运行的容器

sudo docker run -d ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

意思是创建一个容器,每秒刷一次hello world,出现
在这里插入图片描述
确认容器有在运行,可以通过 docker ps 来查看,输入:

sudo docker ps

输出
在这里插入图片描述
1.CONTAINER ID为容器的ID
2.IMAGE:容器的镜像
3.COMMAND:执行的命令
查看容器内的标准输出
输入

sudo docker logs ec3075c464ece03d

ec3075c464ece03d:为当前容器的ID,截取前面一部分就行。
在这里插入图片描述
停止当前容器
输入:

sudo docker stop ec3075c464ece03d

使用命令查看

sudo docker ps

在这里插入图片描述

第四章、构建镜像

这一节目标是在第三节拉取的ubuntu18.04中构建python环境,以及运行一个代码示例。

一、确认基础镜像

终端输入:

sudo docker images

在这里插入图片描述
后面将使用ubuntu18.04做为基础镜像,如果没有的话,可以使用如下指令进行pull:

sudo docker pull ubuntu:18.04

二、构建自己的镜像

1.dockerfile文件编写
为了构建一个带有python3的镜像,编写dockerfile文件如下:

# Dockerfile

# Base images 基础镜像

FROM ubuntu:18.04

# MAINTAINER 维护者信息
maintainer chenjun_1241370589@qq.com
# 设置超时
ENV PIP_DEFAULT_TIMEOUT=100 


#RUN 执行以下命令
RUN apt update
RUN apt install python3 python3-pip -y
RUN pip3 install --upgrade pip setuptools
RUN pip3 cache purge
RUN pip3 install opencv-python==4.5.5.62 -i https://pypi.tuna.tsinghua.edu.cn/simple
# 安装 OpenCV  
RUN apt-get update && apt-get install -y \   
    libgl1-mesa-glx  # 安装 OpenGL 库  
# 其他依赖和设置


RUN pip3 install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple 
RUN apt install libgl1-mesa-glx
RUN mkdir -p /data/code/

#拷贝文件至工作文件夹
COPY test.py /data/code/test.py

#工作目录
WORKDIR /data/code/

#容器启动时执行的命令
CMD ["python3","test.py"]

2.编写测试文件
在dockerfile同级文件夹下,编写test.py文件,test.py文件中写入:

import numpy as np
import cv2
print("Useing Opencv")
# 创建一个200x200的黑色图像,默认数据类型是uint8,范围是0-255
# 这里使用0作为颜色值,表示黑色
blank_image = np.zeros((200, 200, 3), dtype="uint8")

print("blank_image",blank_image)

在这里插入图片描述
3.构建指令
在dockerfile文件夹下,开启终端,输入如下指令

sudo docker build -t cj-python3:v2.0 . -f Dockerfile

接下来docker将会按照dockerfile中的内容进行构建。
在这里插入图片描述

等待构建完成。

4.测试
输入指令:

sudo docker run -i -t cj-python3:v2.0

将会输出:

在这里插入图片描述
输入指令:

sudo docker run -i -t cj-python3:v2.0 /bin/bash

cd到工作文件夹下(data/code/),输入指令:

ls

可以查看到工作文件夹下的文件情况
在这里插入图片描述
输入“exit”即可退出当前镜像。
5.删除镜像
删除镜像指令:

docker rmi <镜像ID或名称>

强制删除镜像指令:

docker rmi -f <镜像ID或名称>

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

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

相关文章

Spring Cloud微服务项目文件上传/下载

在现代的微服务架构中&#xff0c;文件上传与下载是常见的需求&#xff0c;尤其是在需要处理大量文件数据的系统中。Spring Cloud 提供了灵活的工具和组件&#xff0c;使得在微服务中实现文件上传和下载变得高效而简便。 本文博主将详细介绍如何在 Spring Cloud 微服务项目中实…

【Kubernetes】k8s集群之Pod容器资源限制和三种探针

目录 一、Pod容器的资源限制 1.资源限制 2.Pod 和容器的资源请求与限制 3.CPU 资源单位 4.内存资源单位 二、Pod容器的三种探针 1.探针的三种规则 2.Probe支持三种检查方法&#xff1a; 一、Pod容器的资源限制 1.资源限制 当定义 Pod 时可以选择性地为每个容器设定所…

成都数字产业中心崛起,树莓集团如何加速国际数字影像产业园的全球步伐?

在数字化浪潮的推动下&#xff0c;成都数字产业中心近年来强势崛起&#xff0c;展现出令人瞩目的发展态势。据统计&#xff0c;过去五年间&#xff0c;成都数字产业的年均增长率超过了 20%&#xff0c;这一数据充分证明了其强大的发展动力。而在这片充满活力与创新的土地上&…

数据结构 JAVADS ——部分栈题目分享 (持续更新版)

前言 大概十天前,笔者更新了如何手搓一个简易的栈 入门数据结构JAVA DS ——手搓 栈-CSDN博客 在本篇博客中,笔者就分享几个题目,这同样是一个持续 更新的博客,但是我不保证更新频率就是了 哈哈! 那么我们就来看题目吧 第一题 1.小蓝的括号串1 - 蓝桥云课 (lanqiao.cn) …

如何在 Windows 上设置 MacOS 云主机

在Windows上设置MacOS云主机实际上涉及在Windows环境中模拟或远程管理MacOS系统&#xff0c;因为直接在Windows上运行MacOS作为云主机的主操作系统是不可能的&#xff0c;因为MacOS是为苹果硬件设计的。不过&#xff0c;有几种方法可以实现类似的功能&#xff1a; 1. 使用虚拟机…

Haskell HTTP请求:如何解读响应状态

在互联网技术领域&#xff0c;HTTP请求是客户端与服务器之间通信的基础。无论是网页浏览、API调用还是网络服务的交互&#xff0c;HTTP协议都扮演着核心角色。在本文中&#xff0c;我们将探讨如何在Haskell编程语言中发起HTTP请求&#xff0c;并重点介绍如何解读HTTP响应状态。…

学懂C++ (二十一):高级教程——深入C++多线程开发详解

C多线程开发详解 多线程编程是现代应用程序开发中不可或缺的一部分。C11引入了对多线程的支持&#xff0c;使得程序员能够更方便地利用多核处理器&#xff0c;提高程序的性能和响应能力。本文将全面而深入地探讨C的多线程相关概念&#xff0c;包括线程的创建与管理、互斥量…

PDF怎么在线转Word?介绍四种转换方案

PDF怎么在线转Word&#xff1f;在数字化办公时代&#xff0c;文档的互换性变得尤为重要。PDF格式因其跨平台兼容性和版面固定性而广受欢迎&#xff0c;但有时我们可能需要将PDF文件转换为Word文档&#xff0c;以便进行编辑或进一步处理。以下是四种常见的在线PDF转Word的方法&a…

大数据湖体系规划与建设方案(51页PPT)

方案介绍&#xff1a; 大数据湖通过集中存储各种类型的数据&#xff08;包括结构化、半结构化和非结构化数据&#xff09;&#xff0c;提供了更加灵活、可扩展的数据处理和分析能力。其核心理念是“存储一切&#xff0c;分析一切&#xff0c;创建所需”&#xff0c;即将所有数…

【论文复现】Transformer

Transformer 前言网络架构数据处理词嵌入向量位置编码 模型定义多头注意力机制编码器Encoder解码器Decoder 前言 Transformer应用范围非常广泛&#xff0c;涵盖了自然语言处理、时间序列数据预测、图像处理等领域。由于笔者之前都是应用&#xff0c;但是对于原理并没有深刻理解…

树莓派Pico 2,RP2350 现已发售!

https://www.bilibili.com/video/BV1n5YeeMETu/?vd_sourcea637ced2b66f15709d16fcbaceeb47a9 我们很高兴地宣布推出Raspberry Pi Pico 2&#xff0c;我们的第二代微控制器板&#xff1a;采用了由我们自主设计的新款高性能安全型微控制器 RP2350。 Raspberry Pi Pico 2&#…

5 种经过验证的查询翻译技术可提高您的 RAG 性能

如何在用户输入模糊的情况下获得近乎完美的 LLM 性能 欢迎来到雲闪世界。你认为用户会向 LLM 提出完美的问题&#xff0c;这是大错特错。如果我们不直接执行&#xff0c;而是细化用户的问题&#xff0c;结果会怎样&#xff1f;这就是查询转换。 我们开发了一款应用程序&#x…

查看DrawCall流程 Unity工具 Frame Debug

切换帧率 基础面板 可以看到 我们可以通过切换面板 看DrwaCall产生 MainTex 就是材质了 如何优化&#xff1f; 合批 就会一次性直接渲染

双端队列Deque

Deque&#xff08;双端队列&#xff09;是一种允许在两端都进行插入和删除操作的线性数据结构。它在 Java Collections Framework 中作为一个重要的接口&#xff0c;具有以下结构特点&#xff1a; 1. 双端操作 两端插入和删除&#xff1a;与传统队列&#xff08;只能在一端入…

迭代次数顺序的双重性

(A,B)---6*30*2---(0,1)(1,0) 收敛误差为7e-4&#xff0c;收敛199次取迭代次数平均值&#xff0c; 让A是4a1&#xff0c;4a2&#xff0c;…&#xff0c;4a16&#xff0c;B全是0得到迭代次数的顺序就是1&#xff0c;2&#xff0c;…&#xff0c;16. 但是如果让训练集A-B矩阵的高…

kafka-go使用:以及kafka一些基本概念说明

关于kafka 作为开发人员kafka中最常关注的几个概念&#xff0c;是topic,partition和group这几个概念。topic是主题的意思&#xff0c;简单的说topic是数据主题&#xff0c;这样解释好像显得很苍白&#xff0c;只是做了个翻译。一图胜前言&#xff0c;我们还是通过图解来说明。…

PDF密码移除技巧: 五大 PDF 密码移除器

如果您想解密或删除 PDF 密码&#xff0c;该怎么办&#xff1f;PDF 是一种经常用于商业的格式&#xff0c;您可以在培训、教育和商业场合使用它。添加这些 PDF 文件的密码可以保护您的安全和隐私。因此&#xff0c;有很多 PDF 都用密码加密&#xff0c;当您想要查看这些 PDF 时…

PTrade常见问题系列22

反馈定义的上午7点执行run_daily函数&#xff0c;但是每周一上午都没法正常执行&#xff1f; 1、run_daily函数加载在initialize函数中&#xff0c;执行后才会创建定时任务&#xff1b; 2、由于周末会有例行重启操作&#xff0c;在重启以后拉起交易时相当于非交易日启动的交易…

【人工智能训练师】2 集群搭建

题目一、基础配置 core-site.xml参数配置详情 官方文档&#xff1a;http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/core-default.xml core-default.xml与core-site.xml的功能是一样的&#xff0c;如果在core-site.xml里没有配置的属性&#xff0c…

【C++二分查找 决策包容性】1300. 转变数组后最接近目标值的数组和

本文涉及的基础知识点 C二分查找 决策包容性 LeetCode1300. 转变数组后最接近目标值的数组和 给你一个整数数组 arr 和一个目标值 target &#xff0c;请你返回一个整数 value &#xff0c;使得将数组中所有大于 value 的值变成 value 后&#xff0c;数组的和最接近 target …