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

    创建并启动容器

    命令格式

    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    

    OPTIONS

    锚点

    --name="容器新名字":为容器指定一个名称;
    
    -i:以交互模式运行容器,通常与-t或者-d同时使用;
    
    -t:为容器重新分配一个伪输入终端,通常与-i同时使用;
    
    -d: 后台运行容器,并返回容器ID;
    
    -P: 随机端口映射,容器内部端口随机映射到主机的端口
    
    -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
    
    -v: 挂载宿主机的一个目录, 格式为:本机文件目录:容器中的文件目录
    

    启动普通容器

    docker run --name 别名 镜像ID  
    

    启动交互式容器

    #运行一个容器,取别名,交互模式运行,以及分配一个伪终端
    docker run -it --name 别名 镜像ID
    

    启动容器并执行/bin/bash命令

    直接操作容器,执行完 回到 宿主主机终端

     docker run -it --name 别名 镜像ID /bin/bash命令
    

    守护式方式创建并启动容器

    也就是后台启动

    docker run -di --name 别名 镜像ID 
    

    例:启动交互式容器centos7

    docker run -it --name mycentos01 8652b9f0cb4c
    

    image-20210105112347087

    例:守护式方式创建并启动容器centos7

    docker run -di --name mycentos3 8652b9f0cb4c
    

    image-20210105134819521

    例:启动容器并执行/bin/bash命令

    docker run -it --name mycentos4 8652b9f0cb4c ls -al
    

    如图,进入容器就执行命令

    image-20210105135739074

    列出容器

    命令格式

    docker ps [OPTIONS]
    

    OPTIONS

    -a :显示所有的容器,包括未运行的。
    
    -f :根据条件过滤显示的内容。
    
    --format :指定返回值的模板文件。
    
    -l :显示最近创建的容器。
    
    -n :列出最近创建的n个容器。
    
    --no-trunc :不截断输出。
    
    -q :静默模式,只显示容器编号。
    
    -s :显示总的文件大小。
    

    常用查询

    docker ps 查看正在运行的容器
    
    docker ps -a 查看所有容器
    
    docker ps -n 2  显示最近创建的2个容器
    
    docker ps -f status=exited 查看停止的容器
    

    image-20210105114008901

    退出容器

    容器停止退出

    #输入字符
    exit
    

    image-20210105114246371

    再查看没有容器正在运行

    image-20210105114330436

    容器不停止退出

    #按键盘
    ctrl+P+Q
    

    image-20210105114646059

    再查看还是在运行

    image-20210105114740019

    进入容器

    docker attach 容器ID or 容器名
    

    例:

    docker attach d5446fab8b23
    

    image-20210105115102482

    启动容器

    docker start 容器ID or 容器名
    

    例:

    docker start d5446fab8b23
    

    image-20210105115214495

    重启容器

    docker restart 容器ID or 容器名
    

    例:

    docker restart d5446fab8b23
    

    image-20210105115401063

    重启的时间可能会久一点

    删除容器

    删除单个容器

    docker rm 容器ID 
    

    删除多个容器

    #中间空格隔开
    docker rm -f 容器ID1 容器ID2 
    

    删除所有容器

    docker rm -f $(docker ps -qa)
    

    强制删除容器

    如果删除正在运行的容器,会报错,我们假如需要删除的话,需要强制删除

    即加上-f参数

    例:

    docker rm d5446fab8b23
    

    image-20210105115837671

    进入正在运行的容器执行命令

    docker exec -it 容器名称 或者 容器ID 执行命令
    

    直接操作容器,执行完 回到 宿主主机终端

    我们一般用于 启动容器里的应用 比如 tomcat nginx redis

    例:

     docker exec -it 638d16c99863 ls -a
     docker exec -it 638d16c99863 /bin/bash    
    

    注意容器一定要是已经启动了的,否则会报错

    image-20210105140729976

    查看容器日志

    命令格式

    docker logs [OPTIONS] CONTAINER
    

    OPTIONS

    --details        显示更多的信息
    
    -f, --follow     跟踪实时日志
    
    --since string   显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
    
    --tail string    从日志末尾显示多少行日志, 默认是all
    
    -t, --timestamps 显示时间戳
    
    --until string   显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
    

    上面这种方式不推荐,推荐直接去相应的目录看即可

    进入目录查看的方式

    日志目录:/var/lib/docker/containers/

    image-20210105143320927

    每个容器对应一堆文件,然后有个log结尾的,就是日志文件

    image-20210105143437895

    查看容器进程

    docker top 容器ID
    

    例:

    docker top 638d16c99863
    

    image-20210105143923051

    宿主机和容器之间文件拷贝

    宿主机拷贝到容器内

    docker cp 需要拷贝的文件或者目录 容器名称:容器目录
    

    例:

    #将宿主机 /home/makalo/test.png 复制到容器d68122a6e441中的/tmp目录下
    docker cp /home/makalo/test.png d68122a6e441:/tmp/
    
    #将宿主机 /home/makalo/test.png 复制到容器d68122a6e441中的/tmp目录下并改为test_change_name.png
    docker cp /home/makalo/test.png d68122a6e441:/tmp/test_change_name.png
    
    #将宿主机的 /home/makalo/test_cp 文件夹复制到容器d68122a6e441中的/tmp目录下
    docker cp /home/makalo/test_cp d68122a6e441:/tmp/
    

    image-20210105150641505

    容器拷贝到宿主机

    docker cp 容器名称:容器目录 宿主机目录
    

    例:

    #将容器d68122a6e441的/tmp/test.png 文件 拷贝到宿主机的/home/makalo/cp_data/目录下
    docker cp d68122a6e441:/tmp/test.png /home/makalo/cp_data/
    
    #将容器d68122a6e441的/tmp/test.png 文件 拷贝到宿主机的/home/makalo/cp_data/目录下并改名test2.png
    docker cp d68122a6e441:/tmp/test.png /home/makalo/cp_data/test2.png
    
    #将容器d68122a6e441的/tmp/test_cp文件夹 拷贝到宿主机的/home/makalo/cp_data/目录下
    docker cp d68122a6e441:/tmp/test_cp /home/makalo/cp_data/
    

    image-20210105151311340

    容器宿主机端口映射

    当容器中运行一些网络应用,要让外部访问这些应用时,可以通过 -P 或 -p 参数两种方式来指定端口映射。关于 -P 或 -p可以查看

    命令格式

    #指定端口映射
    docker run -it -p 主机(宿主)端口:容器端口 镜像名称或镜像id
    ##随机端口映射
    docker run -it -P 镜像名称或镜像id
    

    例:启动apache容器映射

    没有镜像就先pull

    docker run -it -d -p 80:80  --name apache httpd
    

    浏览器访问

    image-20210105165530872

    提交运行时容器成为镜像

    命令格式

    docker commit -a='作者' -m='备注' 运行时容器ID 新镜像名称
    

    例:将运行时的apache提交为镜像

    docker commit -a='makalo/apache' -m='test' 9278fe7375c0 makalo/apache:1.0
    

    具体步骤

    先启动并进入容器的内

    docker run -it -p 80:80  --name apache httpd /bin/bash
    

    image-20210105171100870

    可以看到容器内有一些目录 而index.html 就在 htdocs 目录中

    这时候浏览器访问

    image-20210105172855296

    一切正常

    编辑index.hmlt

    echo '<html><body><h1>the change!</h1></body></html>' > htdocs/index.html
    

    image-20210105174541499

    提交为镜像

    docker commit -a='makalo/apache' -m='test' 9278fe7375c0 makalo/apache:1.0
    

    image-20210105164252408

    使用该镜像启动容器

     docker run -it -p 8888:80  --name myApache 572b7a1b7628 /bin/bash
    

    查看index.html文件

    image-20210105174834406

    可以看到该文件内容是被修改后的

    查看容器元信息

    docker inspect 容器ID
    

    例:

    docker inspect c90f247595e8
    

    image-20210105185350031

    容器目录挂载

    参考:https://www.cnblogs.com/makalochen/p/14241052.html

  • 相关阅读:
    分析java程序的命令总结jps,jstack
    Tomcat配置详解及tomcat的连接数与线程池
    Go入门练习题
    WebSocket的原理,及如何测试websocket是否连接成功
    day3-每天进步一点基础知识-正则练习题
    day2-每天进步一点基础知识
    day1-每天进步一点
    数组有没有length()这个方法? String有没有length()这个方法?
    List, Set, Map是否继承自Collection接口?
    启动一个线程是用run()还是start()?
  • 原文地址:https://www.cnblogs.com/makalochen/p/14237490.html
Copyright © 2011-2022 走看看