安装docker-生成Ubuntu16.04容器-安装ROSkinetic

tech2022-09-07  114

安装docker-制作Ubuntu16容器-安装ROSkinetic

安装dockerStep 1. 卸载旧版本Step 2. 更新 apt 包索引Step 3. 安装依赖包Step 4. 添加官方 GPG 密钥Step 5. 添加 Docker 软件源Step 6. 安装 Docker CEStep 7. 验证安装Step 8. 配置免sudo运行docker命令 拉取image制作容器containerStep 1. 配置镜像加速器Step 2. 拉取镜像Step 3. 镜像生成容器,进入容器 在Ubuntu16.04上安装ROSkineticStep 1. 设置sources.listStep 2. 设置keyStep 3. 更新packageStep 4. 安装ROS kinetic完整版Step 5. 初始化rosdepStep 6. 配置ROS环境Step 7. 安装依赖项Step 8. 测试ROS是否安装成功 TODO:导出docker image

安装docker

Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业 版,强调安全,付费使用,支持周期 24 个月。 Docker CE 分为 stable,test 和 nightly 三个更新频道。每六个月发布一个 stable 版 本(18.09,19.03,19.09,……)。 Docker.com: https://docs.docker.com/install/linux/docker-ce/ubuntu/

我们主要讲解在 Ubuntu 16.04 上使用 apt 方式安装 Docker CE v18.09 的方法。

Step 1. 卸载旧版本

Ubuntu 官方库里的 Docker 版本比较旧,我们需要先卸载它。旧版本的 Docker 称为 docker、docker-engine、docker.io 等,使用以下命令卸载旧版本:

$ sudo apt remove docker docker-engine docker.io containerd runc

Step 2. 更新 apt 包索引

$ sudo apt update

Step 3. 安装依赖包

由于 apt 源使用 HTTPS 以确保软件下载过程中不被篡改。因此,我们首先需要添加使 用 HTTPS 传输的软件包以及 CA 证书。

$ sudo apt install apt-transport-https ca-certificates curl software-properties-common

Step 4. 添加官方 GPG 密钥

为了确认所下载软件包的合法性,需要添加软件源的 GPG 密钥。

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo aptkey add -

Step 5. 添加 Docker 软件源

我们的 PC 一般是 x86_64/amd64 架构,可以使用以下的命令添加 Docker 软件源。

$ sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”

Step 6. 安装 Docker CE

更新了软件源后需要更新包索引再执行安装。

$ sudo apt update $ sudo apt install docker-ce

Step 7. 验证安装

$ sudo docker -v

查看 docker-ce 的版本,如果输出与下面类似的文本,则表明软件已经安装成功。

Docker version 19.03.8, build afacb8b7f0

Step 8. 配置免sudo运行docker命令

add dockergroup

$ sudo groupadd docker

add user to docker group

$ sudo gpasswd -a ${USER} docker

reboot docker service

$ sudo service docker restart

change current user to new group

$ newgrp docker

ensure docker can run normally without sudo

$ docker ps

拉取image制作容器container

Step 1. 配置镜像加速器

docker官方源里的 Docker 版本比较旧,我们需要配置一个国内源https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,阿里的或者中科大的都可以。 使用以下命令创建/修改配置文件:

$ sudo vim /etc/docker/daemon.json

输入内容

{ "registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"] }

Step 2. 拉取镜像

配置镜像源后,执行下面命令一般就不会连接超时了:

$ docker search ubuntu $ docker pull ubuntu:16.04

docker pull 命令说明

$ docker pull [options] name[:tag|@digest]

成功后可以查看下载的镜像

$ docker images

REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 4e2eef94cd6b 2 weeks ago 73.9MB

Step 3. 镜像生成容器,进入容器

生成容器,重复执行docker run [IMAGE ID]命令可以生成多个容器:

$ docker run -it --name=[container name] --hostname=[host name] -v [/宿主机目录]:[/容器内目录] -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY [IMAGE ID]

docker run命令OPTIONS 说明*

