美文网首页
3.容器的相关操作2020-11-02

3.容器的相关操作2020-11-02

作者: 青山有扶苏 | 来源:发表于2020-11-03 01:14 被阅读0次

    容器生命周期

    1.根据镜像创建一个容器

    ➜  ~ docker create -it --name=busybox busybox
    

    使用docker create命令创建的容器处于停止状态,可以使用docker start命令来启动它。

    ➜  ~ docker start busybox
    busybox
    ➜  ~ docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
    6e20db9d7728        busybox             "sh"                About a minute ago   Up 3 seconds                            busybox
    

    也可是使用docker run创建容器时并启动,这就相当于 docker create之后再执行了一次 docker start

    例如上面的例子,可以在来一遍,使用docker run

    ➜  ~ docker run -it --name=busybox busybox
    / #
    

    这里加入了 -it参数

    -i:让容器的标准输入保持打开

    -t:分配一个伪终端并绑定到容器的标准输入上

    ➜  ~ docker run -it --name=busybox busybox
    / # ls
    bin   dev   etc   home  proc  root  sys   tmp   usr   var
    / # pwd
    /
    / # ps aux
    PID   USER     TIME  COMMAND
        1 root      0:00 sh
        7 root      0:00 ps aux
    / #
    

    可以看到,在这个终端中,也是可以run常用的一些命令的

    查看进行发现,pid为1的进程是sh,因此,当我们使用exit退出sh时,容器也会退出。

    2.停止一个正在运行的容器

    ➜  ~ docker stop busybox
    busybox
    

    命令格式为

    docker stop [-t|--time[=10]]
    

    使用docker ps -a可以查看当前设备存在的容器,但是未在运行的

    ➜  ~ docker ps -a
    #或者
    ➜  ~ docker ps --all
    

    重启一个容器

    ➜  ~ docker restart busybox
    busybox
    ➜  ~ docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    8bfe90b24ed9        busybox             "sh"                6 minutes ago       Up 4 seconds                            busybox
    

    3.进入一个正在运行时的容器

    ➜  ~ docker attach busybox
    / #
    

    attach命令同时在多个终端运行时,所有终端窗口将同步显示相同内容,当某个命令行窗口的命令阻塞时,其他命令窗口同样无法操作。

    exec命令明显要比attach更为灵活

    ➜  ~ docker exec -it busybox bin/sh
    

    这里可以简写为

    ➜  ~ docker exec -it busybox sh
    

    4.删除容器

    删除docker容器使用 rm命令,这里以nginx容器为例,先创建启动一个NGINX容器

    ➜  ~ docker run -it --name=nginx nginx
    Unable to find image 'nginx:latest' locally
    latest: Pulling from library/nginx
    bb79b6b2107f: Pull complete
    111447d5894d: Pull complete
    a95689b8e6cb: Pull complete
    1a0022e444c2: Pull complete
    32b7488a3833: Pull complete
    

    查看容器运行状态

    ➜  ~ docker ps | grep nginx
    653c57e5d714        nginx               "/docker-entrypoint.…"   3 minutes ago       Up About a minute   80/tcp              nginx
    

    执行删除容器

    ➜  ~ docker rm nginx
    Error response from daemon: You cannot remove a running container 653c57e5d7141591e2d4c1f4edb0497bdd05bcf729fe977ef7ea0435b3e36c70. Stop the container before attempting removal or force remove
    

    这里提示了一个错误,不能删除一个正在运行的容器,这个其实也是docker的一个防误操作设计,试想一下,如果你不小心删掉了一个大家正在用的容器,那得多糟糕啊,因此,我们需要先将这个容器停止

    ➜  ~ docker stop nginx
    nginx
    ➜  ~ docker rm nginx
    nginx
    
    image-20201102074036804.png

    再次查看,这里已经没有nginx这个容器了,当然,docker也提供了强制删除正在运行时容器的命令。

    ➜  ~ docker rm -f nginx
    

    -f: 会发送SIGKILL信号强制终止正在运行时的容器,不过这个要慎用。否则容易造就血泪史

    5导出容器

    使用export将容器导出并创建一个文件,以方便后续再服务器之间迁移容器

    ➜  ~ docker exec -it nginx sh
    # cd home && touch test
    # ls home
    test
    #
    

    为了查看迁移之后的效果,这里先进入nginx这个容器,然后在home目录下创建 test文件,接着将这个容器导出为nginx.tar文件

    ➜  ~ ls
    dev  docker-帮助文档.md  logs  nacos  nginx.tar  nohup.out  README.MD  rootfs  store
    

    可以看到已经将nginx容器导出到nginx.tar文件了。

    导出之后,假设我们需要把这个容器迁移到其他设备,这里模拟一下,我先把当前设备的nginx容器删除

    ➜  ~ docker stop nginx
    nginx
    ➜  ~ docker rm nginx
    nginx
    
    image-20201102074904021.png

    这里已经没有nginx了,接下来使用导入,将导出的nginx.tar导入

    6.导入容器

    导入容器的命令为import执行之后,会变为本地镜像,执行docker run启动该镜像,就实现容器迁移了

    ➜  ~ docker import nginx.tar nginx:v7
    sha256:0ef5841d743c3e41b45a05556c569655e353d6fbfef7c6a4ba36be8b36d8acd7
    

    查看本地镜像列表

    ➜  ~ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               v7                  0ef5841d743c        21 seconds ago      131MB
    

    然后启动该镜像

    ➜  ~ docker run -it nginx:v7 sh
    # ls home
    test
    

    启动之后,镜像变成了一个容器,并且,在导出时home下创建的test文件也仍然存在,表示此时的导入导出已经成功了。

    总结:当一个镜像启动之后就变成了容器,这篇内容包含容器的启动,进入容器,停止容器运行,删除,以及导入导出。

    其实就是阐述了容器的生命周期过程,从 create|run 创建一个容器,并通过 start(run创建的已经启动了不用再单独start)可以将容器转化为运行状态,通过stop命令将容器转化为停止状态,当不需要这个容器时可以通过rm删除容器,,也可以带上-f参数进行强制删除。

    另外pause和unpause 暂停和恢复这两个暂时还没用到。后续有机会用到在展开阐述。

    至此,容器的简单操作就完成了,祝大家变得更强~!

    相关文章

      网友评论

          本文标题:3.容器的相关操作2020-11-02

          本文链接:https://www.haomeiwen.com/subject/daypvktx.html