Docker自动脚本

下面是几个Docker容器操作的自动脚本,以简化docker容器操作的复杂命令,创建文件,复制,编辑,保存,添加可执行权限,运行即可使用。

Docker容器操作

创建容器

创建容器脚本

#!/bin/bash
# @filename make_container.sh
echo "-- input container name"
read CONTAINER_NAME

echo "-- input image name"
read IMAHE_NAME


echo "-- SUMMARY --"
echo "-- CONTAINER_NAME : $CONTAINER_NAME"
echo "-- IMAHE_NAME     : $IMAHE_NAME"

echo ""
echo "-- removing exist container"
docker stop ${CONTAINER_NAME} >/dev/null 2>&1
docker rm   ${CONTAINER_NAME} >/dev/null 2>&1

echo "-- making a workspace $CONTAINER_NAME"
mkdir -p $CONTAINER_NAME
chmod -R a+rw $CONTAINER_NAME

echo "-- adding xhost"
xhost + >/dev/null

echo "-- creating"
docker run                                          \
    -it                                             \
    -v /tmp/.X11-unix:/tmp/X11-unix                 \
    -e DISPLAY=unix${DISPLAY}                       \
    -e GDK_SCALE                                    \
    -e GDK_DPI_SCALE                                \
    --name=${CONTAINER_NAME}                        \
    -v ${PWD}/$CONTAINER_NAME:/home/$CONTAINER_NAME \
    --network=host                                  \
    ${IMAHE_NAME}                                   \
    /bin/bash

if [ $? -eq 0 ]; then
    echo "-- done"
else
    echo "-- failed"
fi

PS

  • -v /tmp/.X11-unix:/tmp/X11-unix -e DISPLAY=unix${DISPLAY} -e GDK_SCALE -e GDK_DPI_SCALE目的是可视化显示界面(可去除)
  • --network=host与主机共享网络
  • -v ${PWD}/$CONTAINER_NAME:/home/$CONTAINER_NAME将主机的文件夹映射到容器指定目录中
  • 加入--rm参数可将该容器设置为临时容器,即运行完最后的命令后将该容器删除

进入创建好的容器

#!/bin/bash
# @filename into_container.sh
xhost + > /dev/null

docker ps -a

echo "-- Which container name to be get in?"
read CONTAINER_NAME

echo "-- command. default /bin/bash"
read COMMAND
if [ ! $COMMAND ]; then
    COMMAND="/bin/bash"
fi

docker start ${CONTAINER_NAME} >/dev/null

docker exec -it ${CONTAINER_NAME} ${COMMAND}

删除容器

#!/bin/bash
# @filename remove_container.sh
docker ps -a

echo "-- Which container name to be moved?"
read CONTAINER_NAME

docker stop ${CONTAINER_NAME} >/dev/null

docker rm ${CONTAINER_NAME} >/dev/null

echo "-- Do you want to remove the workspace also?"
echo "-- 'y' or 'n'. default : 'n'"
read is_ws_remove

if [ $is_ws_remove = "y" ];then
    rm -r ./${CONTAINER_NAME}
fi

创建docker镜像

下面是ros-humble-core的Dockerfile文件

# This is an auto generated Dockerfile for ros:ros-core
# generated from docker_images_ros2/create_ros_core_image.Dockerfile.em
FROM ubuntu:jammy

# setup timezone
RUN echo 'Etc/UTC' > /etc/timezone && \
    ln -s /usr/share/zoneinfo/Etc/UTC /etc/localtime && \
    apt-get update && \
    apt-get install -q -y --no-install-recommends tzdata && \
    rm -rf /var/lib/apt/lists/*

# install packages
RUN apt-get update && apt-get install -q -y --no-install-recommends \
    dirmngr \
    gnupg2 \
    && rm -rf /var/lib/apt/lists/*

# setup sources.list
RUN echo "deb http://packages.ros.org/ros2/ubuntu jammy main" > /etc/apt/sources.list.d/ros2-latest.list

# setup keys
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

# setup environment
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8

ENV ROS_DISTRO humble

# install ros2 packages
RUN apt-get update && apt-get install -y --no-install-recommends \
    ros-humble-ros-core=0.10.0-1* \
    && rm -rf /var/lib/apt/lists/*

# setup entrypoint
COPY ./ros_entrypoint.sh /

ENTRYPOINT ["/ros_entrypoint.sh"]
CMD ["bash"]

PS

  • FROM 基于该镜像进行创建
  • RUN 运行该命令
  • ENV 设置环境变量
  • COPY 拷贝指定文件到要创建的镜像中
  • ENTRYPOINT 启动后自动运行
  • CMD 运行的指令

创建docker镜像

 docker build -t ros2-humble-core:v1 .

ros2-humble-core:v1是创建后镜像的名字+版本,冒号:前为名字,后面为镜像的版本

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值