Docker 笔记 -入门之常用命令

docker  

Docker 优势,为什么用docker

更轻量

基于容器的虚拟化,仅包含业务运行所需的runtime环境,CentOS/ubuntu基础镜像仅170M.宿主机可部署100-1000个容器

更高效

无需操作系统虚拟化开销 * 计算: 轻量,无额外开销 * 存储: 系统盘 数据盘Volueme * 网络: 宿主机网络,NS隔离

更敏捷、更灵活

  • 分层的存储和包管理,devops理念
  • 支持多种网络配置

常用命令

  • 查看本机镜像
docker images  
  • 本地新建并启动容器
docker run -it centos /bin/bash  

-i :以交互模式霆容器,通常与-t同时使用
-t: 为容器重新分配一个伪输入终端,通常与-i同时使用
--name="容器新名字": 为容器指定一个名称
-d: 后台运行容器,并返回容器Id,也即启动守护式容器
-P 随机端口映射
-p: 指定端口映射,有以下四种格式
ip:hostPort:containerPort
ip::containerProt
hostsPort:containerPort
containerPort

docker run -it --name=mycentos centos  

ctrl+P+Q: 离开容器不关闭
exit: 离开容器

  • 查看运行的容器
docker ps  
docker ps -n2  
docker ps -aq  

-a: 列出当前所有正在运行的容器+历史运行过的
-l: 显示最近创建的容器
-n: 显示最近n个创建的容器
-q: 静默模式,只显示容器编号
--notrunc 不截断输出

  • 启动/关闭/重启/删除已停止/强杀容器
docker start containerid or container name  
docker stop containerid or container name  
docker restart containerid or container name  
docker rm containerid or container name  
docker kill containerid or container name  
  • 删除多个容器
docker rm -f $(docker ps -aq)  
docker ps -a -q |xargs docker rm  
  • 启动守护式容器
docker run -d centos #前台无交互执行后即退出  
docker run -d centos /bin/sh -c "while true;do echo hello leoiceo;sleep 2;done"  
  • 查看容器日志
docker logs a4aaa44f86e8 -ft --tail 3  
2021-06-21T03:49:58.904260999Z hello leoiceo  
2021-06-21T03:50:00.908207322Z hello leoiceo  
2021-06-21T03:50:02.911170153Z hello leoiceo  
  • 查看容器内运行的进程
docker top a4aaa44f86e8  
[root@centos72 n9e]# docker top 6e7b8837d331
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD  
root                19696               19675               0                   17:41               pts/0               00:00:00            /bin/bash  
root                20515               19696               0                   17:52               pts/0               00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
  • 查看运行中的镜像资源消耗情况
docker stats

CONTAINER ID   NAME               CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS  
275068169b57   magical_napier     0.00%     12.24MiB / 7.637GiB   0.16%     1.48MB / 17.9MB   23.9MB / 10.2MB   18  
adac4d72a2b2   kibana             1.03%     78.84MiB / 7.637GiB   1.01%     142MB / 71.1MB    61.6MB / 4.1kB    11  
40a222e1a307   elasticsearch      1.14%     535.9MiB / 7.637GiB   6.85%     66.5MB / 142MB    68.8MB / 181kB    107  
cc560e2fc61d   tomcat01           0.17%     239.2MiB / 7.637GiB   3.06%     27.9kB / 273kB    77.8MB / 0B       40  
f51fdfbe021f   nginx01            0.00%     8.738MiB / 7.637GiB   0.11%     2.1kB / 736B      10.6MB / 0B       13  
6e7b8837d331   elegant_elbakyan   0.00%     3.773MiB / 7.637GiB   0.05%     1.15kB / 0B       9.56MB / 0B       1  
  • 查看容器内部细节,Json形式展示
docker inspect a4aaa44f86e8  
  • 进入正在运行的容器并以命令行交互
  • 从容器内拷贝文件到主机上
docker attach 630511f90f7c  
docker exec -t 630511f90f7c ls -l /tmp #不进去也可以执行  
docker exec -t 630511f90f7c /bin/bash # 进去后执行  

attach 直接进入容器启动命令的终端,不会启动新的进程
exec 是在容器中打开新的终端,并且可以启动新的进程

  • 从容器内拷贝文件到主机上,或主机拷贝到容器
docker cp 0fea14d614f5:/etc/nginx/conf.d/default.conf .  
docker cp anaconda-ks.cfg 0fea14d614f5:/tmp/  
  • docker 容器运行完就删除,测试的时候使用
 docker run -it --rm nginx
  • commit 镜像
# 启动一个镜像
docker run -d --name tomcat01 -p 8080:8080 tomcat:9.0  
# 进入容器中修改一些内容
docker exec -it tomcat01 /bin/bash  
root@cc560e2fc61d:/usr/local/tomcat# cd /usr/local/tomcat/  
root@cc560e2fc61d:/usr/local/tomcat#cp -r webapps.dist/* webapps/  
root@cc560e2fc61d:/usr/local/tomcat#exit  
# 将修改后的容器,通过commit提交为新的镜像
docker commit -m="add tomcat webapps app" -a="leoiceo" cc560e2fc61d tomcat:9.1  
# 查看镜像
docker images