为了账号安全,请及时绑定邮箱和手机立即绑定

从ctf-all-in-one开始学习ctf之第五天:ctf基础加入门题

标签:
Docker

docker的使用

转自 https://blog.csdn.net/S_gy_Zetrov/article/details/78161154

https://blog.csdn.net/permike/article/details/51879578

docker run -it (--name stack1)id /bin/bash 启动镜像,-it是-i  -t的缩写:前者表示打开并保持stdout,后者表示分配一个终端(pseudo-tty)一般这个模式就是可以启动bash,然后和容器有命令行的交互。--name参数可以指定启动后的容器名字,如果不指定则docker会帮我们取一个名字。

运行出一个container放到后台运行

 docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 2; done"

-d: 后台运行容器,并返回容器ID;

它将直接把启动的container挂起放在后台运行(这才叫saas),并且会输出一个CONTAINER ID,通过docker ps可以看到这个容器的信息,可在container外面查看它的输出docker logs ae60c4b64205,也可以通过docker attach ae60c4b64205连接到这个正在运行的终端,此时在Ctrl+C退出container就消失了,按ctrl-p ctrl-q可以退出到宿主机,而保持container仍然在运行

另外,如果-d启动但后面的命令执行完就结束了,如/bin/bashecho test,则container做完该做的时候依然会终止。而且-d不能与--rm同时使用,可以通过这种方式来运行memcached、apache等。

如果使用exit,命令退出,则容器的状态处于Exit,而不是后台运行。如果想让容器一直运行,而不是停止,可以使用快捷键 ctrl+p ctrl+q 退出,此时容器的状态为Up。

启动、停止、重启容器aa97ba3292ce的命令:

~$ docker start aa97ba3292ce~$ docker stop aa97ba3292ce~$ docker restart aa97ba3292ce

 

将容器转化为一个镜像(即软件装完,保存环境),即执行commit操作,完成后可使用docker images查看

root@aa97ba3292ce:/#exit //先退出容器~$ docker commit -m "ubuntu with vim" -a "sgy" aa97ba3292ce sgy/ubuntu:vim~$ docker imagesREPOSITORY                    TAG    IMAGE ID         CREATED             SIZEsgy/ubuntu                    vim    52166e4475ed     5 seconds ago       358.1 MBchug/ubuntu14.04x64           latest 0584b3d2cf6d     9 days ago          196.5 MB

其中,-m指定说明信息;-a指定用户信息;aa97ba3292ce代表容器的id;sgy/ubuntu:vim指定目标镜像的用户名、仓库名和 tag 信息。我这里都是为了博客瞎编的用户名,我自己的用户名也不是sgy,你运行命令的时候使用自己注册Docker时的用户名。

此时Docker中就有了我们新建的镜像sgy/ubuntu:vim,此镜像和原有的ubuntu镜像区别在于多了个vim工具。此时我们利用新镜像创建的容器,本身就自带vim了。

 删除镜像和容器

~$ docker rm container_id~$ docker rmi image_id

 

Docker中使用gdb无法进入断点,无法调试

加上--privileged参数

~$ docker run -it --privileged sgy/ubuntu:vim /bin/bash

 -p: 端口映射,格式为:主机(宿主)端口:容器端口   --expose=[]: 开放一个端口或一组端口;

使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。

docker run -P -d nginx:latest

使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。

docker run -p 80:80 -v /data:/data -d nginx:latest

绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。

$ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

 -u, --user=""              指定容器的用户   -a, --attach=[]            登录容器(必须是以docker run -d启动的容器)

-w, --workdir=""           指定容器的工作目录

docker 端口映射的指令是什么
docker指令:docker run -p ip:hostPort:containerPort redis
使用-p参数会分配宿主机的端口映射到容器。
IP表示主机的IP地址。
hostPort表示宿主机的端口。
containerPort表示容器的端口。

 支持的格式有三种
ip:hostPort:containerPort:映射指定地址的指定端口到容器的指定端口(不常用)
如:127.0.0.1:3306:3306,映射本机的3306端口到容器的3306端口。
ip::containerPort:映射指定地址的任意端口到容器的指定端口。(不常用)
如:127.0.0.1::3306,映射本机的3306端口到容器的3306端口。
hostPort:containerPort:映射本机的指定端口到容器的指定端口。(常用)
如:3306:3306,映射本机的3306端口到容器的3306端口。
 

docker run -it -p 12345:54321 images /bin/bash

docker port name 可以查看

54321/tcp -> 0.0.0.0:32772 表示容器的54321端口映射到了主机的12345端口。

 

查看image或container的底层信息(inspect)

inspect的对象可以是image、运行中的container和停止的container。

  1. 查看容器的内部IP

  2. # docker inspect --format='{{.NetworkSettings.IPAddress}}' $CONTAINER_ID

  3. 172.17.42.35

docker ps 默认显示当前正在运行中的container
docker ps -a 查看包括已经停止的所有容器
docker ps -l 显示最新启动的一个容器(包括已停止的)

查看container中正在运行的进程,docker top <container_id/container_name>。实际上在host上使用ps -ef|grep docker也可以看到一组类似的进程信息,把container里的进程看成是host上启动docker的子进程就对了

-P:端口映射,外部端口到容器端口的映射规则由docker负责

-p:自己指定端口映射规则,格式为:-p 外部端口:容器端口

进入容器执行命令

#sudo docker exec -it 容器ID /bin/bash

如果你想通过很快捷的方式查看容器的端口

#sudo docker port 容器ID或容器名称

查看容器的日志

$sudo docker logs 容器ID或容器名称

暂停容器

#sudo docker pause 容器ID  //暂停

#sudo docker unpause 容器ID //解除暂停

杀死容器

$sudo docker kill 容器ID或容器名称

docker build -t name

--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。

也可以通过 -f Dockerfile 文件的位置:

$ docker build -f /path/to/a/Dockerfile .

 

socat用法

socat udp4-listen:11161,reuseaddr,fork UDP:[监控服务器IP]:161

udp4-listen:在本地建立的是一个udp ipv4协议的监听端口;
reuseaddr,绑定本地一个端口;
fork,设定多链接模式,即当一个链接被建立后,自动复制一个同样的端口再进行监听

参考 https://blog.csdn.net/weixin_36440115/article/details/76464876

连接一个端口:

socat  -  tcp:192.168.1.1:80   #连接ip 为 192.168.1.1 服务器的80端口

侦听端口

socat  -  tcp-l:333   #侦听本机的333端口

发送文件:

cat  abc.txt |  socat  -  tcp:1.1.1.1:333   #将文件abc.txt发送至1.1.1.1的333端口

接收文件:

socat   tcp-l:333   open:a.txt, creat, append  #将接收的文件存为a.txt 并追加在文件尾

远程传递shell

socat  tcp-l:1234   exec:sh,pty,stderr   #当有主机连接本机的1234端口时,将会发送本机的shell给连接端

端口转发

socat  tcp-l:22,fork  tcp:1.1.1.1:80    #将主机22端口收到的流量重定向至1.1.1.1的80端口

原文出处:https://blog.csdn.net/Vaing_Lory/article/details/81230719

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消