• 【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
    
    • 1

    步骤二:解压安装包;

    tar -zxvf docker-24.0.6.tgz
    
    • 1

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

    sudo cp docker/* /usr/bin/
    
    • 1

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

    vim /etc/systemd/system/docker.service
    
    • 1

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

    [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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

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

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

    步骤六:设置开机自启动

    systemctl enable docker.service
    
    • 1

    步骤七 :启动docker

    systemctl start docker
    
    • 1

    步骤八:测试docker是否启动

    docker run hello-world
    
    • 1

    在这里插入图片描述

    卸载步骤

    步骤一:停止docker

    sudo systemctl stop docker
    
    • 1

    步骤二:删除Docker服务

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

    步骤三:删除Docker相关命令

    rm -f /usr/bin/docker*
    rm -f /usr/bin/containerd*
    rm -f /usr/bin/ctr
    rm -f /usr/bin/runc
    
    • 1
    • 2
    • 3
    • 4

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

    sudo rm -rf /var/lib/docker
    sudo rm -rf /var/lib/containerd
    
    • 1
    • 2

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

    docker --version
    
    • 1

    1.2、在线安装

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

    2、Docker镜像

    2.1、镜像下载

    步骤一:查找镜像

    docker search ubuntu
    
    • 1

    在这里插入图片描述

    步骤二:下载镜像

    docker pull ubuntu
    
    • 1

    在这里插入图片描述

    步骤三:查看镜像

    docker images
    
    • 1

    在这里插入图片描述

    删除镜像,可以执行:

    docker rmi e4c58958181a
    #或者
    docker rmi ubuntu:latest
    
    • 1
    • 2
    • 3

    2.2、容器命令

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

    步骤一:启动容器

    docker run -it ubuntu:latest
    #或者
    docker run -it e4c58958181a
    
    • 1
    • 2
    • 3

    在这里插入图片描述

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

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

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

    步骤二:查看启动的容器

    docker ps -a
    
    • 1

    在这里插入图片描述

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

    步骤三:重启容器

    docker start 700f9f498c9d
    
    • 1

    在这里插入图片描述

    步骤四:停止容器

    docker stop 700f9f498c9d
    
    • 1

    在这里插入图片描述

    步骤五:删除容器

    docker rm 700f9f498c9d
    
    • 1

    在这里插入图片描述

    步骤六:后台启动容器

    docker run -itd ubuntu:latest
    #或者
    docker run -itd e4c58958181a
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    步骤七:连接容器

    docker attach 725f09c35ba6
    
    • 1

    在这里插入图片描述

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

    在这里插入图片描述

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

    docker exec -it 725f09c35ba6 /bin/bash
    
    • 1

    在这里插入图片描述

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

    步骤八:查看ubuntu版本

    cat /etc/issue
    
    • 1

    在这里插入图片描述

    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"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

    ENV: 配置环境目录;

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

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

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

    步骤三:创建镜像

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

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

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

    在这里插入图片描述

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

    docker images
    
    • 1

    在这里插入图片描述

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

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

    docker run -d coml_transcode:v1.0
    
    • 1

    在这里插入图片描述

    步骤五:链接容器

    docker exec -it 02135e2b8b7d /bin/bash
    
    • 1

    在这里插入图片描述

    步骤六:导出镜像

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

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

    在这里插入图片描述

    4、现场环境

    4.1、安装Docker

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

    4.2、导入镜像

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

    docker load -i coml_transcode.tar
    
    • 1

    在这里插入图片描述

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

    docker run -d 18820b82f7eb
    
    • 1

    在这里插入图片描述

    步骤三:链接容器

    docker exec -it 98c9c6c3bf75 /bin/bash
    
    • 1

    在这里插入图片描述

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

    5、总结

    1、预安装命令

    vim
    ifconfig
    dstat
    ufw
    tcpdump
    ping
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    初始化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"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

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

    在这里插入图片描述

    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
    
    • 1

    指定该容器使用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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    5、程序更新

    参考文档:

    1.Docker离线安装部署

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

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

    4.Docker进入容器方式

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

  • 相关阅读:
    9.20号作业实现钟表
    2023全新小程序广告流量主奖励发放系统源码 流量变现系统
    11个常用的JavaScript小技巧
    系统太多,多账号互通如何实现?
    PSP - 蛋白质序列提取 Transformer 蛋白质语言模型 ESM2 特征
    从Web2社交网络学习,为何要重视地位平等?
    在React中引用CSS方式及写法大全
    基础运维(八)Linux 基础命令
    JAVA毕设项目web实验室课表管理系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)
    php沿河农产品特卖网站的设计与实现毕业设计源码201524
  • 原文地址:https://blog.csdn.net/weixin_42571882/article/details/134015815