docker的使用
- 最近在弄关于ctfd的东西,要用到docker。
于是乎,云集docker的使用
,写出一篇自己的心得
首先,弄明白docker
image与Container的关系
形容一下,image就是Java中的类,而Container是Java对象
image也叫做镜像,而container叫做容器
0x01 进入正题:如何使用docker
- 先在dockerhub上拉取docker image
这里我们以CTF题目为例
先执行
1 | docker pull ctftraining/qwb_2019_supersqli |
- 这里的
docker pull
是用来抓取image文件的命令
在本机查看image文件
1 | docker image ls |
镜像需要启动后,才能变成容器,-d表示后台运行,不然会一直卡着界面
1 | docker run -itd 容器ID // 这里 -i,-t,-d分别是三个参数 |
- 这里出现的
<none>
的出现,是因为docker中的镜像被新的镜像覆盖的时候,老版本的镜像名称会变成<none>
,删除即可
删除镜像的指令
1 | docker rmi -f 容器id |
删除容器的命令
1 | docker rm -f 容器id |
- 再强调一遍,docker的镜像与容器是两个概念!
0x02 docker网络
1.查看docker容器的ip
先查看所有网络
1 | docker network ls |
- 接着通过命令得到容器IP
1 | docker network inspect 容器ID |
0x03 ctfd中docker的frp容器一直restarting的问题
- 报错如图所示
原因:frps与frp容器连接有问题
可以通过docker logs 分析日志
总结下来有几种解决方法
1.如果是端口被占用
通过杀进程解决
1 | systemctl stop frps |
2.如果是显示FRP未配置
通过添加网络即可
1 | sudo docker network connect frpcadmin <frpc容器名或者ID> |
0x04 docker 拉 MySQL
几步命令
1 | sudo docker pull mysql:latest |
MySQL 中存在中文乱码的问题
docker 的详细使用
更新于 2023/8/31;更新的主要原因是发现自己 Dockerfile 编写的非常不熟练,docker-compose.yml
编写的也非常不熟练。
所以此时的更新也是主要围绕着 Dockerfile 和 docker-compose 展开
Dockerfile
Dockerfile 是用来描述文件的构成的文本文档,其中包含了用户可以在使用行调用以组合 Image 的所有命令,用户还可以使用 Docker build 实现连续执行多个命令指今行的自动构建。
通过编写Dockerfile生磁镜像,可以为开发、测试团队提供基本一致的环境,从而提升开发、测试团队的效率,不用再为环境不统一而发愁,同时运维也能更加方便地管理我们的镜像。
Dockerfile的语法非常简单,常用的只有11个:
编写多了现在自然而然也就会了
docker-compose
在 dockerfile 的基础上升级了一下,通过 docker-compose.yml 能够对一些容器/调试起很大的作用。
比如这一个
1 | version: '2' |
这里的语法和 dockerfile 几乎差不多,此处便不再展开
为 docker 开启代理
https://cloud-atlas.readthedocs.io/zh-cn/latest/docker/network/docker_proxy.html
我是在 wsl2 里面做的,首先配好代理,在 .bashrc 里面加上
1 | host_ip=$(cat /etc/resolv.conf |grep "nameserver" |cut -f 2 -d " ") |
好了之后 source .bashrc
随后根据教程配置 /root/.docker/config.json
然后配置 httpproxy.conf,最后需要重启 daemon
- 本文标题:docker的使用
- 创建时间:2021-10-12 09:23:27
- 本文链接:2021/10/12/docker的使用/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!