暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

进入docker容器三种方法

MySQL数据库运维技术栈 2021-05-06
1344

    现在docker容器非常火,主要是docker非常轻量级,当技术人员想研究,学习一些新技术时,又不想去搭建环境,这个时候docker就是一个非常好的选择,例如,搭建一个redis,mysql数据库环境,安装好docker的包,只需要从官网拉取对应的镜像包,启动一个docker容器就好

    docker pull mysql
    docker run --name mysql5.7.28 -e MYSQL_ROOT_PASSWORD=Root@123 -d -it mysql:5.7.28

        两条命令就创建好一个mysql环境了,非常快捷,当然这个是测试环境,如果要到生产环境,在容器里跑mysql数据库,要考虑的东西就太多了,如果容器异常挂掉,再也起不来,mysql数据库怎么办,不可能向应用一样,再创建一个新的mysql容器就解决问题的,关键的问题,要解决无论什么时候,Mysql的数据不能丢失。


    容器建好之后,怎么才能进入docker容器呢?

    基本上有3种方法


    第一种:使用docker attach进入Docker容器
       这种方法,我个人不太喜欢,因为有时候进入容器的时候,会卡住,一直没找到原因

      docker attach 7b20f88dc2fe

      第二种:使用SSH进入docker容器
          这种方式也是有其缺陷的,例如密码和密钥的管理,需要你打包到docker镜像里,如果SSH爆出有新的漏洞,还得升级SSH,也是非常麻烦的。


      第三种:nsenter进入Docker容器
         使用nsenter进入docer容器,我个人非常喜欢,而且还有社区人员将nsenter进行包装,使用起来更方便,例如docer-enter就是一个非常好用的工具,给大家演示一下

        docker-enter 7b20f88dc2fe

        那docer-enter怎么安装呢,下面详细说明一下

          wget https://www.kernel.org/pub/linux/utils/util-linux/v2.27/util-linux-2.27.tar.gz
          tar -zxvf util-linux-2.27.tar.gz
          cd util-linux-2.27
          ./configure --without-ncurses && make nsenter
          cp nsenter usr/local/bin

               /usr/local/bin目录下面,创建docker-enter的bash脚本, 内容如下:
          脚本内容如下所示,docker-enter脚本附上可执行的权限

            #!/bin/sh


            if [ -e $(dirname "$0")/nsenter ]; then
            NSENTER=$(dirname "$0")/nsenter
            else
            NSENTER=nsenter
            fi


            if [ -z "$1" ]; then
            echo "Usage: `basename "$0"` CONTAINER [COMMAND [ARG]...]"
            echo ""
            echo "Enters the Docker CONTAINER and executes the specified COMMAND."
            echo "If COMMAND is not specified, runs an interactive shell in CONTAINER."
            else
            PID=$(docker inspect --format "{{.State.Pid}}" "$1")
            if [ -z "$PID" ]; then
            exit 1
            fi
            shift


            OPTS="--target $PID --mount --uts --ipc --net --pid --"


            if [ -z "$1" ]; then
            # No command given.
            # Use su to clear all host environment variables except for TERM,
            # initialize the environment variables HOME, SHELL, USER, LOGNAME, PATH,
            # and start a login shell.
            "$NSENTER" $OPTS su - root
            else
            # Use env to clear all host environment variables.
            "$NSENTER" $OPTS env --ignore-environment -- "$@"
            fi
            fi





            文章转载自MySQL数据库运维技术栈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论