玖叶教程网

前端编程开发入门

Docker使用笔记

在第一个终端:

sudo docker pull osrf/ros:kinetic-desktop

sudo docker run -it ros:kinetic

source ros_entrypoint.sh

roscore

在另外一个终端:

sudo docker ps -l

sudo docker exec -it compassionate_cartwright bash

source ros_entrypoint.sh

rostopic list

安装RabbitMQ

sudo docker pull rabbitmq

sudo docker run -di --name rabbitmq -p 4369:4369 -p 5671:5671 -p 5672:5672 -p 15671:15671 -p 15672:15672 -p 25672:25672 rabbitmq

sudo docker exec -it rabbitmq /bin/bash

rabbitmq-plugins enable rabbitmq_management

新建一个Dockerfile

FROM ros:kinetic-ros-base

WORKDIR /root

# ROS setting

RUN /bin/bash -c "mkdir -p robot_ws/src"

#RUN cd robot_ws/src && /bin/bash -c "source /opt/ros/kinetic/setup.bash; catkin_init_workspace"

#RUN cd robot_ws && /bin/bash -c "source /opt/ros/kinetic/setup.bash; catkin_make"

#RUN cd /root && echo source /root/robot_ws/devel/setup.bash >> .bashrc

ENV ROS_PACKAGE_PATH=/root/robot_ws:$ROS_PACKAGE_PATH

ENV ROS_WORKSPACE=/root/robot_ws

RUN apt-get update

RUN DEBIAN_FRONTEND=noninteractive apt-get install -y ssh-client

#RUN DEBIAN_FRONTEND=noninteractive ssh-keygen

# clone repository

WORKDIR /root

#RUN cd robot_ws && git clone [email protected]:robots/robot_ws_src.git src --recursive

构建镜像

sudo docker build -t robot .

运行容器

sudo docker run -it robot

重新构建镜像

整体思路:运行一个容器,在运行容器的基础上添加需要的服务,然后导出为新的images。

sudo docker ps -a

sudo docker commit 845e8472f250 centos:v1

命令中的一串数字是刚才运行container’s ID

数字后面的是新建镜像的repository:tag

docker push 注意事项

sudo docker login -u username -p password

sudo docker images

sudo docker tag imagename:tag youraccount/imagename

sudo docker push youraccount/imagename

sudo docker pull youraccount/imagename


安装docker-compose

pip install pyrsistent==0.16.1

运行docker(arm)

sudo docker run --net host -it --privileged -v /dev:/dev 116.62.202.42:5001/robot_arm_v1

运行docker(amd)

sudo docker run --net host -it --privileged -v /dev:/dev 116.62.202.42:5001/robot_amd_v1

docker自启动ros

sudo docker run --net host -it --privileged -v /dev:/dev 116.62.202.42:5001/robot_amd_v4 /sbin/init

docker自启动ros(后台启动)

sudo docker run --net host -itd --privileged -v /dev:/dev 116.62.202.42:5001/robot_amd_v4 /sbin/init

docker自启动ros(后台启动)带name

sudo docker run --net host -itd --name robot --privileged -v /dev:/dev 116.62.202.42:5001/robot_amd_v4 /sbin/init

docker容器开机自启动

sudo docker run --net host -itd --name robot --restart=always --privileged -v /dev:/dev 116.62.202.42:5001/robot_amd_v4 /sbin/init

关闭docker容器开机自启动

sudo docker ps -l

sudo docker stop CONTAINER ID

sudo docker rm CONTAINER ID

sudo docker run --net host -itd --name robot --restart=no --privileged -v /dev:/dev 116.62.202.42:5001/robot_amd_v4 /sbin/init

在另外一个窗口

sudo docker exec -it robot bash

docker login 报【Error response from daemon: Get https://172.17.8.201:8002/v2/: http: server gave HTTP response to HTTPS client】

原因:docker镜像仓库暂不支持https

解决方案:

在”/etc/docker/“目录下,创建”daemon.json“文件(如果有的话直接覆盖)。在文件中写入

{ "insecure-registries":["172.17.8.201:8003"] }

然后重启docker服务

就OK啦

docker 传输文件

sudo docker cp 本地文件的路径 container_id:<docker容器内的路径>

登录docker

sudo docker login -u touchair -p P@ssw0rd 116.62.202.42:5001

sudo docker push 116.62.202.42:5001/robot_arm_v1

sudo docker push 116.62.202.42:5001/robot_amd_v1

arm版本

sudo docker pull 116.62.202.42:5001/robot_arm_v1

amd版本

sudo docker pull 116.62.202.42:5001/robot_amd_v1

安装rabbitmq

sudo docker pull rabbitmq:management

sudo docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management

镜像加速

vim /etc/docker/daemon.json

{

"registry-mirrors": [

"https://registry.docker-cn.com" #官方提供的国内镜像加速器地址

],

"insecure-registries": ["116.62.202.42:5001"]

}

重启服务

sudo systemctl daemon-reload

sudo systemctl restart docker

docker运行rabbitmq冲突

docker: Error response from daemon: Conflict. The container name "/rabbitmq" is already in use by container

sudo docker ps -a

sudo docker stop CONTAINER ID

sudo docker rm CONTAINER ID

sudo docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management

关于udev无法启动的问题* udev does not support containers, not started

Then, I change the init script in /etc/init.d/udev, comments next 2 parts:

1) Comments next:

#if ! ps --no-headers --format args ax | egrep -q '^\['; then

# log_warning_msg "udev does not support containers, not started"

# exit 0

#fi

2) Comments next:

#if [ ! -w /sys ]; then

# log_warning_msg "udev does not support containers, not started"

# exit 0

#fi

QT安装报错

apt-get install libx11-dev libxext-dev libxtst-dev

完全删除安装的docker安装包

dpkg -l | grep docker

sudo apt remove --purge docker-ce docker-ce-cli docker-ce-rootless-extras

sudo rm -rf /var/lib/docker

设置Docker容器日志大小

sudo vim /etc/docker/daemon.json

{

"registry-mirrors": [

"https://registry.docker-cn.com"

],

"log-driver":"json-file",

"log-opts": {"max-size":"500m", "max-file":"3"},

"insecure-registries": ["116.62.202.42:5001"]

}

max-size=500m,意味着一个容器日志大小上限是500M,

max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json

注:设置后只对新添加的容器有效。


重启docker守护进程

sudo systemctl daemon-reload

sudo systemctl restart docker

docker宿主机通过htop查看进程,发现有agetty进程100%占用CPU资源

解决方法

引起这个问题的原因是在使用"docker run"运行容器时使用了 "/sbin/init"和"--privileged"参数

在宿主机以及Container中运行下述命令

sudo systemctl stop [email protected]

sudo systemctl mask [email protected]

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言