ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

4.docker基本命令-容器类

2022-05-15 23:31:07  阅读:100  来源: 互联网

标签:bin 容器 centos 命令 hadoop108 docker root


Docker基本命令-容器类

容器是Docker的另一个核心概念,简单来说,容器是镜像的一个运行实例,所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态。
如果认为虚拟机是模拟运行的一整套操作系统(包括内核、应用运行环境和其他系统环境)和跑在上面的应用。那么Docker容器就是独立运行的一个(或一组)应用,以及它们必需的运行环境。
  1. 初体验容器
    基于centos镜像启动docker容器,打印"hello world"

    [rootehadoop108 ~]# docker run centos:7.5.1884 /bin/echo "hello world"
    
  2. 创建容器

    [root hadoop108 ~]# docker create -i -t centos:7.5.1884 /bin/bash
    [root hadoop108 ~]# docker create -i -t -h hadoop102 --name centos-hadoop102 -d centos:7.5.1804 /bin/bash
    
  3. 查看容器

    • 查看运行状态的容器
    [rootehadoop108 ~]# docker ps
    		CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    
    • 查看所有状态的容器
    [rootehadoop108 ~]# docker ps -a
     CONTAINER ID   IMAGE           COMMAND    CREATED   STATUS PORTS NAMES
     bf2f501bb6e2  centos:7.5.1804 "/bin/bash" 9s ago   Created  izardly_lumier
    
  4. 启动容器

    [rootehadoop108 ~]# docker start bf2f5e1bb6e2
    [rootehadoop1e8 ~]# docker ps
    
  5. 后台启动容器

    [rootehadoop108 ~]# docker run -d bf2f501bb6e2
    

    提示:参数-d表示后台启动

    [root@docker108 ~]# docker images
    	REPOSITORY TAG      IMAGE ID      CREATED      SIZE
    	mysql      5.7    cdefeb1e283d  8 days ago     449MB
    hello-world   latest  d1165f221234  4 weeks ago    13.3kB
       centos    7.5.1804 cf49811e3cdb  2 years ago    208MB
       
    [root@docker108 ~]# docker run -i -t -h hadoop102 --name hadoop102 -d centos:7.5.1804 /bin/bash
    199cc681fd50767c7a03a1538e3ed0554cfb1617 acbfe7e3e6046c5f03d07cc6
    [root@docker108 ~]# docker ps
    CONTAINER ID  IMAGE            COMMAND  CREATED  STATUS  PORTS  NAMES
    199cc681fd50 centos:7.5.1804 "/bin/bash" 3s ago   Up 2s      hadoop102
    [root@docker108 ~]# docker exec -i -t hadoop102 /bin/bash  #进入容器
    [root《hadoop162/]# read escape sequence
    

    -i 交互

    -t 终端或伪终端

    --name 给容器起名字

    -h 给容器里的主机起一个名字

    docker run centos:7.5.1804 /bin/echo. "hello world"  
    基于centos这个镜像去运行容器,如果本地仓库不存在这个镜像,会去远程仓库下载,然后执行输出helloworld
    

    退出容器:
    exit退出:当容器不是-d后台运行时,当使用exit会直接让容器从运行状态转为exited状态
    
    ctrl+p->ctrl+q ,即使不是-d后台运行,退出后容器依旧是运行状态
    注意:通过docker create -i -t方式创建的容器,默认会加上-d参数
    
  6. 一步完成新建和启动容器

    • 新建和启动容器一步完成,并且进入容器里面
    [root@hadoop108 ~]# docker run -i-t centos:7.5.1884 /bin/bash
    前面的操作是先创建容器,然后再启动容器,也可以使用run来直接新建并启动容器
    说明:
    	(1)检查本地是否存在指定的镜像,不存在就从公有仓库下载:
    	(2)利用镜像创建一个容器,并启动该容器:
    	(3)分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层
    
    
    • 启动后台容器
    [root@hadoop108 ~]# docker run -i -t -d centos:7.5.1804 /bin/bash
    [rootghadoop108 ]# docker run -i -t -h hadoop102 --name centos-hadoop182 -d
    centos:7.5.1804 /bin/bash
    
    说明:创建一个交互式的容器
    	-i:允许你对容器内的标准输入(STDIN进行交互)
        -t:在新容器内指定一个伪终端或终端。
    	-h:配置容器的主机名
    	--name:给容器起名字
    技巧:一个字母的,一个-,单词都是两个-
    
  7. 启动mysql容器
    启动容器时,给容器附名称,设置密码,映射端口

    [root@hadoop108 ~]# docker run -p 3306:3306 --name firstmysql -e MYSQL_ROOT_PASSWORD=000000 -d mysq1:5.7
    
    提示:参数-t打开伪终端,参数-i标准输入,退出伪终端【Ctrl】+【D】或者exit
    ctrl+p>ctrl+q退出容器,如果容器不是后台启动的,也不会死掉
    
  8. 停止容器

    [root@hadoop188 ~]# docker stop bf2f501bb6e2
    
  9. 重启容器

    [root@hadoop108 ~]# docker restart bf2f501bb6e2
    
  10. 进入容器

    [root@hadoop188 ~]# docker exec -i -t bf2f5e1bb6e2/bin/bash
    [rootebf2f5e1bb6e2 /]#
    
    注意:通过指定-it参数来保持标准输入打开,并且分配一个伪终端。可以看到会打开一个新的
    bash终端,在不影响容器内其他应用的前提下,用户可以与容器进行交互
    
  11. 退出容器

    [root@bf2f501bb6e2 /]# exit
    exit
    [root@hadoop188 ~]#
    
    说明:退出容器也可以ctrl+p->ctrl+q
    
  12. 删除容器

    1. 删除己经停止的容器

      [root@hadoop108 ~]# docker rm 1b29d1601792
      1b29d1681792
      
    2. 删除运行状态的容器

      [root@hadoop188 ~]# docker stop bf2f5e1bb6e2
      [root@hadoop108 ~]# docker rm bf2f501bb6e2
      
    3. 强制删除容器

      [root@hadoop108 ~]# docker rm -f bf2f5e1bb6e2
      
    4. 强制删除所有docker容器

      [root@hadoop108 ~]# docker rm -f `docker ps -a -q`
      [root@hadoop108 ~]# docker rm -f $(docker ps -a -q)
      [root@hadoop108 ~]# docker ps -aq | xargs docker rm -f
      
      
  13. 容器运行完自动删除

    [root@hadoop108 ~]# docker run --rm centos:7.5.1804 /bin/echo "helloworld"
    
  14. 获取所有容器的id

    [root@hadoop108 ~]# docker ps -a -q
    
  15. 杀死所有的docker容器

    [root@hadoop108 ~]# docker kill $(docker ps-a -q)
    [root@hadoop188 ~]# docker stop $(docker ps -a -q)
    
    说明:kill相当于拔电源线,stop相当于正常关机,kill速度更快
    
  16. 导入和导出容器

    某些时候,需要将容器从一个系统迁移到另外一个系统,此时可以使用D0kr的导入和导出功能,这也是Docker自身提供的一个重要特性
    为了测试容器是否导出和导入成功,我们在centos容器中创建一个新的文件
    
    1. 准备操作

      [root@hadoop1e8 ~]# docker create -it centos:7.5.1804 /bin/bash
      [root@hadoop1e8 ~]# docker ps -a
      
    2. 导出容器

      导出容器是指,导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态

      [root@hadoop108 ~]# docker export 36712e68abdc > export_centos1.tar
      [root@hadoop108 ~]# docker export -o export_centos2.tar 36712e68abdc
      [root@hadoop108 ~]# docker export 36712e68abdc > './export_centos3.tar'
      
      [root@hadoop108 ~]# docker export 36712e68abdc > "./export_centos5.tar"
      [root@hadoop108 ~]#docker export -o "./export_centos6.tar"36712e68abdc
      
    3. 导入容器

      [root@hadoop102 ~]#docker import export_centos1.tar export/centos:1.0.0
      [root@hadoop108 ~]#docker import export_centos1.tar --export/centos:1.0.8
      
    4. 使用新的镜像启动容器

      [root@hadoop108 ~]# docker images
      [root@hadoop108 ~]# docker run -it export/centos:1.0.0 /bin/bash
      

      注意:save和load一起使用,操作的镜像;export和import一起使用,操作的容器

  17. 查看容器详情

    [root@hadoop108 ~]# docker container inspect 1e7429044e63
    说明:会以json格式返回包括容器id、创建时间、路径、状态、镜像、配置等在内的各项信息
    
  18. 查看容器内进程

