Docker常用命令

这篇具有很好参考价值的文章主要介绍了Docker常用命令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

docker常用命令

1 基础命令

sudo docker version     #查看docker的版本信息

查看docker版本命令,笔记,docker,容器,运维

sudo docker info        #查看docker系统信息,包括镜像和容器的数量

2 镜像命令

sudo docker images** #查看本地主机的所有主机镜像

查看docker版本命令,笔记,docker,容器,运维

#解释
**REPOSITORY     ****#镜像的仓库源**
**TAG            **** #镜像的标签**
**IMAGE ID		****#镜像的id**
**CREATED		****#镜像的创建时间**
**SIZE			****#镜像的大小**
#可选参数
**-a/ --all    ****列出所有镜像**
**-q/ --quiet  ****只显示镜像的id**
2. sudo docker search 搜索镜像

查看docker版本命令,笔记,docker,容器,运维
可选参数

sudo docker search --help

查看docker版本命令,笔记,docker,容器,运维
搜索收藏数大于3000的镜像

sudo docker search mysql --filter=STARS=3000

查看docker版本命令,笔记,docker,容器,运维

sudo docker pull 镜像名字[:tag]  拉取镜像

查看docker版本命令,笔记,docker,容器,运维

指定版本下载
  sudo docker pull mysql:5.7

查看docker版本命令,笔记,docker,容器,运维

3 docker rmi 删除镜像
sudo docker rmi -f 镜像id     #删除指定的镜像id

镜像id可以省略为bbf6
查看docker版本命令,笔记,docker,容器,运维

sudo docker rmi -f	镜像id 镜像id 镜像id   #删除多个镜像id

查看docker版本命令,笔记,docker,容器,运维

sudo docker rmi -f $(docker images -aq)  删除全部镜像id
4 容器命令

如拉取一个centos容器

sudo docker pull centos 

查看docker版本命令,笔记,docker,容器,运维

sudo docker run --help  

1. **-a stdin**: 指定标准输入输出内容类型,可选STDIN/STDERR三项;
2. **-d**:后台运行的容器,并返回容器ID;
3. **-i:** 以交互模式运行容器,通常与-t同时使用;
4. **-P**:随机端口映射,容器内部端口**随机**映射到主机的端口;
5. **-p:** 指定端口映射,格式为:主机(宿主)端口:容器端口
6. **-t:** 为容器重新分配一个伪输入终端,通常与-i同时使用;
7. **–name=”nginx-lb”:** 为容器指定一个名称;
8. **–dns 8.8.8.8**:指定容器使用的DNS服务器,默认和宿主一直;
9. **–dns-search example.com:**指定容器DNS搜索域名,默认和宿主一直;
10. **-h “mars”**:指定容器的hostname;
11. **-e username=”Ritchie”:**设置环境变量
12. **–env-file=[]**:从指定文件夹读入环境变量;
13. **–cpuset=”0-2” or—cpuset=”0,1,2“**:绑定容器到指定CPU运行;
14. **-m**: 设置容器使用内存最大值;
15. **–net=”bridge”**:指定容器的网络连接类型,支持bridge/host/none/contariner;四种类型;
16. **–link=[]**:添加链接到另一个容器;
17. **–expose=[]**:开放一个端口或一组端口;
18. **–volume,-v**:绑定一个卷
19. **-it** 使用交换方式运行,进入容器查看内容
20. --privileged=false:指定容器是否为特权容器,特权容器拥有所有的capabilities
21. --privileged=true  

--privileged=true 这个参数是很有用的,使用该参数,container内的root拥有真正的root权限。container内的root只是外部的一个普通用户权限,privileged启动的容器,可以看到很多host上的设备,并且可以执行mount,甚至允许你在docker容器中启动docker容器。
这里举一个例子
启用命令还没加 --privileged=true 参数 可以明确看到docker 尝试去运行容器,但是马上就关闭了。


sudo docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql

查看docker版本命令,笔记,docker,容器,运维

sudo docker exec -it 4de3 /bin/bash
尝试使用一些命令,提示permission denied,权限禁止 

查看docker版本命令,笔记,docker,容器,运维
加入参数命令后

sudo docker run -d --name mysql -p 3306:3306 --privileged=true -e MYSQL_ROOT_PASSWORD=root mysql

查看docker版本命令,笔记,docker,容器,运维
成功运行命令
查看docker版本命令,笔记,docker,容器,运维
简单来说这个命令就是就是增加权限的。很有必要添加的一个参数,因为在里面跳过很多坑。
下面是我经常用的参数

