赞
踩
分享一个非常详细的网络安全笔记,是我学习网安过程中用心写的,可以点开以下链接获取:
docker是一个软件,是一个运行与linux和windows上的软件,用于创建、管理和编排容器;docker平台就是一个软件集装箱化平台,是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,也可以实现虚拟化,并且容器之间不会有任何接口。
我们一般安装软件的步骤是 下载压缩包----解压----安装-----运行,有时候我们觉得繁琐,效率不高,有没有一种技术可以快速安装运行软件呢,所以docker技术给我们提供了这样的便利
docker 远程镜像仓库网址:
https://hub.docker.com/https://hub.docker.com/
镜像就是别人安装好软件,我们可以直接从远程镜像仓库下载,运行,免去了解压流程;
下载到本地的叫本地镜像(images),下载好的镜像运行以后就叫容器(container);
或者远程镜像可以直接一个命令下载直接运行成容器;
镜像运行之后就叫容器
我们安装docker时客户端和服务端一起安装了,启动客户端以后可以用docker命令操作服务端从远程镜像仓库下载镜像,然后运行
- # centos7上面用yum安装
- 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
我在kali2022主机上进行演示安装
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add -
Warning 不用管,看到OK就说明成功了
echo 'deb https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian/ buster stable' | sudo tee /etc/apt/sources.list.d/docker.list
apt update
注:root用户不用加sudo
用apt-get install docker.io 安装 docker
- ## 安装docker
- sudo apt-get install docker.io
-
- ## 安装docker-compose
- apt-get install docker-compose -y
用 apt install docker-compose
- docker -v
- docker-compose -v
用于从远程仓库下载镜像,并直接运行(一个命令就可以下载,运行)
- -d #放后台运行
- -p 端口映射 #例子: -p 宿主机端口:容器端口
- --name 指定容器的名字 # docker run -it --name jaden 镜像id或者名称
- --link 关联另一个容器 # 了解即可
- -e MYSQL_ROOT_PASSWORD #设置容器的一些属性,了解一下即可
- -it #是给运行起来的这个容器分配一个终端,就可以进入到容器内部操作了
-d ## 后台运行
-p ## 指定端口映射
因为每个镜像他都是有自己的端口的比如nginx镜像默认是80端口,这个端口跟本机端口是两回事,我们需要用本机的端口进行映射,比如把本机80端口映射到Nginx的80端口;
docker run -d -p 80:80 nginx
Nginx已经下载好,并运行起来了
浏览器访问192.168.31.20:80
注意:本机的80端口映射给了上一个下载的Nginx,这个1.16版本的话本机81端口映射给镜像的80端口
docker run -d -p 81:80 nginx:1.16
Nginx1.16 已经下载好,并运行起来了
浏览器访问192.168.31.20:81
大家有没有发现下载的时候有一句提示
Unable to find image "nginx1.16" locally
是因为docker run命令下载镜像的时候先判断这个镜像在本地存不存在(有没有已经下载好),如果没有则从远程仓库下载,如果本地有,则直接运行本地下载好的镜像
用于搜索镜像,有时候想下载镜像,但想看看有有哪些镜像,就可以用这个命令去查看
- docker search nginx
- docker search httpd
- docker search mysql
下载的时候就可以下载自己想下载的镜像了,比如
- docker run -d -p 3306:3306 mariadb
- # 不指定版本号默认下载最新的
查看本地镜像列表(下载了哪些镜像)
因为我就下了两个,所以就显示两个
有个 IMAGE ID 就是这个镜像的ID值
(docker run 命令时下载直接运行镜像,而我们只想下载,不想运行怎么办?)
docker pull 作用把远程镜像拉取到本地
docker pull httpd
如果不指定版本号默认下载最新版本
docker imges 查看发现已经下载到本地了
#上传镜像,推送镜像,推到官方仓库,推送不是那么简单的,不然早就满了,需要在本地登录一下官方账号才能推,后面再演示
感兴趣自己了解一下吧,不多讲了,docker 镜像仓库网址
remoove iamge 删除本地镜像(注意已经运行的镜像不能删除,比如我删除已经运行的nginx)
docker rmi nginx:1.16
报错了说这个镜像不能删除,因为容器42ccd25441d9 是 被镜像 dfcfd8e9a5d3 运行起来的 ;
镜像 dfcfd8e9a5d3 指的是 nginx:16(docker images 可以查看镜像ID) ,他运行起来以后叫容器 分配容器ID;
注意:镜像是镜像,容器是容器,不是说镜像运行起来以后身份变了成了容器;而是镜像运行起来以后镜像还在,可以说产生了一个容器,所以说一个镜像可以运行多个独立的容器
删除镜像可以用名字,也可以用他的IMAGE ID
- docker rmi httpd
- 或
- docker rmi 7860e7628717
可以同时删除多个镜像:
格式就是如下,通过空格隔开可以删除多个容器
docker rmi tomcat:latest tomcat:jre17-temurin-jammy httpd mysql
导出镜像,如果我们想要把镜像导出,放到另一个主机里导入然后运行,比如:
docker save nginx:1.16 -o docker.nginx1.16.tar.gz
导入镜像,可以导入导出的镜像,
注:因为我nginx:1.16 一直运行这而且已经在本地存在,所以我得删除才能导入,要不然呢或冲突的
已经删除了nginx:1.16 现在可以导入刚才导出的了(会自动解压的)
docker load -i docker.nginx1.16.tar.gz
run 作用不仅是从远程仓库下载并运行镜像,我们说过他会先判断这个镜像在不在本地,不在本地的话再从远程仓库下载运行,所以本地镜像可以也用run 命令运行
比如说运行刚导入的nginx:16
docker run -d -p 83:80 nginx:1.16
已经运行起来了,可以访问看看
查看已经运行的容器列表
docker ps =========== docker container ls
-a ## all 的意思,显示所有容器(运行起来以后停掉的也算容器)
CONTAINER ID : 容器ID,删除容器都是通过ID或者NAMES删除的;
IMAGES:镜像,就是从哪个镜像启动的
CREATED:什么时候创建的
STATUS:状态,up 表示在运行,Exited表示停止运行了,上面Nginx1.16有两个说明一个镜像可以多次运行称为多个容器;
NAMES:表示镜像列表,运行的时候可以--name参数起名字,如果不起名字就随机分配一个名字;我们没有起名字所以NAMES都是随机的
-q ## 只显示容器的ID
docker ps -a ## 列出所有容器的详细信息(已经运行的+运行完停掉的)
docker ps -q ## 只列出容器的ID号
docker ps -a -q ## 列出所容器的ID号
停止运行的容器(只能根据container ID 或者 NAMES 删除)
docker stop c0a4f676add2
表示停止成功了
停止所有在运行的容器
docker stop `docker ps -q`
启动容器(根据容器的ID或者名字)
先 docker ps -a 查看一下,哪些容器没启动,全都没启动,因为上一步我用 docker stop `docker ps -q`停掉了所有容器
docker start e932acc39242
docker ps 查看一下有没有启动成功,发现已经启动了,就在 15秒之前
重启容器(根据容器的ID或者名字)
docker restart e932acc39242
删除容器,只能删除已经停掉的容器(docker rm -f 强制删除也能删除在运行的容器)
先 docker ps -a 查看所有容器,根据ID号(或者NAMES)删除没在运行的容器
docker rm 容器id或者容器名字,同时删除多个,就空格隔开,处于up状态是不能直接删除的,强制删除是可以删除up状态的容器的
docker rm -f `docker ps -a -q` #删除所有容器,-q是只显示容器id,反引号中的指令优先执行
查看容器内的进程(根据容器的ID或者名字)
查看容器的资源占用情况
docker stats e932acc39242
4-9 docker exec
进入容器内部
docker exec -it 容器id或者容器名字
# 直接交互指令:docker exec -it 76738703b7b2 ls # 执行ls指令
# 进入终端:docker exec -it 76738703b7b2 /bin/bash或者/bin/sh #/bin/bash打开一个终端窗口,exit指令退出终端,但是docker容器内容一般不会安装额外的软件,所以导致大量的指令是用不了的,比如ifconfig、ps、ip addr等
一般项目中一个容器还不够,则需要多个容器,难道就一个个下载,运行吗?这样还是麻烦,有没有一种办法,同时启动多个容器呢?那就是通过docker-compose 技术可以做到同时启动多个容器
- yum install epel-release.noarch -y
- yum install docker-compose -y
-
- #kali安装docker-compose
- apt install docker-compose -y
- # 查看版本
- docker-compose -v
这里给大家补充个点 systemctl restart docker 重启docker服务会自动关闭所有的容器。
- #启动容器的时候,如果加上了--restart=always,那么重启服务之后,这个容器会自动启动
- docker run -it -d --restart=always nginx:1.16 # 实现了开机自启动的效果
想要启动多个容器,则需要配置一个docker-compose.yml文件
# 为了避免端口冲突,我们可以先关闭所有docker容器
- docker stop `docker ps -a -q`
- # 为了演示方便,我们可以先创建一个wordpress文件夹,进入到里面创建一个docker-compose.yml名字的文件
- mkdir wordpress
- cd wordpress/
- touch docker-compose.yml
- vim docker-compose.yml
# 将如下内容拷贝到文件中保存退出,注意拷贝的时候,把里面我标记的注释去掉。
# 注意,下面这个文件内容是严格要求格式的,多一个空格都不行,通过缩进来表示等级关系,下面的这种配置语法叫做yaml语法
- version: '3' # 版本随便起名字
- services: ## 固定格式
- db: #容器名称,可以随便指定名字
- image: mysql:5.7
- restart: always # 开机自启动的意思
- environment: ## 一些配置参数
- MYSQL_ROOT_PASSWORD: 123456
- MYSQL_DATABASE: wordpress
- MYSQL_USER: wordpress
- MYSQL_PASSWORD: 123456 # 和下面的WORDPRESS_DB_PASSWORD值要对应上
- wordpress:
- depends_on: ## 对db容器关联,因为wordpress需要数据库
- - db
- image: wordpress:5.6
- ports:
- - "83:80" # 端口映射
- restart: always
- environment:
- WORDPRESS_DB_HOST: db
- WORDPRESS_DB_USER: wordpress
- WORDPRESS_DB_PASSWORD: 123456
- #创建并启动
- docker-compose up -d # 启动之后就可以通过浏览器访问了
- #停止并删除
- docker-compose down
- #重启
- docker-compose restart
- #停止
- docker-compose stop
- #启动
- docker-compose start
有了docker-compose.yml配置文件,可以使用docker-compose up -d 指令按照配置文件里的容器和配置项去下载,执行相应的容器
注意:执行 docker-compose up -d 的时候必须在这个配置文件路径下运行,如果别的路径则不能识别出来,
创建一个wd文件夹,进入以后vim docker-compose.yml(这个文件夹不存在的,会自动创建)
把配置内容复制粘贴到里面
查看配置好的内容
然后就在有docker-compose.yml目录下运行即可
yml语法格式校验很严格的,我的估计格式有问题,所以报错了,大家可以自行百度一下其格式;
配置文件格式无误后,可以按照配置文件下载相应镜像并运行起来了,项目中通过这个方法,可以很便捷的启动我们需要的容器了;
关于docker常见操作就这些,如果遇到问题欢迎留言,或者技术交流
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。