美文网首页程序员
docker 容器的基本管理

docker 容器的基本管理

作者: 相信奇迹德人 | 来源:发表于2020-11-29 15:24 被阅读0次

    1 容器的管理

    1.1 容器的创建

    #docker [OPTIONS] COMMAND
    docker creat -it centos:latest
    #docker creat 命令新建的容器是处于停止状态 后期使用docker start启动
    
    # 实际应用中一般是使用docker run
    

    1.1 新建并启动容器

    1.1.1 容器的生命周期

    容器其实本质是Host宿主机的进程,操作系统对于进程的管理是基于进程的状态切换的,进程从创建到销毁可能经过的路径图可以称之为“生命周期”。因此也就不难想到,其实对容器的管理也应该有一套状态以及状态转移的条件,这就是Docker容器的生命周期

    可以将镜像与容器的关系理解为类和对象/实例的关系。镜像保存在硬盘上,而运行着的容器是一个隔离的进程。

    image-20201126195532861.png

    1.1.2 docker run 创建和启动容器的过程

    1. 检查本地是否存在指定的镜像,不存在就从公有仓库或者自己配置的私有镜像仓库下载
    2. 利用镜像创建一个容器,并在只读的镜像层外面挂载一层可读写层
    3. 从宿主机配置的网桥接口中桥接一个虚拟接口到容器中
    4. 从网桥的地址池中配置一个IP地址给容器
    5. 执行用户指定的应用程序
    6. 执行完毕后容器被自动终止

    Docker 容器启动时,默认会把容器内部第一个进程,也就是pid=1的程序,作为docker容器是否正在运行的依据,如果 docker 容器pid=1的进程挂了,那么docker容器便会直接退出

    对于容器而言,其启动程序就是容器应用进程,容器就是为了主进程而存在的,主进程退出,容器就失去了存在的意义,从而退出,其它辅助进程不是它需要关心的东西。

    我们以centos 镜像为例启动第一个容器

    docekr run --name testdocker1 centos
    

    查看启动的第testdocker1容器的状态

    docker ps -a
    
    image-20201128140017399.png

    为什么 testdocker1 一启动就退出了?

    dockerfile 在构建centos镜像时通过 CMD ["/bin/bash"] 指定了 通过此镜像启动容器默认运行的命令时是/bin/bash,所以以当容器启动执行/bin/bash,/bin/bash 应用程序一执行完成 退出,容器中没有一直执行的进程,也跟着退出了

    /bin/bash 程序配合 -i参数 可以使 /bin/bash 程序一直处于 运行中,以交互式方式一直运行,此时容器也是一直运行着 exit 或者ctrl+c 终止/bin/bash 容器也会退出

    docker run -it  --name "testdocker" centos /bin/bash
    #-i --interactive Keep STDIN open even if not attached
    #-i 交互式 一直保持标准输入打开
    #-t  --tty 新开一个控制台连接
    

    我们以nginx镜像为例再启动一个容器

    docker run --name nginxtest1  nginx 
    #就像Linux系统启动一个前台进程一样,容器里也运行了一个前台程序
    

    启动容器时 是执行的/docker-entrypoint.sh nginx -g 'daemon off;' nginx 默认是以后台模式运行的,后面加'daemon off;' 禁止nginx以后台模式运行,

    我们不加'daemon off;' 运行一个nginx容器,看一下是什么情况

    docker run --name nginxtest2 nginx /docker-entrypoint.sh nginx -g
    #/docker-entrypoint.sh nginx -g 会覆盖Dockerfile中 CMD自定义的默认执行的 /entrypoint.sh nginx -g 'daemon off;' 
    
    image-20201128203138980.png

    跟之前/bin/bash一样 nginx执行完成后,容器就退出了

    制作镜像的Dokcerfile 中 CMD或者ENTRYPOINT 指令 定义了容器启动时容器执行的命令,即启动容器中的第一个进程,上面因为ginx /docker-entrypoint.sh nginx -g

    CMD或者ENTRYPOINT 指令 不管是执行什么程序,一定要是一个工作在容器前台的守护进程,容器才可以启动后不会退出

    要清楚两个概念

    容器的前后台运行

    ​ docker run 通过镜像run起来的容器 可以比作是linux系统的一个运行起来的前台程序

    docekr run -d --name test nginx 
    

    加-d 参数 启动容器 容器会后台运行

    容器中的进程前后台运行

    容器中至少有一个工作在前台的守护进程

    1.1.3 启动一个交互式的容器

    docker run -it  --rm --name "testdocker" centos /bin/bash 
    #-i --interactive Keep STDIN open even if not attached 意思就是会把交互界面保留着 
    #-t  --tty 新开一个控制台连接
    #进入容器后exit 容器会退出
    #--rm 容器停止 容器也会被自动删除
    # 此方式 适用于测试,调试,一次性工具
    

    1.1.4 启动一个守护式守护容器启动

    docker run  -d  --rm --name "testdocker" centos /bin/bash 
    #-d detach 将应用程序剥离前台 进入后台运行 
    # 这里
    #此方式 适用于 应用服务
    

    1.2 容器的关闭,启动

    docker container stop testdocker
    docker container start testdocker
    #-i 启动交互式容器
    docker container start -i testdocker
    

    1.3 进入容器的方法

    1.3.1 attach

    docker container attach testdocker
    #使用attach 连接时 当多个窗口同时attach到同一个容器的时候,所有窗口都会同步显示,当某个窗口阻塞时候,其他窗口也无法执行操作了
    

    1.3.2 exec

    #exec 是通过子进程的方式
    docker container exec -it testdocker /bin/bash
    #这种进入容器的方式,是在运行的容器中启动了一个/bin/bash的进程
    

    1.4 删除容器

    #docker rm 只能删除已经处于终止或者退出状态的容器,不能删除还处于运行中的容器
    docker rm testdocker
    #-f 参数删除可以删除正在运行的容器, docker会先发送一个SIGKILL信号给容器,终止其中的应用,之后强行删除
    docker rm -f testdocker
    #删除所有容器(自己测试用生产环境切勿使用)
    docker rm -f `docker ps -qa`
    #-l 移除容器间的网络连接,而非容器本身
    #-v 删除与容器关联的卷
    

    1.5 容器的查看

    docker container ls -a
    docker ps -a
    #-a 是查看详细信息
    docker ps -qa #查看所有容器的id
    docker inspect dockertest #查看容器的 详细信息

    相关文章

      网友评论

        本文标题:docker 容器的基本管理

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