泷羽sec-----容器技术之docker的简单学习
声明!
学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页B站泷羽sec
Docker
在 Ubuntu 上生成 CentOS 7 容器,可以使用 Docker 这个流行的容器化工具。步骤如下:
1 安装Docker
确保安装了 Docker。如果没有安装,可以使用以下命令安装
sudo apt-get update //这个命令让系统检查有没有新软件
sudo apt-get install docker.io //安装 Docker
sudo docker version //查看是否安装成功,显示docker的版本信息
vim /etc/apt/sources.list //需要修改源为国内源,不然更新慢的很,源文件的文件
//下面的三个,随便应用一个就行,#表示注释,行前有,表示不生效
#中科大Kali镜像源
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free non-free-firmware contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free non-free-firmware contrib
#阿里云Kali镜像源
#deb http://mirrors.aliyun.com/kali kali-rolling main non-free non-free-firmware contrib
#deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free non-free-firmware contrib
#清华大学Kali镜像源
#deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free non-free-firmware
#deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free non-free-firmware
Ubuntu/Debian 系统换docker的源为国内源
- 首先备份
/etc/docker/daemon.json
文件(如果该文件不存在可以跳过此步骤)
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak
- 创建或编辑
/etc/docker/daemon.json
文件
{
"registry-mirrors": [
"https://5tqw56kt.mirror.aliyuncs.com",
"https://docker.hpcloud.cloud",
"https://docker.m.daocloud.io",
"https://docker.1panel.live",
"http://mirrors.ustc.edu.cn",
"https://docker.chenby.cn",
"https://docker.ckyl.me",
"http://mirror.azure.cn",
"https://hub.rat.dev"
]
}
- 让 Docker 守护进程重新加载配置文件
sudo systemctl daemon-reload
- 重启 Docker 服务
sudo systemctl restart docker
拉取 CentOS 7 的官方 Docker 镜像
sudo docker pull centos:7
查看当前已有的镜像及相关信息
docker images
运行一个基于 CentOS 7 镜像的容器
sudo docker run -it --name my_centos7 centos:7 /bin/bash
--name
【自己命名的容器名称】 表示自己把这个容器的名称命名为my_centos7
/bin/bash
在容器内启动,启动 Bash shell,以便你在容器中进行各种操作和命令执行
列出所有正在运行的容器
docker ps
开启或关闭某一容器
docker start/stop 【容器ID 或 容器名称】
//假如关闭容器后,使用docker ps查看不到容器名称或ID,恰好自己也忘了,可使用docker ps -a,会显示所有的容器信息,是所有
创建 Apache
容器后台运行
docker container run -d --rm -p 8080:80 httpd
docker container run
:这是启动一个新容器的命令。-d
:表示以守护进程(detached)模式运行容器,即容器在后台运行,不会占用当前终端。--rm
:当容器停止运行时,自动删除容器。-p 8080:80
:将主机的 8080 端口映射到容器内的 80 端口。这样,外部可以通过访问主机的 8080 端口来访问容器内运行的80端口服务。
2 常用命令:
查看所有容器
docker container ls
进入特定容器
docker exec -it 899 /bin/bash
docker exec
用于在运行中的容器中执行命令-i
表示保持标准输入流打开,允许你在容器内进行交互;-t
表示分配一个伪终端(pseudo-tty
),使得交互更加类似于在实际终端中操作。- 889:是指容器ID,这里也可以是容器名称
这里需要注意,镜像ID与容器ID不是一回事的,
停止特定容器
docker container stop 【容器名称/ID】
挂载宿主机目录运行容器
docker container run -d --rm -p 8080:80 -v /home/kali/:/usr/local/apache2/htdocs/ httpd
-v /home/kali/:/usr/local/apache2/htdocs/
:将主机上的/home/kali/
目录挂载到容器内的/usr/local/apache2/htdocs/
目录。这使得容器内的 httpd 服务器可以访问主机上的特定目录中的网页文件。httpd
:指定要运行的容器的镜像名称
为方便看清楚挂载,先在主机上的目录上创建一个1.html文件
进入容器中,发现刚进入系统的目录不是设置的,所以切换目录,即可看到显示了主机目录/home/kaili
中的内容
侦听宿主机 80 端口运行容器
docker container run -d --rm --network host -v /home/user/webroot/:/usr/local/apache2/htdocs/ httpd
--network host
:使用宿主机的网络模式,这意味着容器将直接使用宿主机的网络栈,与宿主机共享网络接口。这样可以避免端口映射的复杂性,并且容器可以直接使用宿主机的 IP 地址和端口进行通信。也就是没有上面的端口映射
这里看到直接访问主机的IP地址,就可以直接访问到httpd
服务
查看特定容器的进程信息
docker top <container_name_or_id> //容器名称或ID
Podman
是 Docker 的替代产品,无守护进程。命令一样
首先安装podman
然后配置源,这里可以选择复制docker
的配置文件daemon.josn
中的源,编辑podman
的源文件/etc/containers/registries.conf
,添加下面代码
[registries.search]
registries = ['5tqw56kt.mirror.aliyuncs.com',
"docker.hpcloud.cloud",
"docker.m.daocloud.io",
"docker.1panel.live",
"mirrors.ustc.edu.cn",
"docker.chenby.cn",
"docker.ckyl.me",
"mirror.azure.cn",
"hub.rat.dev"
]
运行容器
sudo podman run -d --rm --network host httpd
创建空pod之前,还要安装catatonit
,不然会无法创建
apt-get install catatonit
创建空 pod,这里的pod相当于docker中的容器
podman pod create --name wha
--name wha
:指定 Pod 的名称为wha
。
在 pod 中运行容器
podman run -d --pod wha httpd
在上面创建的pod名为wha
中,启动httpd容器
首先确认docker的容器全部关闭
启动httpd容器
进入到创建的http容器中
在 pod 中运行可找东西的工具并互动
首先拉取镜像alpine/curl
podman pull alpine/curl
podman run -pod wha -it alpine/curl /bin/ash
- “alpine/curl”:指定要使用的容器镜像,这里是一个基于 Alpine Linux 且带有 curl 工具的镜像。
- “/bin/ash”: “/bin/ash” 或 “/bin/bash” 等 shell 命令,以便在容器内获得一个命令行界面进行操作。
大部分容器化过程都采用开放容器计划(OCI)标准,所以Podman
和 Docker 可互操作。
对于这条命令,一直报错Error: parsing container port: invalid port number: strconv.Atoi: parsing "od": invalid syntax
,试过很多方法,都不行,但是命令也没有错。略过
本文来自博客园,作者:whitehe,转载请注明原文链接:https://www.cnblogs.com/whitehe/p/18578424