**docker run --name Apache -p 10.7.70.55:80:80 -tid --privileged=true centos**
** /usr/sbin/init**
**docker run -dit --name abc -P centos bash**
**sudo docker run --name ubuntu -P -tid --privileged=true ubuntu /bin/bash**
**sudo docker run -d -P –name tomcat01 tomcat**

#### 5 进入容器
sudo docker exec -it 5ad2 /bin/bash

查看docker版本命令,笔记,docker,容器,运维

6 退出容器
**#exit ****停止并推出容器(后台方式运行则仅推出)**
**#ctrl+P+Q ****不停止容器推出**
**exit**

查看docker版本命令,笔记,docker,容器,运维

7.列出运行过的容器
**sudo docker ps**
**ps	**	# 列出当前正在运行的容器
-a		#列出所有运行的记录
-n=?  # 只显示最近创建的n个容器
-q		# 只显示容器的编号

查看docker版本命令,笔记,docker,容器,运维

8.删除容器
1. sudo docker rm 容器id             #删除指定的容器,不能删除正在运行的容器,强制删除使用
2. sudo docker rm -f $(docker ps -aq)   #删除所有的容器
3. sudo docker ps -a -q|xargs docker rm #删除所有的容器
9.启动和停止容器
- sudo docker start 容器id        #启动容器
- sudo docker restart 容器id      #重启容器
- sudo docker stop 容器id		  #停止当前运行的容器
- sudo docker kall 容器id		强制停止当前容器
10.拷贝操作


sudo docker cp 容器id:容器内路径   目的主机路径    #拷贝容器文件到主机中

查看docker版本命令,笔记,docker,容器,运维

docker cp 目的主机路径 容器id:容器内路径  #拷贝宿主机的文件到容器中

查看docker版本命令,笔记,docker,容器,运维

11. 镜像及的导入和导出

用docker搭建靶场环境是很方便的,因为容器内存是比较小的
就像下面这个容器,我已经搭建好的靶场,但是如何导出来呢。并且可以在另一台主机上再次利用。

导出和导入镜像

镜像的保存

1. docker images
2. docker save -o tomcat.tar    #-o:指定保存的镜像的名字; tomcat.tar:保存到本地的镜像名称; tomcat:镜像名字,通过"docker images"查看
3. docker load -I  tomcat.tar

查看docker版本命令,笔记,docker,容器,运维
镜像的导入

1. docker load -i tomcat.tar
2. docker images

查看docker版本命令,笔记,docker,容器,运维

容器的导入和导出

导出镜像

docker export 5a85 > tomcat.tar

查看docker版本命令,笔记,docker,容器,运维
导入容器快照
查看docker版本命令,笔记,docker,容器,运维
查看docker版本命令,笔记,docker,容器,运维
查看docker版本命令,笔记,docker,容器,运维
查看docker版本命令,笔记,docker,容器,运维

12. docker Portaniner图形管理界面

Portaniner是docker的图形化管理工具,类似的工具还有rancher
下载运行portaniner镜像并运行,设置本机映射端口为808

docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

查看docker版本命令,笔记,docker,容器,运维
但是好像没启动

查看docker版本命令,笔记,docker,容器,运维

访问http://IP:端口
密码一定要符合复杂度
查看docker版本命令,笔记,docker,容器,运维
查看docker版本命令,笔记,docker,容器,运维

13.自定义Docker网络

学习网络之前需要把环境清空一下,
docker rmi -f $(docker images -q)

想把给docker容器ip地址,需要把docker网络理解了,网络方面就是Docker比较薄弱的部分。

安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host

认识docker网络几种类型
网络模式 简介
Host 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
Bridge 此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。
None 该模式关闭了容器的网络功能。
Container 创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。
自定义网络

简单介绍,
bridge :桥接 docker 相当于一个大桥 0.2 0.1 0.3 01就是咱们的桥就可以转发访问了(docker默认的网络)
none:就是不配置网络
host和宿主机共享的网络

创建自定义网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
#create(创建) --driver(网络类型,默认就是桥接,可以不选择) --subnet (子网16/ 就是255乘255。24/只能创建255个。所以我们选择16/) --gateway(网关,相当于咱们的路由器)
mynet(自定义名字,我把它称为mynet)

查看docker版本命令,笔记,docker,容器,运维
使用ip addr命令可以看到多出来一块网卡。
查看docker版本命令,笔记,docker,容器,运维

docker network inspect mynet

查看docker版本命令,笔记,docker,容器,运维
此时我们启动新的容器时,指定mynet即可,也就是 - -net参数

docker  run -d -P --name tomcat07 --net mynet tomcat

