安装
centOS中安装docker
-
#在centOS中安装docker
yum install docker -y
-
#启动docker
systemctl start docker
-
#设置开机自启 systemctl enable docker
#添加docker的gpg密钥,签名用的 curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add - #添加docker的apt源 echo 'deb https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/ buster stable' | sudo tee /etc/apt/sources.list.d/docker.list #更新apt缓存 apt update #安装docker sudo apt-get install docker docker-compose -y 或 sudo apt-get install docker.io #安装完成之后,docker就自动启动了 systemctl status docker #查看docker版本 docker -v
命令
docker镜像常用命令
-
docker search xxx
如 docker search tomcat#搜索镜像(只搜索官方仓库的,官方仓库地址:hub.docker.com)
#我们拉取的镜像tomcat的名字很短对吧,这都是官方仓库中的官方镜像,官方仓库中支持用户上传自己封装的镜像,用户镜像和官方镜像的差别在名字上面,比如我们可以去docker官方去注册一个账号,用户自己的镜像前面都会有作者的用户名或者用户所在组织的名字,比如jaden/nginx、jaden/tomcat等。
-
docker images
#查看本地镜像 -
docker pull 镜像名:版本号
如 docker pull tomcat:latest #下载镜像,拉取镜像,如果是docker pull tomcat 会默认Using default tag: latest -
docker push xxx
#上传镜像,推送镜像,推到官方仓库,推送不是那么简单的,不然早就满了,需要在本地登录一下官方账号才能推 -
docker rmi 名称:版本
或docker rmi 镜像id
如 docker rmi tomcat:latest 或者 docker rmi c20060033e06#删除镜像,rm image的意思,类似的
docker rm 容器名称:版本
或docker rm 容器id
表示要删除容器 #可以同时删除多个镜像:docker rmi tomcat:latest tomcat:jre17-temurin-jammy #如果这个镜像处于运行状态的是删除不了的,比如有容器在使用这个镜像,就不能删除镜像,比如docker rmi nginx:1.16会报错 -
docker save 镜像名称:版本 -o 名字.tar.gz
#导出镜像为 名字.tar.gz 并保存在工作目录下如 docker save nginx:1.16 -o docker.nginx1.16.tar.gz -
docker load -i xxx.tar.gz # 导入镜像 ,会自动解压并导入到docker服务中
docker容器的常用指令
-
docker run 选项 容器的名字 镜像:镜像的版本
或docker run 选项 容器的名字 镜像ID
如 docker run -tid --name test tomcat:latest 、docker run -tid --name test bbc951c969e2 # 创建一个新容器并运行,一般必加-tid选项选项说明如下:
-t:为容器重新分配一个伪输入终端,使得容器内的命令可以在控制台中交互式地执行 -i:以交互模式运行容器,使得用户可以与容器内的命令进行交互 -d:后台运行容器,并返回容器ID --name:为容器指定一个名称,注意到选项不是单个字母所以是两个- -p:端口映射,格式为:主机(宿主)端口:容器端口 -v: 挂载宿主机文件夹,格式为: 宿主机文件夹:容器文件夹 --link: 添加链接到另一个容器,注意到不是单个字母所以是两个- -m:设置容器使用内存最大值;
加和不加-d选项的区别:
-
docker start 容器id或者容器名字
# 启动已存在但关闭状态的容器 -
docker restart 容器id或者容器名字
# 重启。可见容器得先处于运行状态 -
docker ps
等价于docker container ls
只显示up状态的容器docker ps -a
等价于docker container ls -a
查看所有无论开或者关ing的容器,或者--all选项 -
docker stop 容器id或者容器名字
# 停止容器 -
docker kill 容器id或者容器名字
# 杀掉容器或曰强制关闭容器,尽量不要用,很容易就启动不了了 -
docker rm 容器名称:版本
或docker rm 容器id
表示要删除关闭中的容器,处于up状态是不能直接删除的。可以删除多个容器,就空格隔开。强制删除是可以删除up状态的容器的,
docker rm -f 容器名称或者id
-
#组合技,强制删除所有容器,-q是只显示容器id。反引号中的指令优先执行
-
docker top 容器id或者容器名字
# 查看容器内的进程 -
docker stats
查看容器的资源占用情况,注意不是status -
docker exec -it 容器id或者容器名字 /bin/bash
# 进入运行中的容器,exit
命令可退出容器的CLI。也可以用docker exec -it 容器id或者容器名字 /bin/sh
注意是新建立一个终端,也就是说你不会接收到原终端的输出如:
还没有找到进入原终端的方法。
/bin/bash
和/bin/sh
等本身就是个切换shell的命令。# shell是命令行处理程序exit
本身就是个退出终端的命令。 -
docker exec -it 容器id或者容器名字 其他命令
本质上和上个命令是一样的,就是执行容器里的命令,只是免去你进入容器去操作了。
但是docker容器里一般不会安装额外的软件,所以很多指令是用不了的,比如ifconfig、ps、ip addr等
-
删除线表示不用学。docker inspect -f '{{.Name}} => {{.NetworkSettings.IPAddress }}' $(docker ps -aq)
#可以查看所有容器的ip地址的,容器的ip地址是从172.17.0.1
开始分的。docker容器类似于一个微型的虚拟机,它占用的都是宿主机(物理机)的资源。在物理机上是可以看到容器所运行的程序的。每个容器都有自己的ip地址。 -
curl -I 容器IP地址:端口
,相当于访问容器IP地址:端口,会看到http响应数据例如我的mytest容器,上上命令得出IP为172.17.0.2,此外该靶场环境是外部12345端口映射到内部8080端口,所以我这样:鸡肋得很,我服务器IP为62.234.14.252,你会发现: -
docker port 容器名字或ID
查看容器和主机映射的端口,下图为容器内的8080端口映射到主机的12345端口
docker compose
比如前面我们启动的wordpress项目,需要启动两个容器才行,有时候就是这样,需要同时启动多个容器来完成你想要做的事情,但是到底启动多少个容器呢?比如wordpress那个,我们记不住,换一个机器不看笔记很难起来,有了docker-compose就可以解决这个问题了。
安装
yum install epel-release.noarch -y
yum install docker-compose -y
#kali安装docker-compose apt install docker-compose -y
查看版本
docker-compose -v
或docker compose version
-
docker compose up -d # 创建并启动,启动之后就可以通过浏览器访问了 docker compose up # 也是启动
-
docker-compose restart # 重启
-
docker compose down # 停止并删除
-
docker compose stop # 停止
-
docker compose start # 启动
问题和实战
在docker里面,容器和镜像有什么关系和区别?
镜像是容器的静态定义,而容器是镜像的动态实例。当你启动一个容器时,实际上是在镜像的基础上创建了一个可运行的实体。
镜像(Image)是一个只读的模板,它包含了运行容器所需的文件系统、环境变量、应用程序等。镜像可以看作是容器的基础。
容器(Container)是镜像的一个运行实例,它包含了应用程序及其依赖的环境。当你启动一个容器时,Docker会根据指定的镜像创建一个容器实例,然后运行这个容器。
docker compose up -d 和docker compose up的区别?
有-d,则启动容器后不会进入容器中,无-d则启动容器后会进入容器中,可以看到报出的运行信息,也可以用于查看容器接收到的用户登录等请求
docker-compose stop和docker compose down区别?
docker-compose stop 仅停止服务,而 docker-compose down 则会移除相关的资源,比如容器。
docker-compose stop 命令用于停止由 docker-compose 启动的服务,但并不会删除容器、网络、数据卷等资源。这意味着,通过 docker-compose stop 命令停止的服务可以通过 docker-compose start 重新启动。
docker-compose down 命令则会停止并移除由 docker-compose 启动的所有容器,网络,数据卷等资源。这意味着,通过 docker-compose down 命令停止的服务将无法通过 docker-compose start 重新启动,因为相关的资源已被删除。
我们来用命令行实现vulfocus靶场的某一个镜像,从创建容器到销毁容器的过程:
目标就它了,注意到容器内部端口为8080:
用docker images找到目标的镜像的名称:版本号或者镜像ID,然后用如下代码创建并启动容器,其中我们指定了tid选项,并命名容器为mytest ,并将外部12345端口映射到内部的8080:
docker run -tid --name mytest -p 12345:8080 vulfocus/log4j2-rce-2021-12-09:latest
查看,发现启动成功,注意到容器ID为a135febc244a:
这道题的靶场也能
IP:12345
访问到:
关闭容器:
docker stop a135febc244a
删除容器:
非特殊说明,本博所有文章均为博主原创。
共有 0 条评论