zoukankan      html  css  js  c++  java
  • docker容器操作

    容器简介

    容器(Container):容器是一种轻量级、可移植、并将应用程序进行的打包的技术,使应用程序可以在几乎任何地方以相同的方式运行
    
    Docker将镜像文件运行起来后,产生的对象就是容器。容器相当于是镜像运行起来的一个实例。
    
    容器具备一定的生命周期。
    
    另外,可以借助docker ps命令查看运行的容器,如同在linux上利用ps命令查看运行着的进程那样。
    

    容器与虚拟机

    容器和虚拟机一样,都会对物理硬件资源进行共享使用。
    
    容器和虚拟机的生命周期比较相似(创建、运行、暂停、关闭等等)。
    
    容器中或虚拟机中都可以安装各种应用,如redis、mysql、nginx等。也就是说,在容器中的操作,如同在一个虚拟机(操作系统)中操作一样。
    
    同虚拟机一样,容器创建后,会存储在宿主机上:linux上位于/var/lib/docker/containers下
    
    注意:容器并不是虚拟机,但它们有很多相似的地方
    
    虚拟机的创建、启动和关闭都是基于一个完整的操作系统。一个虚拟机就是一个完整的操作系统。而容器直接运行在宿主机的内核上,其本质上以一系列进程的结合。
    
    容器是轻量级的,虚拟机是重量级的。首先容器不需要额外的资源来管理(不需要Hypervisor、Guest OS),虚拟机额外更多的性能消耗;其次创建、启动或关闭容器,如同创建、启动或者关闭进程那么轻松,而创建、启动、关闭一个操作系统就没那么方便了。
    
    也因此,意味着在给定的硬件上能运行更多数量的容器,甚至可以直接把Docker运行在虚拟机上。
    

    容器生命周期

    虚拟机的生命周期

    ![](https://raw.githubusercontent.com/cwyfengyiyuan/images/master/1598081813_20200822153519925_11921.png =1200x)

    容器的生命周期

    ![](https://raw.githubusercontent.com/cwyfengyiyuan/images/master/1598081824_20200822153625566_32421.png =1200x)

    容器生命周期管理

    列出容器 – docker ps

    # 作用:
        列出容器信息
    # 命令格式:
        docker ps [OPTIONS]
    # 命令参数(OPTIONS):
        -a          显示所有的容器,包括未运行的。
        -f          根据条件过滤显示的内容。
        --format    指定返回值的模板文件。
        -l          显示最近创建的容器。
        -n          列出最近创建的n个容器。
        --no-trunc  不截断输出。
        -q          静默模式,只显示容器编号。
        -s          显示总的文件大小。
    
    # 命令演示:
    docker ps #列出所有在运行的容器信息
    docker ps -a #查看所有的容器,包括未运行的
    docker ps -a -q #列出所有创建的容器ID
    docker ps -n 5 #列出最近创建的5个容器信息
    
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    容器ID 镜像名称 容器启动以后的第一个命令 容器创建时间 容器运行状态 端口映射 容器名称

    状态有7种:

    • created(已创建)
    • restarting(重启中)
    • running(运行中)
    • removing(迁移中)
    • paused(暂停)
    • exited(停止)
    • dead(死亡)

    列出容器 – docker container ls

    sudo docker container ls                 # 所有正在启动运行的容器列表
    
    sudo docker container ls --all           # 所有容器[不管是否在启动运行中]
    

    容器创建 – docker create

    # 作用:
    	利用镜像创建出一个Created 状态的待启动容器
    # 命令格式:
    	docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
    # 命令参数(OPTIONS):
    	-t, --tty           	分配一个伪TTY,也就是分配虚拟终端
        -i, --interactive    	即使没有连接,也要保持STDIN打开
        --name          		为容器起名,如果没有指定将会随机产生一个名称
    # 命令参数(COMMANDARG):
    	COMMAND 表示容器启动后,需要在容器中执行的命令,如ps、ls 等命令
    	ARG 表示执行 COMMAND 时需要提供的一些参数,如ps 命令的 aux、ls命令的-a等等
    	
    # 命令演示:
    docker create --name test-container centos ps -A
    docker create -ti --name test-container2 centos /bin/bash
    
    docker ps -a  # 查看所有的容器,包括未运行的
    

    容器启动 – docker start

    # 作用:
    	将一个或多个处于创建状态或关闭状态的容器启动起来
    # 命令格式:
    	docker start [OPTIONS] CONTAINER [CONTAINER...]
    # 命令参数(OPTIONS):
    	-a, --attach		将当前shell的 STDOUT/STDERR 连接到容器上
    	-i, --interactive		将当前shell的 STDIN连接到容器上
    	
    # 命令演示:
    docker container start <容器名称/容器ID>
    docker ps -a  
    docker start -a 65ebc
    docker start test-container2
    
    # 启动多个容器
    docker container start <容器名称/容器ID>  <容器名称/容器ID>
    

    容器创建并启动 – docker run

    # 作用:
    	利用镜像创建并启动一个容器
    # 命令格式:
    	docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    # 命令参数(OPTIONS):
    	-t, --tty           表示容器启动后会进入其命令行终端
        -i, --interactive   表示以“交互模式”运行容器,就是允许开发者通过输入设备输入命令到容器里面。
        --name          	为容器起名,名称必须唯一,如果没有指定将会随机产生一个名称
    	-d, --detach		创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t 两个参数,创建后就会自动进去容器)
    	-p                  指定端口映射,格式为:主机(宿主)端口:容器端口
    	--network=host      指定容器的网络连接类型,如果指定了--network=host就不要指定-p
    	--restart=always    docker在关闭以后,内部所有的容器都会关闭,在docker重启的时候,是否要自动重启容器
    	-v                  把docker外接的目录和指定容器内部的目录进行映射,共享文件,格式为:主机(宿主)路经:容器路径
    	--rm			    当容器退出运行后,自动删除容器
    	-e                  变量名="变量值" 设置环境变量
    	
    # 命令参数(COMMANDARG):
    	COMMAND 表示容器启动后,需要在容器中执行的命令,如ps、ls 等命令
    	ARG 表示执行 COMMAND 时需要提供的一些参数,如ps 命令的 aux、ls命令的-a等等
    	
    # 命令演示:
    docker run <参数选项> <镜像名称:版本号> <启动以后执行的第一条命令>
    docker run hello-world
    docker run centos ps -A
    docker run -d centos ps -A
    docker run --rm -d centos ps -A
    docker run -d centos ps -A
    
    docker run -itd --name=ubuntu2 ubuntu<:版本> ubuntu  #创建一个名为ubuntu2,并且在后台运行的容器
    docker run -itd --name=mysql -p3308:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
    

    docker run 与 docker create + docker start

    docker run 相当于 docker create + docker start –a       前台模式
    docker run -d 相当于 docker create + docker start       后台模式
    

    容器暂停 – docker pause

    # 作用:
    	暂停一个或多个处于运行状态的容器
    # 命令格式:
    	docker pause CONTAINER [CONTAINER...]
    # 命令参数(OPTIONS):
    	无
    # 命令演示
    docker ps -a
    docker pause test-container2
    docker ps -a # 容器是Pause状态
    

    容器取消暂停 – docker unpause

    # 作用:
    	取消一个或多个处于暂停状态的容器,恢复运行
    # 命令格式:
    	docker unpause CONTAINER [CONTAINER...]
    # 命令参数(OPTIONS):
    	无	
    # 命令演示:
    docker unpause test-container2
    docker ps -a # 处于运行状态
    

    容器关闭 – docker stop

    # 作用:
    	关闭一个或多个处于暂停状态或者运行状态的容器
    # 命令格式:
    	docker stop [OPTIONS] CONTAINER [CONTAINER...]
    # 命令参数(OPTIONS):
    	-t, --time int   		关闭前,等待的时间,单位秒(默认 10s)	
    # 命令演示:
    docker stop -t 1 <容器名称/容器ID>
    

    容器终止 – docker kill

    # 作用:
    	强制并立即关闭一个或多个处于暂停状态或者运行状态的容器
    # 命令格式:
    	docker kill [OPTIONS] CONTAINER [CONTAINER...]
    # 命令参数(OPTIONS):
    	-s, --signal string   	指定发送给容器的关闭信号 (默认“KILL”信号)	
    # 命令演示:
    docker kill <容器名称/容器ID>
    

    docker stop和docker kill的区别

    # 一 前提知识点:
        1 Linux其中两种终止进程的信号是:SIGTERM和SIGKILL
        2 SIGKILL信号:无条件终止进程信号。
        进程接收到该信号会立即终止,不进行清理和暂存工作。
        该信号不能被忽略、处理和阻塞,它向系统管理员提供了可以杀死任何进程的方法。
        3  SIGTERM信号:程序终结信号,可以由kill命令产生。
        与SIGKILL不同的是,SIGTERM信号可以被阻塞和终止,以便程序在退出前可以保存工作或清理临时文件等。
    
    # 二 docker stop 会先发出SIGTERM信号给进程,告诉进程即将会被关闭。在-t指定的等待时间过了之后,将会立即发出SIGKILL信号,直接关闭容器。
    # 三 docker kill 直接发出SIGKILL信号关闭容器。但也可以通过-s参数修改发出的信号。
    
    # 四 因此会发现在docker stop的等过过程中,如果终止docker stop的执行,容器最终没有被关闭。而docker kill几乎是立刻发生,无法撤销。
    
    # 五 此外还有些异常原因也会导致容器被关闭,比如docker daemon重启、容器内部进程运行发生错误等等“异常原因”。
    

    容器重启 – docker restart

    # 作用:
    	重启一个或多个处于运行状态、暂停状态、关闭状态或者新建状态的容器
    	该命令相当于stop和start命令的结合
    # 命令格式:
    	docker restart [OPTIONS] CONTAINER [CONTAINER...]
    # 命令参数(OPTIONS):
    	 -t, --time int    重启前,等待的时间,单位秒(默认 10s) 
    				       实则是关闭前等待的时间
    

    容器删除 – docker container rm

    # 作用:
    	删除一个或多个容器
    # 命令格式:
    	docker container rm [OPTIONS] CONTAINER [CONTAINER...]
          或者 docker rm [OPTIONS] CONTAINER [CONTAINER...]
    # 命令参数(OPTIONS):
    	 -f, --force     		强行删除容器(会使用 SIGKILL信号) 
    	 -v, --volumes   		同时删除绑定在容器上的数据卷	
    # 命令演示
    docker container rm <容器名称/容器ID>
    

    复制文件

    因为容器都是最小化安装的软件/系统,所以在容器内部连编辑文件的vim都没有,所以这里我们需要在容器外编辑好文件以后再复制到容器内部。

    docker container cp <原地址>:<新地址>
    
    1. 从外界复制文件到指定容器中
    docker container cp <路径/文件名> <容器名称/容器ID>:<路径/文件名>
    
    2. 从容器内部复制文件到外界来
    docker container cp <容器名称/容器ID>:<路径/文件名> <路径/文件名>
    

    把容器保存成docker镜像

    docker commit <容器名称/容器ID>  <新镜像名>:<自定义版本号>
    

    容器信息查看

    容器详细信息 – docker container inspect

    # 作用:
    	查看本地一个或多个容器的详细信息
    # 命令格式:
    	docker container inspect [OPTIONS] CONTAINER [CONTAINER...]
          或者 docker inspect [OPTIONS] CONTAINER [CONTAINER...]
    # 命令参数(OPTIONS):	
    	-f, --format string	利用特定Go语言的format格式输出结果
    	-s, --size		显示总大小
    # 命令演示
    docker container inspect -f "{{json .State.Status}}" 容器id
    docker container inspect 容器id
    

    容器日志信息 – docker logs

    # 作用:
    	查看容器的日志信息
    # 命令格式:
    	docker logs [OPTIONS] CONTAINER
    # 命令参数(OPTIONS):	
    	    --details		显示日志的额外信息
    	-f, --follow         		动态跟踪显示日志信息
    	    --since string  	只显示某事时间节点之后的	
     	    --tail string    		显示倒数的行数(默认全部)
    	-t, --timestamps     	显示timestamps时间
    	    --until string   	只显示某事时间节点之前的
    # 注意:
    	容器日志中记录的是容器主进程的输出STDOUTSTDERR
    

    容器重命名 – docker rename

    # 作用:
    	修改容器的名称
    # 命令格式:
    	docker rename CONTAINER NEW_NAME
    # 命令参数(OPTIONS):	
    	无
    

    容器运行时操作

    容器连接 – docker attach

    # 作用:
    	将当前终端的STDIN、STDOUT、STDERR绑定到正在运行的容器的主进程上实现连接
    # 命令格式:
    	docker attach [OPTIONS] CONTAINER
    # 命令参数(OPTIONS):	
    	--no-stdin             	不绑定STDIN
    	
    # 命令演示
    docker attach 1e560fca3906 
    

    进入容器 – docker exec

    # 作用:
    	在容器中运行一个命令
    # 命令格式:
    	docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    # 命令参数(OPTIONS):	
    	-d, --detach            分离模式: 在后台运行
    	-i, --interactive		即使没连接容器,也将当前的STDIN绑定上
    	-t, --tty               分配一个虚拟终端
    	-w, --workdir string    指定在容器中的工作目录
    	-e, --env list          设置容器中运行时的环境变量
    	
    # 命令演示
    #进入容器
    docker container exec -it <容器名称/容器ID>  <第一个命令>
    

    其它

    容器与镜像的关系

    image-20200331002924612

    容器提交 – docker commit

    # 作用:
    	根据容器生成一个新的镜像
    # 命令格式:
    	docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    # 命令参数(OPTIONS):
    	-a, --author string    	作者
    	-c, --change list      	为创建的镜像加入Dockerfile命令
    	-m, --message string   	提交信息,类似git commit -m
    	-p, --pause            	提交时暂停容器 (default true)
    # 命令演示
    docker run --rm -dti centos bash
    docker exec -d 容器id号 yum -y install net-tools
    docker commit -m 'install net-tools' 容器id号 centos-net-tools:lastest
    docker images
    
    docker history centos-net-tools
    

    容器导出 – docker export

    # 作用:
    	将容器当前的文件系统导出成一个tar文件
    # 命令格式:
    	docker export [OPTIONS] CONTAINER
    # 命令参数(OPTIONS):
    	-o, --output string   		指定写入的文件,默认是STDOUT
    # 命令演示	
    docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2 #将id为a404c6c174a2的容器按日期保存为tar文件
    

    容器打包的导入 – docker import

    # 作用:
    	从一个tar文件中导入内容创建一个镜像
    # 命令格式:
    	docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
    # 命令参数(OPTIONS):
    	-c, --change list      	为创建的镜像加入Dockerfile命令
    	-m, --message string   	导入时,添加提交信息
    # 命令演示		
    docker import  my_ubuntu_v3.tar xxx/ubuntu:v4  #从镜像归档文件my_ubuntu_v3.tar创建镜像,xxx/ubuntu:v4
    

    总结

    ![](https://raw.githubusercontent.com/cwyfengyiyuan/images/master/1598085511_20200822160847299_9473.png =1200x)

  • 相关阅读:
    寒假练习集中贴
    7-49 打印学生选课清单 (25分)
    7-47 打印选课学生名单 (25分)
    进阶实验5-3.3 基于词频的文件相似度 (30分)-哈希
    进阶实验5-3.4 迷你搜索引擎 (35分)-哈希
    7-24 树种统计 (25分)-二叉排序树or快速排序
    7-25 朋友圈 (25分)-并查集
    进阶实验6-3.4 拯救007(升级版) (30分)-BFS
    基础实验6-2.3 拯救007 (25分)-DFS
    进阶实验4-3.5 哈夫曼编码 (30分)-最优二叉树
  • 原文地址:https://www.cnblogs.com/chenwenyin/p/13546213.html
Copyright © 2011-2022 走看看