【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 ubuntuENV MYPATH /home/coml_transcodeCOPY ./coml_transcode $MYPATHWORKDIR $MYPATHENTRYPOINT ["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 ubuntuENV MYPATH /home/coml_transcodeCOPY ./coml_transcode $MYPATHWORKDIR $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-pingENTRYPOINT ["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、内存使用的方法

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

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

相关文章

谈谈Net-SNMP软件

Net-SNMP是一个开源的SNMP软件套件,它提供了SNMP代理(snmpd)和SNMP工具(如snmpget、snmpwalk等),可以用于监控和管理网络设备。 Net-SNMP最初是从UC Davis的SNMP软件衍生而来,现在已经成为广泛…

小程序设计基本微信小程序的校园生活助手系统

项目介绍 通篇文章的撰写基础是实际的应用需要,然后在架构系统之前全面复习大学所修习的相关知识以及网络提供的技术应用教程,以校园生活助手系统的实际应用需要出发,架构系统来改善现校园生活助手系统工作流程繁琐等问题。不仅如此以操作者…

纺织工厂数字孪生3D可视化管理平台,推动纺织产业数字化转型

近年来,我国加快数字化发展战略部署,全面推进制造业数字化转型,促进数字经济与实体经济深度融合。以数字孪生、物联网、云计算、人工智能为代表的数字技术发挥重要作用。聚焦数字孪生智能工厂可视化平台,推动纺织制造业数字化转型…

【Java集合类面试十八】、ConcurrentHashMap是怎么分段分组的?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:ConcurrentHashMap是怎么…

手把手教你在项目中引入Excel报表组件

摘要:本文由葡萄城技术团队原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 GrapeCity Documents for Excel(以下简称GcExcel)是葡萄城公司的…

【TES641】基于VU13P FPGA的4路FMC接口基带信号处理平台

板卡概述 TES641是一款基于Virtex UltraScale系列FPGA的高性能4路FMC接口基带信号处理平台,该平台采用1片Xilinx的Virtex UltraScale系列FPGA XCVU13P作为信号实时处理单元,该板卡具有4个FMC子卡接口(其中有2个为FMC接口)&#x…

Vue3.3指北(二)

Vue3.3指北 Vue31、组件基础1.1、全局组件1.2、局部组件1.3、组件的命名1.4、组件的数据存放1.5、组件标签化 2、父组件向子组件传递数据2.1、props2.2、动态props2.3、props传数组2.4、props传对象2.4.1、默认值和必传值 3、子组件向父组件传递数据4、父子组件互相访问4.1、父…

03初始Docker

一、初始Docker 1.什么是Docker 问题 ①大型项目组件复杂,运行环境复杂,部署时依赖复杂,出现兼容性问题。 ②开发,测试,生产环境有差异。不同的环境操作系统不同 解决 ①Docket将应用、依赖、函数库、配置一起打…

聚观早报 | vivo Y100官宣;极氪001 FR将上市

【聚观365】10月25日消息 vivo Y100官宣 一极氪001 FR将上市 特斯拉加速扩张 苹果扩大招聘力度 小米澎湃OS实现历史性跨越 vivo Y100官宣 vivo Y系列是vivo存在比较久的入门系列,主打千元价位的线下市场,在消费者中有着不错的口碑。而不久前一款型…

代码随想录算法训练营第二十九天 | 回溯算法总结

​ 代码随想录算法训练营第二十九天 | 回溯算法总结 1. 组合问题 1.1 组合问题 在77. 组合中,我们开始用回溯法解决第一道题目:组合问题。 回溯算法跟k层for循环同样是暴力解法,为什么用回溯呢?回溯法的魅力,用递…

ubuntu tools

1 cloc calculate lines of your code sudo apt-get install cloccloc ./file

【MySQL架构篇】SQL执行流程与缓冲池

文章目录 1. SQL执行流程2. 数据库缓冲池(Buffer Pool)2.1 缓冲池概述2.2 缓冲池如何读取数据2.3 查看和设置缓冲池的大小2.4 多个Buffer Pool实例2.5 引申问题 1. SQL执行流程 查询缓存:因为查询效率往往不高,所以在MySQL8.0之后就抛弃了这个功能解析器…

lvs+keepalived: 高可用集群

lvskeepalived: 高可用集群 keepalived为lvs应运而生的高可用服务。lvs的调度器无法做高可用,于是keepalived软件。实现的是调度器的高可用。 但是:keepalived不是专门为集群服务的,也可以做其他服务器的高可用。 lvs的高可用集群&#xf…

力扣第1005题 K 次取反后最大化的数组和 c++ 贪心 双思维

题目 1005. K 次取反后最大化的数组和 简单 相关标签 贪心 数组 排序 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以…

asp.net乡村旅游管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net乡村旅游管理系统是一套完善的web设计管理系统系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c# 语言开发 asp.net乡村旅游管理系统 二、…

【在英伟达nvidia的jetson-orin-nx和PC电脑ubuntu20.04上-装配ESP32开发调试环境-基础测试】

【在英伟达nvidia的jetson-orin-nx和PC电脑ubuntu20.04上-装配ESP32开发调试环境-基础测试】 1、概述2、实验环境3、 物品说明4、参考资料与自我总结5、实验过程1、创建目录2、克隆下载文件3、 拉取子目录安装和交叉编译工具链等其他工具4、添加环境变量6、将样例文件拷贝到桌面…

【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步

MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步 前提介绍MySQL和ElasticSearch的同步双写优点缺点针对于缺点补充优化方案 MySQL和ElasticSearch的异步双写优点缺点 定时延时写入ElasticSearch数据库机制优点缺点 开源和成熟的数据迁移工具选型Logsta…

软考系列(系统架构师)- 2016年系统架构师软考案例分析考点

试题一 软件架构(质量属性、架构风格对比、根据描述填空) 试题二 系统开发(用例图参与者、用例关系、类图关系) 学生、教师、管理员、时间、打印机【问题2】(7分) 用例是对系统行为的动态描述,用…

ant框架下 a-input-number组件的宽度问题

如图所示,在使用a-input-number组件时虽然设置了宽度但是没有生效,加上了一个!important就好了:

【Java 进阶篇】使用 Java 和 Jsoup 进行 XML 处理

XML(可扩展标记语言)是一种常用的数据交换格式,它被广泛用于在不同系统之间传递和存储数据。Java作为一种强大的编程语言,提供了多种方式来处理XML数据。其中,Jsoup 是一个流行的Java库,用于解析和操作XML文…