docker常用命令

查看当前启动的容器

docker ps

查看所有容器

docker ps -a

删除容器

#强制删除容器 db01、db02:
docker rm -f db01 db02
#移除容器 nginx01 对容器 db01 的连接,连接名 db:
docker rm -l db 
#删除容器 nginx01, 并删除容器挂载的数据卷:
docker rm -v nginx01
#删除所有已经停止的容器:
docker rm $(docker ps -a -q)

查看所有镜像

docker images

删除镜像

#单个镜像删除,相当于:docker rmi java:latest
docker rmi java
#强制删除(删除正在运行的镜像,注:以后台方式运行的不能被强制删除)
docker rmi -f java
#多个镜像删除,不同镜像间以空格间隔
docker rmi -f java tomcat nginx
#删除本地全部镜像
docker rmi -f $(docker images -q)
#删除没有用到的镜像
docker image prune -a -f

查看dockerHub上关于nginx相关镜像

docker search nginx
docker search --filter=stars=300 nginx     #从Docker Hub上查找关注度大于300的nginx镜像

通过name拉取的镜像

docker pull nginx

查看镜像的详细信息

docker inspect nginx

通过关键字查看镜像的信息

docker inspect -f {{".Size"}} nginx

查看镜像构建历史

docker history nginx

查看镜像构建历史的详细信息

docker history --no-trunc nginx

容器内文件导出(文件夹同理,不需要加“-r”)

docker cp nginx:/usr/local/sbin/test.txt ./
docker cp 容器名:文件 宿主机地址

文件导入容器内(文件夹同理,不需要加“-r”)

docker cp ./test.txt nginx:/usr/local/sbin
docker cp 文件地址 容器名:容器内地址

从容器创建一个新镜像

docker commit -a "eleven" -m "nginx" 容器ID  myNginx:v1 

通过基础镜像运行容器

docker run --name mycentos -p 8080:8080 -d -v /data:/data  镜像名称/镜像ID sleep 10000
--restart=always \    //参数能够使我们在启动docker时,自动启动相关容器
-e username="ritchie": 设置环境变量; eg: --env TZ=Asia/Shangha  时区改成东八区  \  -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai
-t 参数让Docker分配一个伪终端并绑定到容器的标准输入上
-i 参数则让容器的标准输入保持打开。
-u 参数用于指定启动用户  eg: -u root  以root用户启动镜像
-c 参数用于给运行的容器分配cpu的shares值
-m 参数用于限制为容器的内存信息,以 B、K、M、G 为单位
-v 参数用于挂载一个volume,可以用多个-v参数同时挂载多个volume  格式: host_addr:container_addr  //注意:如果出现Docker挂载宿主机目录显示cannot open directory .:Permission denied
解决办法:在挂载目录后面 多加一个--privileged=true参数即可
--privileged=true 参数赋予最大权限
-p 参数用于将容器的端口暴露给宿主机端口 格式:host_port:container_port 或者 host_ip:host_port:container_port
--name 为容器指定一个名称
--net 容器使用的网络
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-d 参数会创建一个守护式容器在后台运行(这样创建容器后不 会自动登录容器,如果只加-i -t 两个参数,创建后就会自动进去容器)
--shm-size 8G 添加内存大小设置(在创建docker的时候,内存大小默认设置都很小)
sleep  容器起不来,可以睡眠模式启动,进入容器查看问题

创建容器,但不启动

#使用docker镜像nginx:latest创建一个容器,并将容器命名为myrunoob
#创建一个新的容器但不启动它
docker create  --name myrunoob  nginx:latest

容器的进入和退出

#进入容器
docker exec -it 容器id  /bin/bash
#关闭容器并退出
exit
#两种方式区别
exec:进入容器后,开启一个新的终端,可以再里面操作;
attach:进入容器正在执行的终端,不会启动新的终端进程;

容器启动和停止

#启动止容器
docker start 容器id
# 重启容器
docker restart 容器id
# 关闭容器
docker kill 容器id
docker stop 容器id
docker pause :暂停容器中所有的进程。
docker unpause :恢复容器中所有的进程。

容器日志

# 查看redis容器日志,默认参数
docker logs 容器id
# 查看redis容器日志
docker logs -f -t --tail=2 容器id
# 查看容器redis从2021年08月10日后的最新10条日志。
docker logs --since="2022-05-16" --tail=10 容器id
参数:
-f : 跟踪日志输出
-t : 显示时间戳
--tail :仅列出最新N条容器日志
--since :显示某个开始时间的所有日志
--details  展示详细容器日志

容器进程

