• Docker实践(二):容器的管理(创建、查看、启动、终止、删除)


    docker官方文档地址如下:[https://docs.docker.com/engine/reference/](https://docs.docker.com/engine/reference/)

    一、创建

    • docker create:创建容器,处于停止状态。
      这里写图片描述

      • centos:latest:centos容器:最新版本(也可以指定具体的版本号)。
      • 本地有就使用本地镜像,没有则从远程镜像库拉取。
      • 创建成功后会返回一个容器的ID。
    • docker run:创建并启动容器。

    交互型容器:运行在前台,容器中使用exit命令或者调用docker stop、docker kill命令,容器停止。

    如下图已经在前台开启一个docker容器:
    这里写图片描述

    • i:打开容器的标准输入。
    • t:告诉docker为容器建立一个命令行终端。
    • name:指定容器名称,可以不填(随机),建议根据具体使用功能命名,便于管理。
    • centos:告诉我们使用什么镜像来启动容器。
    • /bin/bash:告诉docker要在容器里面执行此命令。

    后台型容器:运行在后台,创建后与终端无关,只有调用docker stop、docker kill命令才能使容器停止。

    这里写图片描述

    • d:使用-d参数,使容器在后台运行。
    • c: 通过-c可以调整容器的CPU优先级。默认情况下,所有的容器拥有相同的CPU优先级和CPU调度周期,但你可以通过Docker来通知内核给予某个或某几个容器更多的CPU计算周期。比如,我们使用-c或者–cpu-shares =0启动了C0、C1、C2三个容器,使用-c/–cpu-shares=512启动了C3容器。这时,C0、C1、C2可以100%的使用CPU资源(1024),但C3只能使用50%的CPU资源(512)。如果这个主机的操作系统是时序调度类型的,每个CPU时间片是100微秒,那么C0、C1、C2将完全使用掉这100微秒,而C3只能使用50微秒。
    • -c后的命令是循环,从而保持容器的运行。
    • docker ps:可以查看正在运行的docker容器。
    • --privileged : 启动容器内的服务.
    docker run --privileged -p 8080:80 --name ms-drupal -itd ms-drupal:latest 

    二、查看

    • docker ps: 查看当前运行的容器
    • docker ps -a:查看所有容器,包括停止的。

    这里写图片描述

    • 标题含义:

      • CONTAINER ID:容器的唯一表示ID。
      • IMAGE:创建容器时使用的镜像。
      • COMMAND:容器最后运行的命令。
      • CREATED:创建容器的时间。
      • STATUS:容器状态。
      • PORTS:对外开放的端口。
      • NAMES:容器名。可以和容器ID一样唯一标识容器,同一台宿主机上不允许有同名容器存在,否则会冲突。
    • docker ps -l :查看最新创建的容器,只列出最后创建的。

    • docker ps -n=2:-n=x选项,会列出最后创建的x个容器。

    这里写图片描述

    三、启动

    通过docker start来启动之前已经停止的docker_run镜像。
    • 容器名:docker start docker_run,或者ID:docker start 43e3fef2266c
    • –restart(自动重启):默认情况下容器是不重启的,–restart标志会检查容器的退出码来决定容器是否重启容器。
      • docker run --restart=always --name docker_restart -d centos /bin/sh -c "while true;do echo hello world; sleep;done":
      • --restart=always:不管容器的返回码是什么,都会重启容器。
      • --restart=on-failure:5:当容器的返回值是非0时才会重启容器。5是可选的重启次数。
        这里写图片描述

    四、终止

    • docker stop [NAME]/[CONTAINER ID]:将容器退出。
    • docker kill [NAME]/[CONTAINER ID]:强制停止一个容器。

    这里写图片描述

    五、删除

    容器终止后,在需要的时候可以重新启动,确定不需要了,可以进行删除操作。
    • docker rm [NAME]/[CONTAINER ID]:不能够删除一个正在运行的容器,会报错。需要先停止容器。
      这里写图片描述

    • 一次性删除:docker本身没有提供一次性删除操作,但是可以使用如下命令实现:

      • docker rm 'docker ps -a -q':-a标志列出所有容器,-q标志只列出容器的ID,然后传递给rm命令,依次删除容器。

    、Docker中容器的备份、恢复和迁移

    1. 使用 docker commit 命令来创建快照
      # docker commit -p 30b8f18f20b4 container-backup

      Docker Commit

    2. 通过运行 docker images 命令来查看Docker镜像
      # docker images

      Docker Images

    3. 正如我们所看见的,上面做的快照已经作为Docker镜像保存了。现在,为了备份该快照,我们有两个选择,一个是我们可以登录进Docker注册中心,并推送该镜像;另一个是我们可以将Docker镜像打包成tar包备份,以供今后使用

    如果我们想要在Docker注册中心上传或备份镜像,我们只需要运行 docker login 命令来登录进Docker注册中心,然后推送所需的镜像即可。

    1. # docker login

      Docker Login

    1. # docker tag a25ddfec4d2a arunpyasi/container-backup:test
    2. # docker push arunpyasi/container-backup

      Docker Push

    如果我们不想备份到docker注册中心,而是想要将此镜像保存在本地机器中,以供日后使用,那么我们可以将其作为tar包备份。要完成该操作,我们需要运行以下 docker save 命令。

    1. # docker save -o ~/container-backup.tar container-backup

    taking tarball backup

    要验证tar包是否已经生成,我们只需要在保存tar包的目录中运行 ls 命令即可。

    2. 恢复容器

    接下来,在我们成功备份了我们的Docker容器后,我们现在来恢复这些制作了Docker镜像快照的容器。如果我们已经在注册中心推送了这些Docker镜像,那么我们仅仅需要把那个Docker镜像拖回并直接运行即可。

    1. # docker pull arunpyasi/container-backup:test

    Docker Pull

    但是,如果我们将这些Docker镜像作为tar包文件备份到了本地,那么我们只要使用 docker load 命令,后面加上tar包的备份路径,就可以加载该Docker镜像了。

    1. # docker load -i ~/container-backup.tar

    现在,为了确保这些Docker镜像已经加载成功,我们来运行 docker images 命令。

    1. # docker images

    在镜像被加载后,我们将用加载的镜像去运行Docker容器。

    1. # docker run -d -p 80:80 container-backup

    Restoring Docker Tarball

    、Docker中image的创建

    第一个方法:在运行的container中安装service然后导出为image

    整体思路:运行一个容器,在运行容器的基础上添加需要的服务,然后导出为新的images。

    [root@localhost ~]#docker run -it docker.io/centos     //根据image运行容器
    [root@845e8472f250 /]#                                 //运行容器的ID号
    [root@845e8472f250 /]# yum -y install *****            //安装一些服务
    [root@845e8472f250 /]# exit

    命令中 i 、t 的参数可以docker run –help查看

    现在的容器很明显已经被我们改动了,然后通过以下命令新建images:

    docker commit -m “Description” -a “users <users@163.com>” 845e8472f250 centos:v1

     

    -m:来指定提交的说明信息 
    -a:指定更新的作者和邮箱 
    命令中的一串数字是刚才运行container’s ID 
    数字后面的是新建镜像的repository:tag

    Complete

    第二个方法:基于dockerfile文件来创建新的image

    dockerfile文件中基本分为4部分:

     

    1.注释部分 
    2.基础镜像地址 
    3.维护者信息 
    4.命令部分

    mkdir -p /docker/httpd
    cd /docker/httpd
    
    vim  dockerfile                         //这里文件名必须为dockerfile
    #This is http service                   //注释部分,类似于文件说明
    FROM docker.io/centos:latest           //以哪个image作为基础
    MAINTAINER user <user@163.com>          //维护者的信息
    RUN yum -y install apr apr-utils        //在创建镜像中运行以下命令
    RUN yum -y install httpd

    根据dockerfile创建新images:

    docker build -t=centos:v2 /docker/httpd

    -t:添加镜像name:tag信息 
    后面的/docker/httpd路径为dockerfile的绝对路径,也可在/docker/httpd的当前路径下使用 “.”来代替绝对路径

    说明:dockerfile中的指令被一行一行的执行,每执行完一行命令都要创建一个新的容器。当所有命令都执行完,会返回一个镜像ID,中间步骤所产生的所有容器ID都会被清除。一个镜像不能超过127层

    Complete

    如: 

    cd  /opt/dockerfile
    vi Dockerfile 
    
    FROM ms-drupal:latest
    MAINTAINER by Qinghe
    #RUN /etc/init.d/httpd  -k start
    ADD run.sh /usr/local/sbin/run.sh
    RUN chmod 777 /usr/local/sbin/run.sh
    EXPOSE 80
    CMD ["/usr/local/sbin/run.sh"]
    cd /opt/dockerfile
    vi run.sh
    
    #!/bin/bash
    /etc/init.d/httpd -D FOREGROUND
    docker build -t=ms-drupal:latest  /opt/dockerfile
  • 相关阅读:
    [代码审计]eyoucms前台未授权任意文件上传
    第二届i春秋挖洞大赛的一些感想
    [代码审计]云ec电商系统代码审计
    [代码审计]covercms 后台getshell
    RPO漏洞学习
    [漏洞分析]phpyun系统重装安全隐患#影响从phpyun4.2部分,4.3到4.5全版本
    css块级元素居中
    Linux常用网站
    Linux常用命令
    C#编程网站
  • 原文地址:https://www.cnblogs.com/river2005/p/8283967.html
Copyright © 2020-2023  润新知