docker 容器管理

创建新容器但不启动:
# docker create -it daocloud.io/library/centos:5 /bin/bash
​
创建并运行一个新Docker 容器:
    同一个镜像可以启动多个容器,每次执行run子命令都会运行一个全新的容器
    # docker run -it --restart=always centos:7 /bin/bash
    如果执行成功,说明CentOS 容器已经被启动,并且应该已经得到了 bash 提示符。
    -i   
        捕获标准输入输出
    -t   
        分配一个终端或控制台
    --restart=always   
        容器随docker engine自启动,因为在重启docker的时候默认容器都会被关闭   
        也适用于create选项
         
    --rm
        默认情况下,每个容器在退出时,它的文件系统也会保存下来,这样一方面调试会方便些,因为你可以通过查看日志等方式来确定最终状态。另一方面,也可以保存容器所产生的数据。
        但是当你仅仅需要短暂的运行一个容器,并且这些数据不需要保存,你可能就希望Docker能在容器结束时自动清理其所产生的数据。这个时候就需要--rm参数了。注意:--rm 和 -d不能共用
​
若要断开与容器的连接,并且关闭容器:
   容器内部执行如下命令
    [root@d33c4e8c51f8 /]#exit
​
如果只想断开和容器的连接而不关闭容器:
    快捷键:ctrl+p+q
​
查看容器:
    只查看运行状态的容器:
    #docker ps
​
    #docker ps -a
    -a  查看所有容器
    
    只查看所有容器id:
    # docker ps -a -q
 
    列出最近一次启动的容器
    # docker ps -l   
​
查看容器详细信息:
inspect   Return low-level information on a container or image
用于查看容器的配置信息,包含容器名、环境变量、运行命令、主机配置、网络配置和数据卷配置等。
​
目标:
查找某一个运行中容器的id,然后使用docker inspect命令查看容器的信息。
​
提示:
可以使用镜像id的前面部分,不需要完整的id。

[root@master ~]# docker inspect d95    //d95是我机器上运行的一个容器ID的前3个字符
[
    {
        "Id": "d95a220a498e352cbfbc098c949fc528dbf5a5c911710b108ea3a9b4aa3a4761",
        "Created": "2017-07-08T03:59:16.18225183Z",
        "Path": "bash",
        "Args": [],
        "State": {
            "Status": "exited",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
容器信息很多,这里只粘贴了一部分
​
比如:容器里在安装ip或ifconfig命令之前,查看网卡IP显示容器IP地址和端口号,如果输出是空的说明没有配置IP地址(不同的Docker容器可以通过此IP地址互相访问)
# docker inspect --format='{{.NetworkSettings.IPAddress}}'  容器id
列出所有绑定的端口:
# docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> 
{{(index $conf 0).HostPort}} {{end}}' $INSTANCE_ID
​
# docker inspect --format='{{range $p, 
$conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' 
b220fabf815a
22/tcp -> 20020
​
找出特殊的端口映射:
比如找出容器里22端口所映射的docker本机的端口:
# docker inspect --format='{{(index (index .NetworkSettings.Ports "22/tcp") 
0).HostPort}}' $INSTANCE_ID
[root@localhost ~]# docker inspect --format='{{(index (index .NetworkSettings.Ports "22/
tcp") 0).HostPort}}' b220fabf815a
20020
​
http://note.youdao.com/noteshare?id=4ee7884b3d25c16850d78cfdec276add
​
启动容器:
# docker start  name
​
关闭容器:
# docker stop  name
# docker kill    name      --强制终止容器
​
杀死所有running状态的容器
# docker kill $(docker ps  -q)  
​
stop和kill的区别:
    docker stop命令给容器中的进程发送SIGTERM信号,默认行为是会导致容器退出,当然,容器内程序可以捕获该信号并自行处理,例如可以选择忽略。而docker kill则是给容器的进程发送SIGKILL信号,该信号将会使容器必然退出。 
​
删除容器:
    # docker rm 容器id或名称
    要删除一个运行中的容器,添加 -f 参数
    
    根据格式删除所有容器:
    # docker rm $(docker ps -qf status=exited)
        
重启容器:
#docker restart name
​
暂停容器:
pause   --暂停容器内的所有进程,
    通过docker stats可以观察到此时的资源使用情况是固定不变的,通过docker logs -f也观察不到日志的进一步输出。
