Docker 常用命令:

## Docker  登录下载镜像:
docker login                                 # 登录官方hub.docker.com
docker pull nginx:alpine                     # 下载nginx的alpine版本
docker push                                  # 推送镜像

## Docker 查找镜像: 
docker search nginx                          # 查找nginx 的镜像
docker images nginx:latest                   # 查找镜像: latest 为标签
docker rmi 镜像ID/Nginx:latest               # 删除镜像

## Dcoker 启动容器(后面详细讲这部分): 
docker run -d -ti nginx                      # 启动一个没有端口映射的容器
docker ps -a                                 # 查看正在运行的容器
docker rm 容器ID                             # 删除一个容器
docker rm -fv 容器ID / nginx                 # 强制删除一个正在运行的容器

## Docker images 导出: 
docker save centos > centos.tar.gz           # 第一种导出镜像 
docker save centos -o /opt/centos.tar.gz     # 第二种导出镜像

## Docker images 导入:
docker load -i /opt/centos.tar.gz            # 导入镜像

Docker 容器常用命令:

CTRL + p + q                        ## 退出不注销容器
docker ps                           ## 显示正在运行的容器
docker ps -a                        ## 显示正在运行的容器
docker rm -f $(docker ps -a -q)     ## 批量删除所有容器   慎重!!!
docker rm -f `docker ps -aq -f status=exited`   ## 批量删除已退出容器
docker ps -q -f status=exited        ## 

docker run -d - ti centos           ## 运行一个容器

## 指定端口映射:
1 )  本地端口81 映射到容器80 端口:
docker run -d -p 81:80 --name nginx-test-port1 nginx:latest

[root@node-2 ~]# docker run -d -p 81:80 --name nginx-test-port1 nginx:latest
674d119d56a4bdacf7a5c8f200fd3b11f6b0b35112e91b2c035a651c01e6423c
[root@node-2 ~]# docker ps -a 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
674d119d56a4        nginx:latest        "/docker-entrypoint.…"   3 seconds ago       Up 2 seconds        0.0.0.0:81->80/tcp   nginx-test-port1

2 ) 指定IP地址 和端口映射:
docker run -d -ti -p 10.10.5.136:8001:80 nginx

3 ) 指定端口映射和命名容器:
docker run -d -ti --name=linux36-c1 -p 8002:80 nginx

## Docker 日志查看:
docker logs nginx-test-port3       # 一次查看日志 
docker logs -f  nginx-test-port3   # 持续查看日志

## Docker 查看已经映射的端口:
 docker port 容器ID                # 查看docker 映射的端口        

## Docker 自定义容器名称:
docker run -d -ti --name linux36-c1 -p 80:80 -p 443:443 nginx  

## Docker 停止容器:
docker stop 容器ID

## Docker 启动容器:
docker start 容器ID

## Docker 停止所有容器:
docker stop `docker ps -q`

## Docker 启动所有容器:
docker start `docker ps -a -q`

Docker 进入正在运行的容器:

## 使用attach   进入正在运行的容器(exit退出后 容器关闭 不推荐使用):
docker attch 容器ID

## 使用exec     进入正在运行的容器(推荐使用)
docker exec -it 容器ID /bin/bash
#docker exec -ti f1ce /bin/bash
#exit 退出后 docker ps -a 容器并没有退出.

## 使用nsenter 命令:
推荐使用此方式,nsenter 命令需要通过PID 进入到容器内部,不过可以使用docker inspect 获取到容器的ID
[root@node-2 ~]# yum install util-linux -y                           # 安装nsenter 工具
docker inspect b3c4e1812182
docker inspect -f "{{.NetworkSettings.Networks.bridge.IPAddress}}" b3c4e1812182   # 获取容器的IP地址

## 取得容器的pid进程:
[root@node-2 ~]# docker inspect -f "{{.State.Pid}}"  b3c4e1812182     # 获取容器的Pid.
41362    
[root@node-2 ~]# nsenter -t 41362 -m -u -i -n -p                      # 通过nsenter 连接到容器. 41362为上一步得到的B3C4E1812182的Pid
root@b3c4e1812182:/#

Docker 脚本方式进入容器:

## 创建docker_in.sh 脚本,内容如下:

#!/bin/bash

docker_in(){
   NAME_ID=$1
   PID=$(docker inspect -f "{{.State.Pid}}" $NAME_ID)
   nsenter -t $PID -m -n -i -u -p
}

docker_in $1

## 测试脚本是否可以进入指定容器内部
[root@node-2 ~]# chmod 755 docker_in.sh 
[root@node-2 ~]# ./docker_in.sh b3c4e1812182
root@b3c4e1812182:/# 

*** 可以在所有的K8S 或者 docker 机器上放一个这个脚本,方便进入容器查看内容.