这个子命令类似于lunix系统中的top命令,会打印出容器内的进程信息,包括PID、
用户、时间、命令等

[root@hadoop108 ~]# docker top 1e7429044e63
说明:容器必须是启动状态下才能查看
  1. 查看容器统计信息
[root@hadoop108 ~]# docker stats --no-stream 1e7429044e63
说明:会显示CU、内存、存储、网络等使用情况的统计信息
  1. 容器和主机之间复制文件

    容器和主机之间进行文件复制的时候,要保证容器已经启动

    1. linux数据准备
    [root@hadoop108 ~]# vim a.txt
    I Love Docker
    
    1. 从主机复制到容器里面
    [root@hadoop108 ~]# docker cp a.txt 1e7429044e63:/opt
    
    1. 进入容器查看
    [root@hadoop108 ~]# docker exec -i-t 1e7429044e63 /bin/bash
    
    1. 容器数据修改
    [root@le7429044e63 opt]# vim a.txt
    I Love Docker
    I Love Linux
    
    1. 从容器复制数据到主机
    [root@hadoop108~]# docker cp 1e7429044e63:/opt/a.txt ./
    
    
  2. 不进入容器,执行命令

[root@hadoop108 ~]# docker exec 1e7429844e63 1s -1 /opt
[root@hadoop108 ~]# docker exec 1e7429044e63 cat /opt/a.txt
[root@hadoop108 ~]# docker exec 1e7429844e63 whoami
[root@hadoop108 ~]#docker exec 1e7429844e63 ps
[root@hadoop108 ~]# docker exec 1e7429044e63 ps aux
  1. 查看容器的访问日志
