当前位置:   article > 正文

Docker自动脚本_docker 容器启动后 自动执行脚本

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

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

删除容器

#!/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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

创建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"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

PS

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

创建docker镜像

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/401058
推荐阅读
相关标签
  

闽ICP备14008679号