$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...] --attach, -a:连接 STDIN,STDOUT 和 STDERR --detatch, -d:后台运行容器,并返回容器 ID --env-file:从文件读取环境变量 --expose:开放一个或一组端口 --hostname , -h:容器的主机名 , --hostname=[host name] --interactive , -i: 以交互模式运行容器,通常与 -t 同时使用; --mount:将宿主计算机的文件系统连接到容器 --name:设定容器的名字 , --name=[container name] --network:将容器连接到网络 --publish , -p: 端口映射,格式为:宿主计算机端口:容器端口 --rm:退出容器后自动删除 --tty, -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用; --volume , -v [/宿主机目录]:[/容器内目录] 挂载卷 , 在启动 Docker 时,需要使用-v 选项挂载 X11 Server 的 socket 目录,并使用-e 选项设定 DISPLAY 环境变量。/tmp/.X11-unix:/tmp/.X11-unix:将宿主系统的/tmp/.X11-unix 目录挂载到Docker 系统的/tmp/.X11-unix 目录下 --env, -e:设定环境变量 , DISPLAY=$DISPLAY:将 Docker 系统的 DISPLAY 变量设置为宿主系统的 DISPLAY 变量

查看容器(正在运行的):

$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES debec71f8286 4e2eef94cd6b "/bin/bash" 13 minutes ago Up 13 minutes ubuntu16

查看容器(所有已生成的,无论是否运行):

$ docker container ls -a

docker container 命令说明

命令描述docker container attach附加到正在运行的容器docker container commit从容器的更改创建一个新的映像docker container cp在容器和本地文件系统之间复制文件/文件夹docker container create创建一个新的容器docker container diff检查容器文件系统上文件或目录的更改docker container exec在运行容器中运行命令docker container export将容器的文件系统导出为tar存档docker container inspect显示一个或多个容器的详细信息docker container kill杀死一个或多个运行容器docker container logs获取容器的日志docker container ls列出容器docker container pause暂停一个或多个容器内的所有进程docker container port列出端口映射或容器的特定映射docker container prune取出所有停止的容器docker container rename重命名容器docker container restart重新启动一个或多个容器docker container rm删除(移除)一个或多个容器docker container run在新容器中运行命令docker container start启动一个或多个停止的容器docker container stats显示容器的实时流资源使用统计信息docker container stop停止一个或多个运行容器docker container top显示容器的正在运行的进程docker container unpause取消暂停一个或多个容器内的所有流程docker container update更新一个或多个容器的配置docker container wait阻止一个或多个容器停止,然后打印退出代码

进入容器: 只能开启一个终端,多终端同步

$ docker container attach [CONTAINER ID/NAME]

可以开启多个终端,互不干扰

$ docker exec -it [CONTAINER ID/NAME] /bin/bash

docker容器中查看容器linux版本 正确的姿势:

$ cat /etc/issue

错误的姿势,这样查到的是宿主机的系统:

$ cat /proc/version $ uname -a

在Ubuntu16.04上安装ROSkinetic

Step 1. 设置sources.list

$ apt update $ apt install sudo $ sudo sh -c ‘echo “deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main” > /etc/apt/sources.list.d/ros-latest.list’

(lsb_release -sc)报错,Ubuntu-core中不包含lsb_release,通过$ cat /etc/lsb-release查看DISTRIB_CODENAME,确定是xenial,填进上面命令中:

$ sudo sh -c ‘echo “deb http://packages.ros.org/ros/ubuntu xenial main” > /etc/apt/sources.list.d/ros-latest.list’

Step 2. 设置key

$ sudo apt-key adv --keyserver ‘hkp://keyserver.ubuntu.com:80’ --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

Step 3. 更新package

$ sudo apt update

Step 4. 安装ROS kinetic完整版

$ sudo apt install ros-kinetic-desktop-full

Ubuntu dpkg:处理 xxx (–configure)时出错解决办法 *https://blog.csdn.net/gu362418124/article/details/8186744

Step 5. 初始化rosdep

在使用ROS之前需要初始化rosdep

$ sudo rosdep init $ rosdep update

Step 6. 配置ROS环境

$ echo “source /opt/ros/kinetic/setup.bash” >> ~/.bashrc $ source ~/.bashrc

Step 7. 安装依赖项

$ sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential

Step 8. 测试ROS是否安装成功

打开一个终端,输入以下命令,显示有ROS的版本,还有一些节点、端号:

$ roscore

再打开一个终端,输入以下命令,弹出一个小乌龟窗口:

$ rosrun turtlesim turtlesim_node

出现一个小乌龟的LOGO后,再打开一个终端,输入以下命令:

$ rosrun turtlesim turtle_teleop_key

再打开一个终端,输入以下命令,可以查看ROS节点信息:

$ rosrun rqt_graph rqt_graph

TODO:导出docker image

最新回复(0)