【Docker】Docker学习之一:离线安装Docker步骤

前言:基于Ubuntu Jammy 22.04 (LTS)版本安装和测试

1、Docker安装

1.1、离线安装

步骤一:官网下载 docker 安装包

wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.6.tgz

步骤二:解压安装包;

tar -zxvf docker-24.0.6.tgz

步骤三:将解压之后的docker文件移到 /usr/bin目录下;

sudo cp docker/* /usr/bin/

步骤四:将docker注册成系统服务;

vim /etc/systemd/system/docker.service

然后在文件中添加以下内容,退出并保存。

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target

步骤五:给文件增加可执行权限

chmod +x /etc/systemd/system/docker.service
systemctl daemon-reload 

步骤六:设置开机自启动

systemctl enable docker.service

步骤七 :启动docker

systemctl start docker

步骤八:测试docker是否启动

docker run hello-world

在这里插入图片描述

卸载步骤

步骤一:停止docker

sudo systemctl stop docker

步骤二:删除Docker服务

# 移除开机自启动
systemctl disable docker.service
# 删除service服务
rm -f /etc/systemd/system/docker.service

步骤三:删除Docker相关命令

rm -f /usr/bin/docker*
rm -f /usr/bin/containerd*
rm -f /usr/bin/ctr
rm -f /usr/bin/runc

步骤三:删除docker目录和容器相关文件

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

步骤四:验证是否已成功卸载

docker --version

1.2、在线安装

参考官方文档:Docker安装步骤

2、Docker镜像

2.1、镜像下载

步骤一:查找镜像

docker search ubuntu

在这里插入图片描述

步骤二:下载镜像

docker pull ubuntu

在这里插入图片描述

步骤三:查看镜像

docker images

在这里插入图片描述

删除镜像,可以执行:

docker rmi e4c58958181a
#或者
docker rmi ubuntu:latest

2.2、容器命令

这里的ubuntu镜像就类似迷你版的ISO镜像文件,启动镜像的时候可以理解为以这个镜像创建了一个虚拟机,并执行了封装镜像的时候所书写的命令,对于这样已经启动的镜像我们称之为容器(containerd),这里测试所使用的只是一个ubuntu的镜像,启动的时候只是一个ubuntu的虚拟机,没有封装实际的功能。

步骤一:启动容器

docker run -it ubuntu:latest
#或者
docker run -it e4c58958181a

在这里插入图片描述

可以看出启动之后进入到一个迷你版本的ubuntu系统,里面封装了一部分常用命令,但是大部分命令都没有安装。

执行 eixt 可以退出容器,并关闭该容器运行,类似于虚拟机关机,但是虚拟机本身还存在。

也可以执行ctrl + p 之后 执行 ctrl + q这样可以退出容器,但容器本身在后台继续运行,类似于虚拟机运行状态。

步骤二:查看启动的容器

docker ps -a

在这里插入图片描述

这里显示状态Exited表示容器已经停止运行了,如果想要重启容器,可以执行docker start 700f9f498c9d, 其中700f9f498c9d表示容器的ID

步骤三:重启容器

docker start 700f9f498c9d

在这里插入图片描述

步骤四:停止容器

docker stop 700f9f498c9d

在这里插入图片描述

步骤五:删除容器

docker rm 700f9f498c9d

在这里插入图片描述

步骤六:后台启动容器

docker run -itd ubuntu:latest
#或者
docker run -itd e4c58958181a

在这里插入图片描述

步骤七:连接容器

docker attach 725f09c35ba6

在这里插入图片描述

这样启动执行eixt之后容器也会关闭,如下:

在这里插入图片描述

因此,可以使用下面命令链接容器:

docker exec -it 725f09c35ba6 /bin/bash

在这里插入图片描述

这样使用exit退出容器,容器也不会关闭。

步骤八:查看ubuntu版本

cat /etc/issue

在这里插入图片描述

3、程序封装

3.1、需求分析

需要将在ubuntu 22.04版本下编译的coml_transcode可执行程序及运行目录上传到容器中,并在容器中成功运行程序,然后将该容器打包成一个新的镜像基础文件作为发布版使用,现场服务器部署完docker之后直接加载启动这个新的镜像就能成功运行coml_transcode程序,这样就避免了依赖现场服务器环境(操作系统不一致,glibc库不一致等导致程序启动不成功等问题。)

3.2、创建镜像

步骤一:虚拟机上编译源代码,并将运行目录上传

在这里插入图片描述

步骤二:编写DockerFile文件

该文件和源文件在一个文件夹下,如上图所示,名为dockerfile,文件内容:

FROM ubuntu

ENV MYPATH /home/coml_transcode

COPY ./coml_transcode $MYPATH

WORKDIR $MYPATH

ENTRYPOINT ["bash", "start.sh"]

FROM ubuntu: FROM是后面是该目标镜像使用的基础镜像,基础镜像有且只能有一个,这里使用ubuntu作为基础镜像;

ENV: 配置环境目录;

COPY: 将宿主机下的文件拷贝到镜像;

WORKDIR:设置容器的默认工作目录;

ENTRYPOINT: 器启动时第一个运行的命令及其参数,这里表示启动容器是执行start.sh脚本。

步骤三:创建镜像

docker build -f ./dockerfile -t coml_transcode:v1.0 .

./dockerfile 表示Dockerfile的所在位置;

coml_transcode:v1.0 表示新建镜像的名字及版本号

在这里插入图片描述

构建完查看是否成功构建,通过docker images命令查看当前本地的所有镜像:

docker images

在这里插入图片描述

这里的coml_trancode镜像便是刚创建的

步骤四:通过镜像运行一个容器

docker run -d coml_transcode:v1.0

在这里插入图片描述

步骤五:链接容器

docker exec -it 02135e2b8b7d /bin/bash

在这里插入图片描述

步骤六:导出镜像

通过上述可以验证程序能够在ubuntu基础虚拟机上面运行,将coml_transcode这个镜像导出

docker save -o ./coml_transcode.tar coml_transcode:v1.0

在这里插入图片描述

4、现场环境

4.1、安装Docker

现场服务器按照1.1章节步骤安装docker

4.2、导入镜像

步骤一:将coml_transcode.tar镜像导入到现场服务器上

docker load -i coml_transcode.tar

在这里插入图片描述

步骤二:通过该镜像启动一个容器

docker run -d 18820b82f7eb

在这里插入图片描述

步骤三:链接容器

docker exec -it 98c9c6c3bf75 /bin/bash

在这里插入图片描述

可以看到程序已经成功启动

5、总结

1、预安装命令

vim
ifconfig
dstat
ufw
tcpdump
ping

初始化ubuntu镜像安装的命令很少,可以通过3.2章节编写Dockerfile文件来预安装可能用到的命令,如下:

FROM ubuntu

ENV MYPATH /home/coml_transcode

COPY ./coml_transcode $MYPATH

WORKDIR $MYPATH

#更新apt
RUN apt-get update
#安装vim编辑器
RUN apt -y install vim
#安装ifconfig命令查看网络IP
RUN apt -y install net-tools
#安装防火墙查看攻击
RUN apt -y install ufw
#安装网络IO查看工具
RUN apt -y install dstat
#安装抓包工具
RUN apt -y install tcpdump
#安装ping命令
RUN apt -y install iputils-ping

ENTRYPOINT ["bash", "start.sh"]

然后再创建新的镜像即可,这样通过新镜像启动的容器初始就存在这些命令。

在这里插入图片描述

2、网络配置

Doker启动的容器存在4种网络配置,如下表所示:

网络模式指定方式解释
bridge--network bridge指定,默认使用docker0桥接模式链接宿主机,通过虚拟出来的docker0作为网桥链接物理网卡,也可以使用docker network create --subnet=172.18.0.0/16 docker1创建新的网桥使用。
host--network host指定主机模式链接宿主机,通过和宿主机共享同一物理网卡链接,自身不在配置IP,这种模式无法做到网络端口映射。
none--network none指定none模式,禁用网络功能,这个Docker容器不存在网卡,IP等信息。不能和其它容器或宿主机进行通信。
container--network container:NAME或者容器IDcontainer模式,同其它容器共享网络,MAC地址和ip一样。

docker容器启动的时候如果不指定网络模式,默认选择bridge模式

3、CPU隔离

docker run -d --cpuset-cpus=1-20 coml_transcode:v2.0

指定该容器使用CPU 1-20

4、日志文件同步

日志同步可以做到容器指定目录下的文件可以和宿主机指定目录下的文件进行实时同步功能。这样可以解决如下几个问题:

1.如果启动的容器异常退出之后,重启不起来,导致容器里存在的程序日志信息无法查看;

2.如果需要更新程序,只需要将最新版本的程序,上传至宿主机的共享目录下,然后重启容器即可完成程序的迭代更新;

3.对于集群部署的容器,可以将宿主机共享文件统一设置再一个目录下,如:data/data1, data/data2, data/data3这样的格式,这样便于查看每个容器所打印的日志信息,不必去连接到每一个容器去查看。

启动容器时使用如下命令:

# 获取宿主机可执行程序运行目录
root@ubuntu:/home/DockerTranscode/coml_transcode# pwd
/home/DockerTranscode/coml_transcode

# 启动容器
 docker run -d --privileged=true -v /home/DockerTranscode/coml_transcode:/home/coml_transcode/ coml_transcode:v5.0

在这里插入图片描述

5、程序更新

参考文档:

1.Docker离线安装部署

2.Docker部署一个简单的c/c++程序的方法

3.Docker导出/导出镜像/容器

4.Docker进入容器方式

5.Docker限制cpu、内存使用的方法

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

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

相关文章

java中的异常,以及出现异常后的处理【try,catch,finally】

一、异常概念 异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。 注意: 在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的…

光流法动目标检测

目录 前言 一、效果展示 二、光流法介绍 三、代码展示 总结 前言 动目标检测是计算机视觉领域的一个热门研究方向。传统的方法主要基于背景建模,但这些方法对于光照变化、遮挡和噪声敏感。因此,研究人员一直在寻找更加鲁棒和有效的技术来解决这一问题。…

IAR For ARM 安装教程

电脑环境 安装包下载 1、官网下载 ①搜索 IAR ②切换产品,选择Arm ③选择IAR Embedded Workbench for Arm ④免费试用 2、网盘下载 EWARM-CD-8202-14838.exe(访问密码: 1666) https://url48.ctfile.com/f/33868548-961057458-611638?p1666 软件下载 1、点击安…

WPF中的绑定知识详解(含案例源码分享)

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

Flask后端开发(一)-基础知识和前期准备

目录 1.背景介绍1.1. 项目背景1.2. 项目难点1.3. 项目环境 2. flask后端开发实现的功能3. flask部署和前后端对接3.1. flask运行配置和服务器部署3.2. flask前后端传参 4. 后端测试工具4.1. 工具介绍4.2. 工具使用 后记 1.背景介绍 1.1. 项目背景 就是前几个月临时接手了一个…

13.4web自动化测试(Selenium3+Java)

一.定义 用来做web自动化测试的框架. 二.特点 1.支持各种浏览器. 2.支持各种平台(操作系统). 3.支持各种编程语言. 4.有丰富的api. 三.工作原理 四.搭环境 1.对照Chrome浏览器版本号,下载ChromeDriver,配置环境变量,我直接把.exe文件放在了jdk安装路径的bin文件夹下了(j…

LSM Tree 深度解析

我们将深入探讨日志结构合并树,也称为LSM Tree:这是许多高度可扩展的NoSQL分布式键值型数据库的基础数据结构,例如Amazon的DynamoDB、Cassandra和ScyllaDB。这些数据库的设计被认为支持比传统关系数据库更高的写入速率。我们将看到LSM Tree如…

分享10个创意满满的产品设计网站

在当今的互联网时代,新颖性和创造力是最受关注的,无论一个产品有多好,但没有创意的包装都很难“看到太阳”。因此,创意产品的设计非常重要,今天小将为您带来10个非常有创意的产品设计网站。话不多说,上干货…

越流行的大语言模型越不安全

源自:GoUpSec “人工智能技术与咨询” 发布 安全研究人员用OpenSSF记分卡对GitHub上50个最流行的生成式AI大语言模型项目的安全性进行了评估,结果发现越流行的大语言模型越危险。 近日,安全研究人员用OpenSSF记分卡对GitHub上50个最流…

Sentinel授权规则和规则持久化

大家好我是苏麟 , 今天说说Sentinel规则持久化. 授权规则 授权规则可以对请求方来源做判断和控制。 授权规则 基本规则 授权规则可以对调用方的来源做控制,有白名单和黑名单两种方式。 白名单:来源(origin)在白名单内的调用…

批量编辑 Outlook 联系人

现状 Outlook 自带的联系人编辑功能无法快速、批量编辑联系人字段使用 Excel 等外部编辑器,可批量编辑联系人 导出联系人到文件 在【联系人】界面,点击【文件】在【文件】界面,点击【打开和导出】–>【导入/导出】在弹出的向导窗口中点…

FPGA从入门到精通(二十)SignalTapII

这一篇将介绍SignalTapII。 之前的工程我们是做仿真,设置激励,观察输出波形去判断代码没有问题,但事实上我们真实的需求是综合后的代码下载到FPGA芯片中能够符合预期。 其中可能出现问题的原因有: 1、我们是写testbench设置激励…

接口自动化测试 —— Jmeter 6种定时器应用

①定时器是在每个sampler(采样器)之前执行的,而不是之后,不管这个定时器的位置放在sampler之后,还是之下,都在sampler之前得到执行 ②定时器是有作用域的,当执行一个sampler之前时,…

华为云2023年双十一服务器优惠价格表及活动大全

2023华为云双11优惠活动「云上优选 特惠来袭」,阿腾云atengyun.com整理云服务器优惠价格表,华为云L实例-2核2G3M一年优惠价89元、L实例-2核2G4M价格108元一年、L实例-2核4G5M优惠价198元一年,三年1000元、HECS云服务器-1核2G1M带宽39元一年、…

JavaScript 生成 16: 9 宽高比

这篇文章只是对 for 循环一个简单应用,没有什么知识含量。 可以跳过这篇文章。 只是我用来保存一下我的代码,保存在本地我嫌碍眼,总想把他删了。 正文部分 公式:其中 width 表示宽度,height 表示高度 16 9 w i d t…

大集合按照指定长度进行分割成多个小集合,用于批量多次处理数据

📚目录 拆分案例拆分的核心代码 通常我们对集合的更新或者保存都需要用集合来承载通过插入的效率,但是这个会遇到一个问题就是你不知道那天那个集合的数量可能就超了,虽然我们连接数据库进行批量提交会在配置上配置allowMultiQueriestrue,但是…

【c语言】结构体内存对齐,位段,枚举,联合

之前学完结构体,有没有对结构体的大小会很疑惑呢??其实结构体在内存中存储时会存在内存对齐,捎带讲讲位段,枚举,和联合,跟着小张一起学习吧 结构体内存对齐 结构体的对齐规则: 第一个成员在与结…

Android 12 源码分析 —— 应用层 四(SystemUI的基本布局设计及其基本概念)

Android 12 源码分析 —— 应用层 四(SystemUI的基本布局设计及其基本概念) 在上两篇文章中,我们介绍SystemUI的启动过程,以及基本的组件依赖关系。基本的依赖关系请读者一定要掌握,因为后面的文章,将会时…

【力扣】416. 分割等和子集 <动态规划、回溯>

【力扣】416. 分割等和子集 给你一个 只包含正整数的非空数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例 1: 输入:nums [1,5,11,5] 输出:true 解释:数组可以分割成 [1, 5,…

【Nacos】使用Nacos进行服务发现、配置管理

Nacos Nacos是 Dynamic Naming and Configuration Service 的首字母简称&#xff0c;一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 版本说明&#xff1a;版本说明 alibaba/spring-cloud-alibaba Wiki GitHub <properties><java.version>…