当前位置: 首页 > news >正文

docker安装与镜像打包

文章目录

  • 前言
  • 一、docker安装
    • 1.1、下载docker安装包
    • 1.2、解压
    • 1.3、移动
    • 1.4、docker注册成系统服务
    • 1.5、添加文件权限
    • 1.6、设置开机启动
    • 1.7、启动docker
    • 1.8、测试是否启动
  • 二、镜像加载
    • 2.1、镜像准备
    • 2.2、加载镜像
    • 2.3、查看已加载镜像
    • 2.4、进入镜像
  • 三、打包镜像
    • 3.1、创建 Dockerfile
    • 3.2、构建镜像
    • 3.3、运行容器
    • 3.4、导出镜像

前言

  1. 想必大家都遇到过类似的困扰,拿到git上的一套代码,想在本机上运行,又缺少环境。配制环境,不是遇到缺少库,就是版本不兼容各种问题。
  2. 大家共同开发一套代码,如果有共同的服务器,配置一次环境大家都可以用,如果没有,就需要每个人都需要配置环境,又费时又费力。
  3. 这时候就需要我们的docker。docker是什么,Docker 是一个开源的容器化平台,用于开发、运输和运行应用程序。它将应用程序及其依赖项打包到一个可移植的容器中,确保在任何环境中都能一致地运行。简单来说,就是只要一个人把运行环境配置好,把环境打包分享出来,其他人直接用docker加载这个文件,分分钟就可以运行代码。当然,你也可以把你的环境打包分享给其他人。

一、docker安装

1.1、下载docker安装包

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

1.2、解压

tar -zxvf docker-24.0.6.tgz

1.3、移动

移动到/usr/bin目录