[root@hadoop108 ~]# docker logs 1e7429844e63
  1. 获取容器的PID
[root@hadoop108 ~]docker inspect -f "{.State.Pid))" 1e7429044e63.

  1. nsenter方式进入容器
[root@hadoop108 ~]# docker inspect -f "{.State.Pid)]" 1e7429044e63
13187
[root@hadoop108 ~]# nsenter --help
[root@hadoop108 ~]# nsenter -t 13187 -m -u -i -n -p

  1. 查看主机信息
    在容器中执行,可以看到宿主机信息,也证明了容器的隔离性是相比虚拟机和物理机来说略差的

    [root@1e7429044e63 /]# cat /proc/cpuinfo
    [root@1e7429044e63 /]# free -m
    [root@1e7429844e63 /]# Top
    
  2. 以脚本的方式进入容器
    docker_in脚本

    [root@hadoop108 ~]# touch docker_in.sh
    [root@hadoop108 ~]# chmod 755 docker_in.sh
    [root@hadoop108 ~]# vim docker_in.sh
    #!/bin/bash
    # Use nsenter to access docker
    docker_in(){
    	NAME_ID=$1
    	PID=$(docker inspect -f "{{ .State.Pid }}" $SNAME_ID)
    	nsenter -t $PID -m -u -i -n -p /bin/bash
    }
    
    docker_in $1
    
    
    [root@hadoop108 ~]# ./docker_in.sh mysql
    root@9894fb3a1733:/#
    
    说明:
    	-t -> --target
    	-m -> --mount
    	-u -> -uts
    

    执行sh脚本的几种方式

标签:bin,容器,centos,命令,hadoop108,docker,root
来源: https://www.cnblogs.com/netsos888/p/16275237.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有