Docker基本命令及工作原理

  1、首先确保Docker运行正常:

docker info

  2、启动以第一个Docker容器:

docker run -i -t ubuntu /bin/bash

   命令说明:

    ubuntu:这个是基础镜像名称,可以是mysql、redis等所有的基础镜像,他指以什么镜像创建一个新的容器,此例子使用ubuntu,指在ubuntu镜像的基础上创建一个镜像(在基础镜像上可以加各种其他操作,本例子只是单纯的使用ubuntu镜像创建了一个容器,未做其他附加操作)。

    -i :说明这是一个标准输入,可以进行交互, -t :告诉Docker要为新创建的容器创建一个伪tty终端,从而可以进行交互。简单的说,-i -t 两个一起使用,我们才能在终端使用命令操作新创建的容器。(与之相反的是运行在后台不能进行交互的容器,后面会说到)

            /bin/bash:执行命令后进入容器的shell界面,即直接可以与新创建的容器进行交互(看下图红色标记,即为新增容器ID,说明已经进入新建容器的shell界面)。

  3、使用第一个容器

    (1)查看新容器的相关信息

      查看容器主机名:hostname   ,实际上与容器ID一致。

      查看host文件:cat /etc/hosts

      查看容器接口:ip a

        说明:(1)如果出现bash: ip: command not found错误:执行 apt-get install iproute iproute-doc 命令

             (2)如果第(1)步出现Unable to locate package iproute-doc 错误,执行 apt-get install xrdp 命令(这一步非常慢,耐心等待)

           (3)如果第(2)步出现Unable to locate package xrdp 错误,执行 apt-get update 命令

             (4)如果第(2)步出现Package 'iproute' has no installation candidate 错误,执行 apt-get update 、apt-get upgrade、apt-get install iproute命令

      检查容器进程:ps -aux

      在第一个docker容器中安装软件包,这里使用安装vim软件作为示例

apt-get update && apt-get install vim

          退出在容器的操作,返回宿主机:exit   (下面示例可以看出原来在ID为78cb60275879的容器内,执行exit命令后,返回了宿主机)

              如果想重新进入终端后,可以使用 docker ps 查看正在运行的docker容器,可以使用docker ps -a 查看所有docker列表(无论是否正在运行)

      重新进入docker 终端,使用 docker attach 78cb60275879 命令,后面的一串字符为上一步的容器ID,也可以使用上一步的容器名称(首先保证docker是运行中的,而不是停止的)。

  4、容器命名

    比原来命令多了 --name参数,可以发现新创建的容器名称即为--name设置的名称

docker run --name UbuntuOfLcl -i -t ubuntu /bin/bash   

  5、重新启动已停止的容器

    即可以使用容器名称重启,也可以使用容器ID重启,Up为正在运行,Exit为已停止运行

docker start UbuntuOfLcl 或 docker start 1c9f7e4c618f   

  6、进入正在运行的docker容器

    第五步虽然启动了docker,但是shell仍然在宿主机上,如果想使用shell操作启动后的docker容器,需要该步操作。

docker attach UbuntuOfLcl         

  7、创建后台运行容器

    前面的例子展示的都是创建一个交互试的容器,一旦退出shell,容器就会停止运行,不适合做服务器;现在创建一个非交互容器。

docker run --name lcl2 -d ubuntu /bin/sh

     也可以在启动时加一些操作,例如让后台输出一些内容,可以使用-c参数:

docker run --name lcl4 -d ubuntu /bin/sh -c "while true; do echo hi lcl;sleep 1;done"

         docker logs lcl3 查看后台  docker logs -f lcl3 动态查看后台

    8、日志驱动,可以使用--log-driver

docker run --log-driver="syslog" --name lcl4 -d ubuntu /bin/sh -c "while true; do echo hi lcl;sleep 1;done"

   9、查看docker容器内部进程:docker top lcl5        

  10、查看docker容器内部统计信息:docker stats lcl5 

   11、在容器内运行进程:exec

    (1)运行后台进程(无需交互)

 docker exec -d UbuntuOfLcl touch /etc/newFile

    (2)运行交互试命令:该命令在UbuntuOfLcl容器内创建了一个新的交互shell

docker exec -t -i UbuntuOfLcl /bin/bash   

  12、停止守护式容器docker stop UbuntuOfLcl  和启动一样,可以使用名称停止,也可以使用容器ID停止。

  13、查看最近创建的容器:docker ps -n x   x为最近创建的容器的数量

   14、自动重启容器:restart  

docker run --restart=always --name lcl6 -d ubuntu /bin/sh -c "while true;do echo hello word;sleep 1;done"

     说明:--restart标志可以为always和on-failure,其中设置为always时,无论什么情况停止的容器都会重启,设置为on-failure时,只有当退出标志为非0的时候才会重启。另外on-failure还接受一个可选的参数数值,表示最多可重启的次数,例如on-failure:5,即最多可以重启5次。(特殊说明:改处的always,我在使用stop命令停止容器时,使用docker ps -a命令查看停止的容器并没有重新启动,状态仍未Exited,不清楚改处是操作问题还是其他隐藏的东西,待验证。)

   15、深入容器

     查看容器:docker inspect lcl5  该命令可以查看非常详细的容器信息,下面截图未全部展示信息。

docker inspect lcl5

     有选择的获取容器信息    --formart 或 -f

       docker inspect -f='{{ .State.Running }}' lcl5  查看容器运行状态(说明:=号左右一定不要有空格,否则会报错,如下图第三条命令,=号也可以省略)

      docker inspect -f='{{.NetworkSettings.IPAddress}}' lcl6  查看容器IP地址(说明:停止运行的容器是没有IP地址的,如下图的lcl5,只有正在运行的容器才有IP地址,如下图的lcl6)

      可以同是查看多个容器的信息

        docker inspect -f '{{.Name}} {{.State.Running}} {{.NetworkSettings.IPAddress}}' lcl4 lcl5 lcl6  (同时查看lcl4、lcl5、lcl6三个容器的名称,运行状态和IP地址)

         如果想深入了解docker,在宿主机的/var/lib/docker/containers/目录下,存放着Docker镜像、容器及容器的配置等信息,下面截图中每一个文件夹对应一个docker容器

 

  16、删除容器

    docker rm lcl7   同样可以使用名称删除,也可以使用容器ID删除

    目前docker没有提供删除所有容器的命令,但是可以使用小技巧来删除:docker rm $(docker ps -a -q)

  17、简单总结

                    

 
 
 
posted @ 2019-09-19 15:47  李聪龙  阅读(372)  评论(0编辑  收藏  举报