阅读须知:
探索者安全团队技术文章仅供参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作,由于传播、利用本公众号所提供的技术和信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,如有侵权烦请告知,我们会立即删除并致歉,创作不易转载请标明出处.感谢!
大家好,我是 breeze, 鉴于自己对docker理解不好,于是特意来学习一下。
0x00 什么是docker
软件的打包技术,就是将算乱的多个文件打包为一个整体,打包技术在没有docker容器之前,一直是有这种需求的,docker打包出来的每个软件,称之为docker镜像。可以说整个IT领域,不管是哪个工种,都需要好好学习docker。
docker是CS架构
的程序,客户端控制服务端
来做各种事情。
镜像:images,是个压缩包文件,里面存放着安装好的程序。
容器:Container,Docker利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
0x01 docker的安装
这里只讲linux下的安装
#添加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
1.添加docker的gpg密钥,签名用的
2.添加docker的apt源(加快访问速度)
3.apt update 更新一下apt缓存
4.任意方式安装docker,由于我安装过了,就就不安装了。
sudo apt-get install docker docker-compose -y `或` sudo apt-get install docker.io
5.设为开机自启
systemctl enable docker
6.更改docker镜像库的源
cd /etc/docker
vim docker.json
# 添加如下内容,并保存退出
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
# 可以重启docker服务
systemctl restart docker
0x02 镜像基本命令
docker search #搜索镜像(只搜索官方仓库的,官方仓库地址:hub.docker.com)
比如搜索docker search php,就会在镜像库中搜索关于php的镜像
docker images 查看本地镜像列表
dcoker pull 拉取镜像
docker pull tomcat:latest
比如拉取固定版本的php,docker pull php:7.15
docker push 上传镜像,推送镜像,推到官方仓库,需要在本地登录一下官方账号
docker rmi
#删除镜像,rm image的意思,直接rm不加i表示要删除容器
,可以通过名称加版本来删除,或者直接通过镜像id值来删除
#docker rmi tomcat:latest 或者 docker rmi imageid值
#可以同时删除多个镜像:docker rmi tomcat:latest tomcat:jre17-temurin-jammy
#如果这个镜像处于运行状态的是删除不了的
,比如有容器在使用这个镜像,就不能删除镜像,比如
docker rmi nginx:1.16会报错
docker container ls 或者docker ps 查看镜像的运行状态
第一个就是容器值
docker save
#导出镜像(压缩包) docker save 镜像名称:版本 -o docker_nginx1.20.tar.gz
#docker save nginx:1.16 -o docker.nginx1.16.tar.gz
docker load
#导入镜像 docker load -i docker_nginx1.20.tar.gz,会自动解压并导入到docker服务中
0x03 容器常见命令
docker run 运行一个新容器
docker run -d -p 82:80 nginx:1.16
例如这个-p是指定端口的意思。82:20是端口映射
。例如后面的80是容器的端口,前面的82是运行docker的端口。
-d #放后台运行
-p 端口映射 #例子: -p 宿主机端口:容器端口
--name 指定容器的名字 # docker run -it --name jaden 镜像id或者名称
--link 关联另一个容器 # 了解即可
-e MYSQL_ROOT_PASSWORD #设置容器的一些属性,了解一下即可
-it #是给运行起来的这个容器分配一个终端,就可以进入到容器内部操作了
docker ps === docker container ls #参数: 默认之显示up状态的容器,-a查看所有容器,或者–all
docker stop 停止容器 #例子 docker stop 容器id或者容器名字
docker kill 杀掉容器
#强制关闭容器,尽量不要用,很容易就启动不了了
docker start 启动容器
#例子 docker start 容器id或者容器名字
docker restart 重启重启
#例子 docker restart 容器id或者容器名字
docker rm 删除容器
#例子 docker rm 容器id或者容器名字,同时删除多个,就空格隔开,处于up状态是不能直接删除的,强制删除是可以删除up状态的容器的,docker rm f 容器名称或者id
docker rm -f docker ps -a -q
#删除所有容器,-q是只显示容器id,反引号中的指令优先执行
docker top 查看容器内的进程
#例子docker top 容器id或者容器名字
docker stats 查看容器的资源占用情况
docker exec 进入容器
#例子: docker exec -it 容器id
或者容器名字
# 直接交互指令:docker exec -it 76738703b7b2 ls # 执行ls指令
# 进入终端:docker exec -it 76738703b7b2 /bin/bash
或者/bin/sh #/bin/bash打开一个终端窗口,exit指令退出终端
docker inspect -f ‘{{.Name}} => {{.NetworkSettings.IPAddress }}’ $(docker ps -aq) 可以查看所有容器的ip地址的,
容器的ip地址是从172.17.0.1
开始分的。docker容器类似于一个
微型的虚拟机,它占用的都是宿主机(物理机)的资源。在物理机上是可以看到容器所运行的程序的。每个容器都有自己的ip地址。
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}
{{.IPAddress}}{{end}}’ $(docker ps -aq) | grep “容器名称或者id”
0x04 实验安装wordpress
这里自动安装并启动了mysql5.7的服务。指定了root密码是123456,命名为mysql
自动拉取了wordpress5.6,并在86端口运行,与mysql链接。这么就不用自己配置数据库信息了。
访问86端口,成功进入安装界面
0x05 docker-compose
docker-compose是批量管理docker容器的工具,比如前面我们启动的wordpress项目,需要启动两个容器才行,有时候就是这样,需要同时启动多个容器来
完成你想要做的事情,但是到底启动多少个容器呢?比如wordpress那个,我们记不住,换一个机器不看笔记
很难起来,有了docker-compose就可以解决这个问题了。
apt install docker-compose
docker-compose -v 查看版本
以下是一个标准的yaml文件。我只是了解一下docker,并不用学这么深入,我就跳过了。
# 将如下内容拷贝到文件中保存退出,注意拷贝的时候,把里面我标记的注释去掉。
# 注意,下面这个文件内容是严格要求格式的,多一个空格都不行,通过缩进来表示等级关系,下面的这种配
置语法叫做yaml语法
version: '3' # docker-compose.yml的文件格式版本
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
image: wordpress:5.6
ports:
- "83:80" # 端口映射
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: 123456
docker-compose常见命令
#创建并启动
docker-compose up -d # 启动之后就可以通过浏览器访问了
#停止并删除
docker-compose down
#重启
docker-compose restart
#停止
docker-compose stop
#启动
docker-compose start