sudo cp docker/* /usr/bin/

1.4、docker注册成系统服务

gedit /etc/systemd/system/docker.service

没有gedit的,下面命令安装
sudo apt update
sudo apt install gedit

复制下面内容写入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

1.5、添加文件权限

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

1.6、设置开机启动

sudo systemctl enable docker.service

1.7、启动docker

sudo systemctl start docker

1.8、测试是否启动

sudo docker run hello-world

在这里插入图片描述到这里就算完成了,显示 unable to find image 先不用管

二、镜像加载

2.1、镜像准备

如果没有docker,按照上文一安装,如果有了 docker,需要一个已经打包完成的镜像

假设打包的镜像命名为 ros.tar。

2.2、加载镜像

docker load -i ros.tar	# ros.tar 修改为自己名字

如果镜像较大,需要等待数分钟

2.3、查看已加载镜像

docker images

这时候会显示镜像对应的属性表格

REPOSITORY TAG IMAGE ID CREATED SIZE

2.4、进入镜像

docker run -it  REPOSITORY:TAG   

假设 REPOSITORY 为 ros,TAG 为 latest,则

docker run -it  ros:latest 

三、打包镜像

同样的,我们也可以把自己的镜像打包分享给他人使用

下面以打包 ros2_humble ubuntu22.04 基础环境为例

3.1、创建 Dockerfile

基础环境最好通过 Dockerfile 创建,创建名为 Dockerfile 的文件

touch Dockerfile

复制以下内容

# 使用Ubuntu 22.04作为基础镜像
FROM ubuntu:22.04# 设置环境变量
ENV DEBIAN_FRONTEND=noninteractive# 更新包管理器并安装ROS 2依赖
RUN apt-get update && apt-get install -y \locales \curl \gnupg2 \lsb-release \&& locale-gen en_US.UTF-8 \&& apt-get install -y software-properties-common \&& add-apt-repository ppa:osrfoundation/osrf-ros2 \&& apt-get update && apt-get install -y \ros-humble-desktop \&& apt-get clean && rm -rf /var/lib/apt/lists/*# 设置工作目录
WORKDIR /workspace# 启动bash
CMD ["/bin/bash"]

3.2、构建镜像

保存了上述 Dockerfile 文件,在同一目录下运行下面命令

docker build -t ros2-ubuntu .

如果这一步显示网络失败,需要梯子进行,我试过国内许多源,现在都被禁止了。如果有梯子,需进行如下设置。亲测有效,具体是参考一位博主的操作。

  1. 创建或编辑 Docker 的系统代理配置文件

    创建目录并编辑代理配置文件:

    sudo mkdir -p /etc/systemd/system/docker.service.d
    sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
    
  2. 添加以下内容

    [Service]
    Environment="HTTP_PROXY=http://127.0.0.1:7890"
    Environment="HTTPS_PROXY=http://127.0.0.1:7890"
    Environment="NO_PROXY=localhost,127.0.0.1"
    

    注意:将 http://127.0.0.1:7890 替换为 Clash 监听的实际代理地址和端口。如果 Clash 使用其他端口,请相应调整。

  3. 保存并退出编辑器

  4. 重新加载 systemd 配置并重启 Docker

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
  5. 验证配置

    尝试拉取一个小的 Docker 镜像,验证配置是否正确。例如:

    docker pull hello-world
    

3.3、运行容器

假设镜像名是ros2-ubuntu

docker run -it ros2-ubuntu

如果想在容器内部访问、编译本地代码。可以运行容器时使用-v选项将本地代码目录挂载到容器中。

docker run -it -v /home/jeff:/home ros2-ubuntu  

例如我把本地 /home/jeff 目录挂载到镜像 /home 目录下。如此在镜像home目录就可以访问 本机 /home/jeff 目录下的代码了

3.4、导出镜像

如果编译代码的时候发现镜像里缺少了一些库,想自己在镜像里安装,然后再打包出去,可以如此操作。

以安装 yaml-cpp 安装包为例。进入镜像安装 yaml-cpp 库
git clone https://github.com/jbeder/yaml-cpp.git
cd yaml-cpp
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=ON ..
make
sudo make install

** 注:过程中不要 exit 退出镜像 ** 退出再进入,需要重新安装 yaml-cpp 库。为了不用反复安装,我们可以重新打包一份镜像,下次直接加载新镜像。

docker save -o ros2.tar my-id  # ros2.tar可以换成自定义名称;my-image镜像名或ID。 docker images可以查看
http://www.lryc.cn/news/466372.html

相关文章:

  • “新物种”即将上线,极氪MIX是近几年最“好玩”的新车?
  • 【Flutter】路由与导航:复杂导航与深度链接
  • 07 实战:视频捕获
  • 前端页面使用google地图api实现导航功能,开发国外网站免费简单好用
  • UE4 材质学习笔记12(水体反射和折射)
  • Go:error处理机制和函数
  • 智能指针(3)
  • spring源码拓展点3之addBeanPostProcesser
  • 【计网】理解TCP全连接队列与tcpdump抓包
  • react18中实现简易增删改查useReducer搭配useContext的高级用法
  • 排序算法 —— 冒泡排序
  • QT--文本框 QLineEdit、qtextedit
  • Qt编写的modbus模拟器/支持网络和串口以及websocket/支持网络rtu
  • Standard_Matrix
  • js 通过input,怎么把选择的txt文件转为base64格式
  • 华为HCIP-openEuler认证详解
  • YOLO11改进 | 注意力机制 | 添加双重注意力机制 DoubleAttention【附代码+小白必备】
  • sentinel原理源码分析系列(四)-ContextEntry
  • Tcp协议讲解与守护进程
  • 学习threejs,THREE.LineDashedMaterial 虚线材质,基于gosper高斯帕曲线生成雪花动画
  • LeetCode 热题100之哈希
  • 软工——模块设计(爱啦爱啦)
  • Xmind一款极简思维导图和头脑风暴软件,支持PC和移动端,Xmind 2024.10.01101版本如何升级到Pro版?简单操作,最新可用!
  • 自动化工具:Ansible
  • 我是类(最终版)
  • 详解ip route
  • OpenGL进阶系列04 - OpenGL 点精灵
  • VSCode按ctrl与鼠标左键无法实现跳转的解决办法
  • U盘数据丢失不用慌,这4个工具可以帮你恢复。
  • 如何在Ubuntu上挂载一块硬盘:详解方案与实操步骤【小白无坑版】