#top支持 ps 命令参数,格式:docker top [OPTIONS] CONTAINER [ps OPTIONS]
#列出nginx容器中运行进程
docker top nginx
#查看所有运行容器的进程信息
for i in  `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done

镜像的构建

#使用当前目录的 Dockerfile 创建镜像,标签为 runoob/ubuntu:v1。
docker build -t runoob/ubuntu:v1 . 
#使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像。
docker build github.com/creack/docker-firefox
#也可以通过 -f Dockerfile 文件的位置:
docker build -f /path/to/a/Dockerfile .
#在 Docker 守护进程执行 Dockerfile 中的指令前,首先会对 Dockerfile 进行语法检查,有语法错误时会返回:
$ docker build -t test/myapp .
Sending build context to Docker daemon 2.048 kB
Error response from daemon: Unknown instruction: RUNCMD
参数
-f :指定要使用的Dockerfile路径;
--force-rm :设置镜像过程中删除中间容器;
--no-cache :创建镜像的过程不使用缓存;
--rm :设置镜像成功后删除中间容器;
--squash :将 Dockerfile 中所有的操作压缩为一层。
--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
--network: 默认 default。在构建期间设置RUN指令的网络模式

镜像打成tar文件

#将镜像 runoob/ubuntu:v3 生成 my_ubuntu_v3.tar 文档
docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
#打包之后的images.tar包含postgres:9.6和mongo:3.4这两个镜像
docker save -o images.tar postgres:9.6 mongo:3.4
#docker save如果指定的是container,docker save将保存的是容器背后的image

tar生成镜像

docker load --input my_ubuntu_v3.tar
参数
--input , -i : 指定导入的文件,代替 STDIN。
--quiet , -q : 精简输出信息。

将文件系统作为一个tar归档文件导出到STDOUT

#将id为a404c6c174a2的容器按日期保存为tar文件。
docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2
#docker import将container导入后会成为一个image,而不是恢复为一个container
#docker import可以指定IMAGE[:TAG],说明我们可以为镜像指定新名称
docker import postgres-export.tar postgres:latest
#docker export的应用场景主要用来制作基础镜像,比如你从一个ubuntu镜像启动一个容器,然后安装一些软件和进行一些设置后,使用docker export保存为一个基础镜像。然后,把这个镜像分发给其他人使用,比如作为基础的开发环境。
总结一下docker save和docker export的区别:

docker save保存的是镜像(image),docker export保存的是容器(container);
docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。

更新容器

#更新 CPU 共享数量
docker update --cpu-shares 512 容器id
#更新容器的重启策略
docker update --restart=always 容器id
#更新容器内存
docker update -m 500M 容器id
docker stats监控容器资源消耗
docker top :查看容器中运行的进程信息
docker wait : 阻塞运行直到容器停止,然后打印出它的退出代码。
docker diff : 检查容器里文件结构的更改。文件夹,文件的变动
docker network inspect			 # 根据网络的ID展示网络的详细信息
docker network ls				 # 展示所有的网络,以列表形式
docker network create			 # 创建一个自定义网络
docker network connect			 # 连接一个容器到指定网络上
docker network disconnect 		 # 让一个容器从指定网络上断开
docker network prune			 # 删除所有未使用的网络
docker network rm 				 # 根据网络的ID,删除一个或多个网络

–link(容器互联)

#在容器运行启动的时候,通过--link参数可以指定容器之间相互绑定,以达到容器之间的项目访问
#其实原理就是在/etc/hosts里面添加了一个alias的名称。
1.启动两个容器,进行测试
# 启动第一个容器
docker run -d --name tomcat1 tomcat
# 启动第二个容器
docker run -d --name tomcat2 tomcat
2.任意进入一个tomcat容器内部,去ping另一个tomcat容器,发现ping不通
docker exec -ti tomcat01 /bin/bash
ping tomcat02
3.我们再启动一个tomcat03,使用–link参数链接到tomcat01,tomcat02
docker run -d --name tomcat03 --link tomcat01 --link tomcat02 tomcat
4.我们进入tomcat03容器内部,去pingtomcat01或tomcat02,发现tomcat03可以直接通过容器名访问其它两个容器
docker exec -ti tomcat03 /bin/bash
ping tomcat01
ping tomcat02
5.查看tomcat03的/etc/hosts文件,发现,其实是做了一个域名映射
#两个容器间互相通信使用–link,可以实现互通。
#docker0 不支持容器名连接访问。

docker事件

#显示docker 2016年7月1日后的所有事件。
docker events  --since="1467302400"
#显示docker 镜像为mysql:5.6 2016年7月1日后的相关事件。
docker events -f "image"="mysql:5.6" --since="1467302400" 
#如果指定的时间是到秒级的,需要将时间转成时间戳。如果时间为日期的话,可以直接使用,如--since="2016-07-01"。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值