查看docker版本命令,笔记,docker,容器,运维
查看docker版本命令,笔记,docker,容器,运维
当然,咱们自定义创建的网络,可以正常访问外网,
查看docker版本命令,笔记,docker,容器,运维

##### apt install net-tools  安装ifconfig

##### apt install iproute2 -y    安装ip addr

##### apt install -y iputils-ping   安装ping
不同网段容器通讯

创建完成之后,你会发现,跨网段是无法互相ping通的
也就是咱们的docker0 和mynet里面的容器是无法进行通信的,
使用这条命令,将tomcat01 加入到mynet里面,也就相当于,一个容器两个网卡,就可以正常通讯了
docker network connect mynet tomcat01

Docker容器通过独立IP暴露给局域网的方法

我的环境

服务器(路由器,上网用的):192.168.10.1
Kali:192.168.10.124
Windows:192.168.10.2
宿主机:192.168.10.122
Docker-br0(自定义的桥接网络):172.172.0.1
容器(nginx04):172.172.0.10
创建自定义网络

创建一个172.172.0.0网段,网桥的名字命名为docker-br0,这两个根据自己需要来

docker network create --subnet=172.172.0.0/16 --gateway 172.172.0.1 docker-br0

查看docker版本命令,笔记,docker,容器,运维
通过ip adr可以看到我们创建的网卡
查看docker版本命令,笔记,docker,容器,运维

自定义ip,开启容器
docker run -itd --net docker-br0 --ip 172.172.0.10 --name nginx04 nginx

查看docker版本命令,笔记,docker,容器,运维
进入到容器安装一些工具

docker exec -it nginx04 /bin/bash
apt update
apt install net-tools

查看docker版本命令,笔记,docker,容器,运维

查看容器ip 172.172.0.10

查看docker版本命令,笔记,docker,容器,运维
开启nginx服务

Nginx
Netstat -ntap

查看docker版本命令,笔记,docker,容器,运维

我们在宿主机上访问是没有问题的
查看docker版本命令,笔记,docker,容器,运维
我们到kali上,无法访问的
也ping不通
查看docker版本命令,笔记,docker,容器,运维

查看docker版本命令,笔记,docker,容器,运维

路由转发

此时到宿主机,开启路由转发
配置文件为 /etc/sysctl.conf
echo “net.ipv4.ip_forward=1” >> /etc/sysctl.conf
sysctl -p
查看docker版本命令,笔记,docker,容器,运维
到kali上面添加静态路由

route add -net 172.172.0.0 netmask 255.255.0.0 gw 192.168.10.122  

查看docker版本命令,笔记,docker,容器,运维
查看docker版本命令,笔记,docker,容器,运维
添加完路由你会发现,可以ping通docker-br0我们自定义的网卡,但是ping不同容器,
查看docker版本命令,笔记,docker,容器,运维

Iptables策略
iptables -L -t nat  --line-numbers    
iptables -t nat -L -n  

注意那句MASQUERADE all – 172.172.0.0/16 0.0.0.0/0会导致所有172.172.0.0/16的数据包都不能到达docker以外的网络,所以我们要关掉这个NAT,关掉很容易,我们只需删掉这一条iptables规则就可以了。然后源IP为172.172.0.10的数据包就可以出现在192.168.10.1/24的网络中了。

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all – 172.172.0.0/16 0.0.0.0/0

iptables -t nat -I PREROUTING -s 192.168.10.0/16 -d 172.172.0.0/16 -j DNAT --to 172.172.0.1
iptables -t nat  -D PREROUTING 1   根据对应的all删除

查看docker版本命令,笔记,docker,容器,运维
可以访问了
查看docker版本命令,笔记,docker,容器,运维
查看docker版本命令,笔记,docker,容器,运维

但是把NAT关掉了以后,虽然内网可以互ping了,但是Docker容器可能上不去网呀。第一个路由器如果自动NAT 了172.172.0.10还好,但要是没有人给Docker容器做NAT,Docker容器就不能上网了,那我们的nginx也就没法用了。那么如何既保证Docker容器访问外网的数据包被NAT,又保证内网通信不被NAT呢?只要稍微修改一下iptables规则就好了,如下



iptables -t nat -A POSTROUTING -s 172.172.0.10 ! -d 192.168.10.1/24 -j MASQUERADE

查看docker版本命令,笔记,docker,容器,运维
查看docker版本命令,笔记,docker,容器,运维

Windows同样添加静态路由

route -p add 172.172.0.0 mask 255.255.255.0 192.168.10.122

查看docker版本命令,笔记,docker,容器,运维
查看docker版本命令,笔记,docker,容器,运维
如果有什么不理解的,可以参考下面三条链接,

