Docker常用命令及脚本

1、常用命令
docker 
        search centos                                #搜索镜像     
        pull centos                                    #下载镜像
        save centos -o centos.tar centos  #保存并导出镜像文件
        load --input centos.tar                  #导入镜像文件
        rmi IMAGEID                                 #删除镜像
        ps                                                  #查看正在运行的容器
        ps -a -l                                           #查看所有容器                          
        images                                           #列出镜像
 
        run --name mydocker -h hostname -t -i -d centos /bin/bash   #-t(启动一个伪终端) -i(打开标准输入) -d 后台运行
        start mydocker                                                         #启动容器
        stop mydocker                                                         #停止容器
        attach                                                                       #进入容器,但是退出后容器停止
        esec mydocker ps                                                    #不进入容器执行命令
        esec -it mydocker /bin/bash                                   #类似nsenter命令
        inspect -f "{{ .State.Pid }}" mydocker                       #获取容器的PID
   inspect -f '{{.State.Pid}} {{.Id}}' $(docker ps -a -q)   #获取所有容器的PID
        nsenter -t PID -m -u -i -n -p                                   #独立命令(前边不用加docker)进入容器,且退                                                                                           出后不终止容器,需要yum util-linux
        
        rm                                                                             #删除容器
        rm -f                                                                         #删除正在运行的容器
        logs ID                                                                      #看日志
        
        port ID                                                                      #查看端口映射
        
2、网络映射
    docker run -p
        IP:hostPort:containerPort:udp
    可以用-p -p指定多个端口映射
 
3、数据管理
    数据卷
    docker run -d --name mydocker -v /data nginx                #在容器里挂载一个/data的目录
    docker inspect -f {{.Mounts}} mydocker                             #查看挂载的目录在宿主机的位置
    docker run -d --name mydocker -v /newdata:/data:ro(rw) nginx  #指定目录或文件挂载和权限,
                                                                                                               源:目标;只读、读写等
    数据卷容器
    docker run -it --name mydocker --volumes-from mydocker2 centos /bin/bash
                                                                 #指定一个数据容器做源挂载到此容器,类似于网络共享硬盘
 
4、可用命令
    docker kill/rm $(docker ps -a -q)            #杀死/删除所有docker容器
    systemctl daemon-reload                    #reload /etc/docker/daemon.json配置文件
 
进入容器脚本
#!/bin/sh

if [ -e $(dirname "$0")/nsenter ]; then
  # with boot2docker, nsenter is not in the PATH but it is in the same folder
  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."
#如未指定命令,则在容器中运行交互式shell
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
"$NSENTER" $OPTS /bin/su - root
  else
    # Use env to clear all host environment variables.
    "$NSENTER" $OPTS env --ignore-environment -- "$@"
  fi
fi
原文地址:https://www.cnblogs.com/suminem/p/11097364.html