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

news2025/1/11 2:24:59

前言:基于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、内存使用的方法

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

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

相关文章

安防监控视频汇聚平台EasyCVR增加AI算法列表接口的实现方法

安防监控视频汇聚平台EasyCVR基于云边端一体化架构,具有强大的数据接入、处理及分发能力,可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析等功能。平台既具备传统安防监控的能力,也…

C++进阶语法之函数和指针【学习笔记(三)】

文章目录 1、C 函数1.1 函数的定义1.2 函数原型(function prototypes)1.3 参数(parameter)——值传递(pass by value)1.4 重载(overloading)1.5 函数传参——传递数组(ar…

Linux下控制GPIO的三种方法

https://blog.csdn.net/qq_41076734/article/details/124669908 1. 应用空间控制gpio 1.1简介 在/sys/class/gpio/下有个export文件,向export文件写入要操作的GPIO号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括dir…

Flink学习笔记(四):Flink 四大基石之 Window 和 Time

文章目录 1、 概述2、 Flink 的 Window 和 Time2.1、Window API2.1.1、WindowAssigner2.1.2、Trigger2.1.3、Evictor 2.2、窗口类型2.2.1、Tumbling Windows2.2.2、Sliding Windows2.2.3、Session Windows2.2.4、Global Windows 2.3、Time 时间语义2.4、乱序和延迟数据处理2.5、…

linux系统安装Googletest单元测试框架

环境信息 系统:ubuntn cmake版本:3.5.1 gcc版本:5.4.0 1、下载googletest git clone https://github.com/google/googletest.git注意!不选branch的话默认下载最新版本(需要编译器能够支持C14),…

如何生成osg的动画路径文件

目录 1. 前言 2. 生成动画路径文件 2.1. 粗糙方式 2.2. 精确方式 1. 前言 在进行osg的开发中,有时需要对模型按某个路径或规则进行动画,如下: 奶牛在10秒时间段从起始的osg::Vec3d(0.0, 18, 1.0)位置 匀速直线运动到osg::Vec3d(0.0, -8, …

ubuntu 中使用Qt连接MMSQl,报错libqsqlodbc.so: undefined symbol: SQLAllocHandle

Qt4.8.7的源码编译出来的libqsqlodbc.so,在使用时报错libqsqlodbc.so: undefined symbol: SQLAllocHandle,需要在编译libqsqlodbc.so 的项目pro文件加上LIBS -L/usr/local/lib -lodbc。 这里的路径根据自己的实际情况填写。 编辑: 使用uni…

Python数据结构(队列)

Python数据结构(队列) 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 队列是一种先进先出的 (First n First ut)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为队头&#xff…

深度学习——图像分类(CIFAR-10)

深度学习——图像分类(CIFAR-10) 文章目录 前言一、实现图像分类1.1. 获取并组织数据集1.2. 划分训练集、验证集1.3. 图像增广1.4. 引入数据集1.5. 定义模型1.6. 定义训练函数1.7. 训练模型并保存模型参数 二、生成一个桌面小程序2.1. 使用QT设计师设计界…

建筑工程模板分类以及特点?

建筑工程模板可以根据材料、结构和用途等方面进行分类。以下是一些常见的建筑工程模板分类及其特点: 1. 木质模板: - 特点:木质模板是最常见和传统的模板类型。它们由木材制成,具有良好的可塑性和可加工性。木质模板适用于各种形状…

京东数据分析:2023年9月京东白酒行业品牌销售排行榜

鲸参谋监测的京东平台9月份白酒市场销售数据已出炉! 9月白酒市场的整体热度较高,贵州茅台先是与瑞幸联名推出酱香拿铁,后又宣布与德芙推出联名产品酒心巧克力,引起了诸多消费者的关注。在这一热度的加持下,从销售上看&…

Kali Linux 安装搭建 hadoop 平台 调用 wordcount 示例程序 详细教程

步骤一: 目标:*安装虚拟机,在自己虚拟机上完成hadoop的伪分布式安装。(安装完成后要检查)* 1)前期环境准备:(虚拟机、jdk、ssh) 2)SSH相关配置 安装SSH Se…

【MyBatis篇】MyBatis动态代理总结

本人正在浅学mybatis,正学到mybatis动态代理,在查询多方资料之后做出以下总结,以便于系统学习时回顾; 目录 MyBatis为什么引入动态代理 mybatis的动态代理 Dao代理技术 MyBatis为什么引入动态代理 因为程序员的 懒,…

访问控制2

文章目录 主要内容一.Role和ClusterRole1.ClusterRole示例,创建一个名为test-clusterrole且仅有创建Pod和deployment的集群角色代码如下(示例): 2.YAML文件创建代码如下(示例): 3.将udbs用户和Clusterrole进行绑定&…

0基础学习VR全景平台篇第112篇:控制点和遮罩工具 - PTGui Pro教程

上课!全体起立~ 大家好,欢迎观看蛙色官方系列全景摄影课程! 前情回顾:上节,我们用PTGui拼接了一张全景图,全景编辑器里的各项功能帮助我们进行了初步的检查和编辑。 之后我们需要使用【控制点】和【遮罩…

智慧垃圾站:AI视频智能识别技术助力智慧环保项目,以“智”替人强监管

一、背景分析 建设“技术先进、架构合理、开放智能、安全可靠”的智慧环保平台,整合环境相关的数据,对接已建业务系统,将环境相关数据进行统一管理,结合GIS技术进行监测、监控信息的展现和挖掘分析,实现业务数据的快速…

【AI视野·今日CV 计算机视觉论文速览 第271期】Thu, 19 Oct 2023

AI视野今日CS.CV 计算机视觉论文速览 Thu, 19 Oct 2023 Totally 63 papers 👉上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Learning from Rich Semantics and Coarse Locations for Long-tailed Object Detection Authors Lingchen Meng, Xiyang D…

偕行十年,阿里云助力众安保险用科技温暖每一张保单

云布道师 前言:应云而生的众安保险,其 IT 架构都搭建在阿里云上,云服务器 ECS 关键应用上的数据需要保护,需要简单易用、稳定性高的方案,助力保险业务的快速开发和上线。在经过全面充分地沟通评估后,众安保…

凌晨!腾讯云终于发布了2023年度双十一优惠活动!

2023腾讯云双11优惠价格表终于来了,轻量2核2G3M云服务器88元一年、轻量2核4G5M服务器166.6元一年、3年轻量2核2G4M带宽优惠价366.6元、3年轻量2核4G5M配置566.6元,CVM云服务器2核2G配置SA2实例172.3元一年、标准型S5服务器2核2G配置280.8元一年&#xff…

个人微信管理系统都有些什么功能呢?

个人微信管理系统是一项高效的工具,可协助企业有效管理多个微信账号,从而提升工作效率。该系统允许企业在电脑上集中管理所有微信账号,省去了频繁切换设备的繁琐,同时还可以将微信账号分派给员工以进行更高效的微信管理。 来看看微…