• 四、docker容器的操作


    一、容器的启动

    方法一:不推荐使用
          先创建一个容器
          docker create 镜像名称
          在启动容器
          docker start 镜像名称
    方法二:推荐的
          docker run -d -p 宿主机端口:镜像端口 镜像名称:version
          run:创建并运行一个容器
           -d:在后台运行
           -p:端口映射,把宿主机的端口映射为容器系统的端口
           最后接要启动的容器的镜像的名称:镜像版本
           docker run == docker create + docker start

    注意:容器内的第一个进程必须一直处于运行的状态,否则这个容器,就会处于退出状态!

    二、容器的常用命令选项

    docker的命令格式

    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    options的参数
       -t :打开一个终端,像使用交换机一样使用容器
       -i:交互式访问
     --name:容器名字
     --network:指定网络
     --rm:容器一停,自动删除
       -d:剥离与当前终端的关系;否则会一直占据着终端
       -p:端口映射,将容器内服务的端口映射在宿主机的指定端口
          -p <container port>
          -p <hostport>:<container port>
          -p <hostip>:<hostport>:<container port>
       ps: 查看运行着的容器 docker ps == docker container ls 
       ps -a: 查看所有容器

    例子1:

    启动一个web1的nginx的容器

    docker run -d --name web1 -p 80:80 nginx:latest
    [root@inode3 ~]# docker run --name web1 -d -p 80:80 nginx:latest
    03fcdd23c2ad9a9d81551ce3fd3bcf4f3a410c648a895fa6db5b497936515da1

    查看运行容器的状态

    docker ps 
    [root@inode3 ~]# docker ps
     CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
     03fcdd23c2ad        nginx:latest        "nginx -g 'daemon of…"   12 minutes ago      Up 12 minutes       0.0.0.0:80->80/tcp   web1
    [root@inode3 ~]# docker container ls
     CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
     03fcdd23c2ad        nginx:latest        "nginx -g 'daemon of…"   8 minutes ago       Up 8 minutes        0.0.0.0:80->80/tcp   web1

    查看容器的端口映射及容器

    [root@inode3 ~]# docker port web1
    80/tcp -> 0.0.0.0:80

    例子2:

    启动容器时,进入容器里面

    docker run --name ywx -it busybox:latest /bin/sh
    [root@inode3 ~]# docker run --name ywx -it busybox:latest /bin/sh
     / # ls
     bin   dev   etc   home  proc  root  sys   tmp   usr   var
     / # 

    另外启动一个xshell的窗口,查看docker 容器

    [root@inode3 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                NAMES
    b1840dcc4a4d        busybox:latest      "/bin/sh"                About a minute ago   Up About a minute                        ywx
    03fcdd23c2ad        nginx:latest        "nginx -g 'daemon of…"   About an hour ago    Up About an hour    0.0.0.0:80->80/tcp   web1

    可以发现ywx容器在运行

    [root@inode3 ~]# docker run --name ywx -it busybox:latest /bin/sh
    / # ls
    bin   dev   etc   home  proc  root  sys   tmp   usr   var
    / # exit
    [root@inode3 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                NAMES
    b1840dcc4a4d        busybox:latest      "/bin/sh"                3 minutes ago       Exited (0) 7 seconds ago                        ywx

    当我们退出ywx容器时,ywx容器也停止了。因此,在启动容器时,容器内的第一个进程必须一直处于运行的状态,否则这个容器,就会处于退出状态!

    三、停止容器

    停止容器有2中方法

    第一种:关闭运行的容器
    docker stop 容器名或CONTAINER ID
    第二种:杀死运行的容器(不建议使用)
    docker kill 容器名或CONTAINER ID
               -s 指定信号; -9强制停止容器

    例子1:

    关闭一个容器

    [root@inode3 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    71dd5dd51ae4        nginx:latest        "nginx -g 'daemon of…"   4 seconds ago       Up 3 seconds        0.0.0.0:81->80/tcp   web2
    03fcdd23c2ad        nginx:latest        "nginx -g 'daemon of…"   About an hour ago   Up About an hour    0.0.0.0:80->80/tcp   web1

    有we1和we2两个运行的容器

    使用docker stop来关闭运行的容器web1
    docker stop web1
    [root@inode3 ~]# docker stop web1
    web1
    [root@inode3 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                NAMES
    71dd5dd51ae4        nginx:latest        "nginx -g 'daemon of…"   About a minute ago   Up About a minute   0.0.0.0:81->80/tcp   web2
    [root@inode3 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                          PORTS                NAMES
    71dd5dd51ae4        nginx:latest        "nginx -g 'daemon of…"   3 minutes ago       Up 3 minutes                    0.0.0.0:81->80/tcp   web2
    03fcdd23c2ad        nginx:latest        "nginx -g 'daemon of…"   About an hour ago   Exited (0) About a minute ago                        web1

    容器web1已经停止,容器web2还在运行

     
    使用docker kill来关闭容器
    docker kill web2
    [root@inode3 ~]# docker kill web2
    web2
    [root@inode3 ~]# docker ps 
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@inode3 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
    71dd5dd51ae4        nginx:latest        "nginx -g 'daemon of…"   5 minutes ago       Exited (137) 8 seconds ago                       web2
    03fcdd23c2ad        nginx:latest        "nginx -g 'daemon of…"   About an hour ago   Exited (0) 3 minutes ago                         web1

    容器web2已经停止运行

    四、重启关闭的容器

    命令格式:

    docker start [option] 容器名称或容器的CONTAINER ID
    option
       -a 在当前终端启动
       -i 交互式
    
    使用容器名称来启动web1
    [root@inode3 ~]# docker start web1
    web1
    [root@inode3 ~]# docker ps 
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    03fcdd23c2ad        nginx:latest        "nginx -g 'daemon of…"   About an hour ago   Up 3 seconds        0.0.0.0:80->80/tcp   web1
    使用容器的容器的CONTAINER ID来启动web2
    [root@inode3 ~]# docker start 71dd5dd51ae4
    71dd5dd51ae4
    [root@inode3 ~]# docker ps 
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    71dd5dd51ae4        nginx:latest        "nginx -g 'daemon of…"   9 minutes ago       Up 2 seconds        0.0.0.0:81->80/tcp   web2
    03fcdd23c2ad        nginx:latest        "nginx -g 'daemon of…"   About an hour ago   Up About a minute   0.0.0.0:80->80/tcp   web1

    容器web1和web2已经重新启动

    五、查看容器的信息

    docker inspect 容器名称或容器的CONTAINER ID
    查看web1的ip信息
    [root@inode3 ~]# docker inspect web1|grep -i "ipaddr"
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",
    [root@inode3 ~]# docker inspect web1
    可以查看容器web1的所有信息

    六、删除容器

    删除容器的步骤:

    命令格式: docker rm 容器名称或容器的CONTAINER ID

    1、停止容器

    2、删除容器

    删除容器web1
    [root@inode3 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    71dd5dd51ae4        nginx:latest        "nginx -g 'daemon of…"   15 minutes ago      Up 6 minutes        0.0.0.0:81->80/tcp   web2
    03fcdd23c2ad        nginx:latest        "nginx -g 'daemon of…"   About an hour ago   Up 7 minutes        0.0.0.0:80->80/tcp   web1
    第一步:先停止web1容器
    [root@inode3 ~]# docker stop web1
    web1
    [root@inode3 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                NAMES
    71dd5dd51ae4        nginx:latest        "nginx -g 'daemon of…"   16 minutes ago      Up 7 minutes               0.0.0.0:81->80/tcp   web2
    03fcdd23c2ad        nginx:latest        "nginx -g 'daemon of…"   About an hour ago   Exited (0) 5 seconds ago                        web1
    第二部:删除已停止运行的web1容器
    [root@inode3 ~]# docker rm web1
    web1
    [root@inode3 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    71dd5dd51ae4        nginx:latest        "nginx -g 'daemon of…"   18 minutes ago      Up 8 minutes        0.0.0.0:81->80/tcp   web2
    
    强制删除运行中的容器web2
    [root@inode3 ~]# docker rm -f web2
    web2
    [root@inode3 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    
    强制删除所有容器(包含运行和没有运行的容器)
    环境说明:容器web1停止运行,web2运行正常
    [root@inode3 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                     PORTS                NAMES
    615daf3e3c9d        nginx:latest        "nginx -g 'daemon of…"   12 seconds ago       Exited (0) 3 seconds ago                        web1
    4dbf642e55c0        nginx:latest        "nginx -g 'daemon of…"   About a minute ago   Up About a minute          0.0.0.0:81->80/tcp   web2
    
    强制删除所有容器web1和web2
    [root@inode3 ~]# docker rm -f `docker ps -a -q`
    615daf3e3c9d
    4dbf642e55c0
    [root@inode3 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

    七、对运行的容器执行指定命令exec

    命令格式:

    docker exec [options] 容器名称或容器的CONTAINER ID Command [Ages]

    options

      -d:在后台运行

      -e:设置环境变量

      -i:交互式

      -t:打开一个终端

      -u:用户名或UID

    例子:

    [root@inode3 ~]# docker run --name web1 -d -p 80:80 nginx:latest
    7c5d1590be345fffab80385e76ff04a8f5d565962e03e6753ebef5112ad34087
    [root@inode3 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    7c5d1590be34        nginx:latest        "nginx -g 'daemon of…"   21 seconds ago      Up 20 seconds       0.0.0.0:80->80/tcp   web1
    
    1、交互式进入容器
       [root@inode3 ~]# docker exec -it web1 /bin/bash
       root@7c5d1590be34:/# ls
       bin  boot  dev    etc  home  lib    lib64  media  mnt  opt    proc  root  run  sbin  srv  sys  tmp  usr  var
    
    2、查看/目录信息
       [root@inode3 ~]# docker exec web1 ls -l
       total 8
       drwxr-xr-x   2 root root 4096 Feb 24 00:00 bin
       drwxr-xr-x   2 root root    6 Feb  1 17:09 boot
       drwxr-xr-x   5 root root  340 Mar  5 15:36 dev
       drwxr-xr-x   1 root root   66 Mar  5 15:36 etc
       drwxr-xr-x   2 root root    6 Feb  1 17:09 home
       drwxr-xr-x   1 root root   56 Feb 26 20:02 lib
       drwxr-xr-x   2 root root   34 Feb 24 00:00 lib64
       drwxr-xr-x   2 root root    6 Feb 24 00:00 media
       drwxr-xr-x   2 root root    6 Feb 24 00:00 mnt
       drwxr-xr-x   2 root root    6 Feb 24 00:00 opt
       dr-xr-xr-x 111 root root    0 Mar  5 15:36 proc
       drwx------   1 root root   27 Mar  5 15:39 root
       drwxr-xr-x   1 root root   23 Mar  5 15:36 run
       drwxr-xr-x   2 root root 4096 Feb 24 00:00 sbin
       drwxr-xr-x   2 root root    6 Feb 24 00:00 srv
       dr-xr-xr-x  13 root root    0 Mar  5 15:36 sys
       drwxrwxrwt   1 root root    6 Feb 26 20:02 tmp
       drwxr-xr-x   1 root root   66 Feb 24 00:00 usr
       drwxr-xr-x   1 root root   19 Feb 24 00:00 var

    八、查询容器内部日志

    命令格式:

    docker logs 容器名称或容器的CONTAINER ID

    查询容器web1中日志信息

    直接访问容器的logs
    [root@inode3 ~]# docker logs web1
    没有任何日志的
    
    先访问下容器web1
    [root@inode3 ~]# curl 192.168.32.103
    再查询容器的logs
    [root@inode3 ~]# docker logs web1
     192.168.32.103 - - [05/Mar/2020:15:42:41 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"

    查询容器的内部日志,需要先访问该容器的功能,再查询该容器的日志

    九、docker重启时,容器自动运行

    在运行docker容器时可以加如下参数来保证每次docker服务重启后容器也自动重启:
    
    --restart=always
    –restart具体参数值详细信息:
           no –  容器退出时,不重启容器;
           on-failure – 只有在非0状态退出时才从新启动容器;
           always – 无论退出状态是如何,都重启容器;

    如果已经启动了则可以使用如下命令:

    docker update --restart=always <CONTAINER ID>

    十、把容器中的文件拷到宿主机或宿主机的文件拷到容器中

    从容器中拷贝文件到宿主机
    docker cp 容器id:文件路径  宿主机文件路径
    
    从宿主机拷贝文件到容器
    docker cp  宿主机文件路径  容器id:文件路径

    十一、docker容器的操作命令图及总结

    docker的本质是:在隔离的环境运行的一个进程,所以docker容器内的第一个进程必须一直处于前台运行的状态(必须夯住),否则这个容器,就会处于退出状态!

     

  • 相关阅读:
    Math类的用法
    c#中和java中可变参数对比
    c#中泛型集合directory和java中map集合对比
    C#调用短信接口(通过简单的工厂模式整合多个短信平台)
    C#用网易邮箱发送邮件(同步异步)
    新浪云-PHP实现上传原图,缩略图
    PHP 继承,组合,单模式,GUID,等混合实例
    ASP.Net MVC @Html类
    ASP.net MVC 无法初始化 ASP.NET Simple Membership 数据库
    PHP 单列模式实例讲解以及参考网址
  • 原文地址:https://www.cnblogs.com/yaokaka/p/14178205.html
Copyright © 2020-2023  润新知