关于通过容器内网ip直接路由到docker容器
https://blog.csdn.net/langchao7946/article/details/121860817?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2aggregatepagefirst_rank_ecpm_v1~rank_v31_ecpm-7-121860817.pc_agg_new_rank&utm_term=docker+%E5%AE%B9%E5%99%A8%E5%86%85%E7%BD%91ip&spm=1000.2123.3001.4430

docker容器通过独立ip暴漏给局域网的方法!!这个博主讲的非常好,简单易懂
https://blog.csdn.net/lvshaorong/article/details/69950694

基于iptables的docker网络隔离通信讲解
如果想要容器正常通信,iptbales是极为重要的,建议看完这篇文章
https://blog.csdn.net/taiyangdao/article/details/88844558?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1.highlightwordscore&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1.highlightwordscore

总结
  1. 创建自定义网络
  2. 开启容器,绑定创建的自定义网络
  3. 做路由转发
  4. Iptables策略
导入的容器靶机如何添加另一块网卡

我们在导入靶机容器之后,它是自动开启的,网卡也是自动分配好的,所以我们在给靶机添加一块网卡就行了,命令如下
docker network connect docker=br0 (网卡名字) CVE-2021-XXXX(容器名字)
这样我们的容器靶机就有两块网卡了,攻击机只要添加一条路由策略即可访问容器靶机文章来源地址https://www.toymoban.com/news/detail-805341.html

到了这里,关于Docker常用命令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 查看正在运行docker容器的启动命令

    该命令主要是为了详细展示查看运行时的command参数 使用docker inspect,但是docker inspect打印的是json文件,需要挑选字段查看,容器的参数信息都能从json文件中解析出来。 通过runlike去查看一个容器的docker run启动参数

    2024年02月13日
    浏览(54)
  • docker容器和常用命令

    1. 什么是容器 容器是隔离的环境中运行的一个 进程 , 如果进程结束 , 容器就会停止. 细致: 容器的隔离环境 , 拥有自己的 ip 地址 , 系统文件 , 主机名 , 进程管理 , 相当于一个 mini的系统 2. 容器 vs 虚拟机 3. Docker 极速上手指南 4. docker 下载镜像加速的配置 我们使用 docker 的时候

    2024年01月19日
    浏览(44)
  • docker常用容器命令

    首先说下容器: 它是指当docker运行镜像时,创建了一个隔离环境,称之为 容器 。  这种方式优点:可以开启多个服务,服务之前是互相隔离的(比如:在一台服务器上可以开启多个mysql,可以是多个不同版本或者多个相同版本,这样如果多个项目依赖不同mysql版本,也可以部

    2024年02月19日
    浏览(71)
  • Docker 常用【容器】命令

    Centos7 下载|安装|配置|卸载 Docker:https://liush.blog.csdn.net/article/details/129664121 Centos7 常用【基础|镜像】命令:https://liush.blog.csdn.net/article/details/129665015 容器常用命令 docker run IMAGE 新建启动容器 docker ps   查看所有正在运行的容器 exit  停止并退出容器 ctrl + P + Q   不停止退出容器

    2024年02月14日
    浏览(45)
  • 【云原生丶Docker】Docker容器常用命令大全

    在 Docker 核心概念理解 一文中,我们知道 Docker容器 其实就是一个轻量级的沙盒,应用运行在不同的容器中从而实现隔离效果。容器的创建和运行是以镜像为基础的,容器可以被创建、销毁、启动和停止等。本文将介绍下容器的这些常用操作命令。 docker run 命令表示新建并运

    2024年02月04日
    浏览(51)
  • docker 的启动常用容器命令

    2024年02月16日
    浏览(47)
  • docker 常用删除镜像和容器命令记录

    通过如下两个都可以删除镜像: 1 docker rmi [image] 或者: 1 docker image rm [image] 支持的子命令如下: -f, -force : 强制删除镜像,即便有容器引用该镜像; -no-prune : 不要删除未带标签的父镜像;  例子: 1. 想要删除容器,则要先停止所有容器(当然,也可以加-f强制删除,但是不推

    2024年02月12日
    浏览(48)
  • Docker容器常用命令大全:熟练掌握使容器优化更加高效

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月16日
    浏览(69)
  • docker 常用命令大全(基础、镜像、容器、数据卷)

    镜像的名称组成: 镜名称一般分两部分组成:[repository]:[tag]。 在没有指定tag时,默认是latest,代表最新版本的镜像 如图: 这里的mysql就是repository,5.7就是tag,合一起就是镜像名称,代表5.7版本的MySQL镜像。 常见的镜像操作命令如图: 从DockerHub中拉取一个nginx镜像并查看 1)

    2024年03月12日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包