当前位置 博文首页 > 文章内容

    Docker 镜像管理及基础命令(二)

    作者: 栏目:未分类 时间:2020-07-29 18:01:22

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    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 机器上放一个这个脚本,方便进入容器查看内容.