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是创建后镜像的名字+版本,冒号:前为名字,后面为镜像的版本

编写一个自动化安装 Docker 容器脚本可以极大地提高部署效率,尤其是在需要频繁部署或跨多个环境部署时。以下是一个完整的自动化安装脚本示例及其解析。 ### 自动化安装 Docker 容器脚本 下面是一个基础的 Bash 脚本,用于自动化安装 Docker启动服务,并运行一个容器(以 `nginx` 为例): ```bash #!/bin/bash # 更新系统软件包 sudo apt-get update -y # 安装必要的依赖包 sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common # 添加 Docker 的官方 GPG 密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 添加 Docker 的 APT 源 echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 再次更新软件包索引 sudo apt-get update -y # 安装 Docker 引擎 sudo apt-get install -y docker-ce docker-ce-cli containerd.io # 启动 Docker 服务并设置开机自启 sudo systemctl start docker sudo systemctl enable docker # 验证 Docker 是否安装成功 sudo docker info # 拉取并运行 nginx 容器 sudo docker run -d -p 80:80 --name my-nginx nginx ``` ### 脚本说明 1. **更新系统**:确保系统软件包列表是最新的。 2. **安装依赖**:安装运行 Docker 所需的基础工具和库。 3. **添加 GPG 密钥与仓库源**:配置 Docker 的官方仓库以便后续安装[^3]。 4. **安装 Docker 引擎**:从仓库中安装最新版本的 Docker。 5. **启动并启用 Docker 服务**:保证 Docker 在系统重启后能自动运行。 6. **验证安装**:通过 `docker info` 查看 Docker 状态及版本信息。 7. **运行容器**:拉取官方 `nginx` 镜像并在后台运行一个容器,将宿主机的 80 端口映射到容器的 80 端口[^1]。 ### 进阶建议 - **使用 Docker Compose**:对于多容器应用,可以结合 `docker-compose.yml` 文件来定义服务,简化部署流程[^2]。 - **权限管理**:考虑将用户加入 `docker` 组以避免每次执行命令都需要 `sudo`。 - **日志与监控**:在脚本中添加日志记录功能,便于调试和维护。 - **错误处理**:为关键步骤添加错误检查逻辑,如检测命令是否执行成功,失败则退出脚本。 ### 示例:Docker Compose 脚本自动化部署 创建 `docker-compose.yml` 文件如下: ```yaml version: '3' services: web: image: nginx ports: - "80:80" container_name: my-nginx ``` 然后编写一个简单的启动脚本: ```bash #!/bin/bash # 安装 Docker Compose(如果尚未安装) sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose # 进入项目目录并启动服务 cd /path/to/your/project sudo docker-compose up -d ``` 该脚本会根据 `docker-compose.yml` 文件的内容自动部署服务[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值