​
恢复容器:
unpause  --恢复容器内暂停的进程,与pause参数相对应
​
# docker start infallible_ramanujan  //这里的名字是状态里面NAMES列列出的名字,这种方式同样会让容器运行在后台
​
让容器运行在后台:
•如果在docker run后面追加-d=true或者-d,那么容器将会运行在后台模式。此时所有I/O数据只能通过网络资源或者共享卷组来进行交互。因为容器不再监听你执行docker run的这个终端命令行窗口。但你可以通过执行
docker attach来重新附着到该容器的回话中。注意,容器运行在后台模式下,是不能使用--rm选项的
​
#docker run -d IMAGE[:TAG] 命令
#docker logs container_id   #打印该容器的输出
​
# docker run -it -d --name mytest docker.io/centos:7 /bin/sh -c "while true; do echo hello world; sleep 2; done"
37738fe3d6f9ef26152cb25018df9528a89e7a07355493020e72f147a291cd17
​

[root@localhost ~]# docker logs mytest
hello world
hello world
​
docker attach container_id #附加该容器的标准输出到当前命令行

[root@localhost ~]# docker attach mytest
hello world
hello world
.......
此时,ctrl+d等同于exit命令,按ctrl+p+q可以退出到宿主机,而保持container仍然在运行
​
rename 
    Rename a container
    
stats     
    Display a live stream of container(s) resource usage statistics    
    --动态显示容器的资源消耗情况,包括:CPU、内存、网络I/O   
    
port    
    List port mappings or a specific mapping for the CONTAINER
     --输出容器端口与宿主机端口的映射情况
    # docker port blog
        80/tcp -> 0.0.0.0:80
     容器blog的内部端口80映射到宿主机的80端口,这样可通过宿主机的80端口查看容器blog提供的服务
 
连接容器:    
方法1.attach
# docker attach 容器id   //前提是容器创建时必须指定了交互shell
​
方法2.exec      
    通过exec命令可以创建两种任务:后台型任务和交互型任务
    交互型任务:
        # docker exec -it  容器id  /bin/bash
        root@68656158eb8e:/# ls     
    
    后台型任务:
        # docker exec 容器id touch /testfile
​
监控容器的运行:
可以使用logs、top、events、wait这些子命令
    logs:
        使用logs命令查看守护式容器
        可以通过使用docker logs命令来查看容器的运行日志,其中--tail选项可以指定查看最后几条日志,而-t选项则可以对日志条目附加时间戳。使用-f选项可以跟踪日志的输出,直到手动停止。
        # docker logs    App_Container   //不同终端操作
        # docker logs -f App_Container
​
    top:
        显示一个运行的容器里面的进程信息
        # docker top birdben/ubuntu:v1
​
    events    
        Get real time events from the server
        实时输出Docker服务器端的事件,包括容器的创建,启动,关闭等。
​
        # docker start loving_meninsky
        loving_meninsky
​
        # docker events  //不同终端操作
        2017-07-08T16:39:23.177664994+08:00 network connect  
        df15746d60ffaad2d15db0854a696d6e49fdfcedc7cfd8504a8aac51a43de6d4 
        (container=50a0449d7729f94046baf0fe5a1ce2119742261bb3ce8c3c98f35c80458e3e7a, 
        name=bridge, type=bridge)
        2017-07-08T16:39:23.356162529+08:00 container start 
        50a0449d7729f94046baf0fe5a1ce2119742261bb3ce8c3c98f35c80458e3e7a (image=ubuntu, 
        name=loving_meninsky)
​
    wait      
        Block until a container stops, then print its exit code   
        --捕捉容器停止时的退出码
        执行此命令后,该命令会"hang"在当前终端,直到容器停止,此时,会打印出容器的退出码
        # docker wait 01d8aa  //不同终端操作
           137
​
    diff
        查看容器内发生改变的文件,以elated_lovelace容器为例
        root@68656158eb8e:/# touch c.txt
​
        用diff查看:
        包括文件的创建、删除和文件内容的改变都能看到 
        
[root@master ~]# docker diff  容器名称
        A /c.txt
​
        C对应的文件内容的改变,A对应的均是文件或者目录的创建删除
       
 [root@docker ~]# docker diff 7287
        A /a.txt
        C /etc
        C /etc/passwd
        A /run
        A /run/secrets  
        
宿主机和容器之间相互COPY文件
    cp的用法如下:
    Usage:    docker cp [OPTIONS] CONTAINER:PATH LOCALPATH
                   docker cp [OPTIONS] LOCALPATH CONTAINER:PATH
​
    如:容器mysql中/usr/local/bin/存在docker-entrypoint.sh文件,可如下方式copy到宿主机
    #  docker cp mysql:/usr/local/bin/docker-entrypoint.sh   /root
​
    修改完毕后,将该文件重新copy回容器
    # docker cp /root/docker-entrypoint.sh mysql:/usr/local/bin/      

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值