这篇文章上次修改于 741 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

0x01 安装Docker

yay -S docker

每次使用docker命令的时候都得添加sudo权限,否则就会报错: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.38/images/json: dial unix /var/run/docker.sock: connect: permission denied ,因此,需要设置一下用户权限

# 创建docker组,有的会提示已经存在
sudo groupadd docker 
# 将当前用户添加到docker组
sudo gpasswd -a 你的用户名 docker 
# 重启生效,如果还是不行,就重启系统
sudo systemctl restart docker 

0x02 优化Docker

2.1 换源

# 没有就创建这个文件,如果无法编辑,用命令chmod 777 daemon.json添加权限
vim /etc/docker/daemon.json 
# 内容如下:
{
 "registry-mirrors": [
  "http://hub-mirror.c.163.com"
  ]
}
# 配置好了以后重启生效
sudo systemctl daemon-reload
sudo systemctl restart docker

如果需要更可靠的源,可以上阿里云申请一个自己的源,官网地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,左边菜单栏:镜像中心——镜像加速器,然后就能看到一个专属于你的加速地址

2.2 图形管理界面

官网地址:DockStation - Developing with Docker has never been so easy and convenient

DockStation是一个Docker 图形化客户端管理工具,图形化界面在 Linux 上还是比较方便的,感兴趣的同学可以体验一下:

0x03 安装docker compose

官网地址:https://github.com/docker/compose/releases

# 注意版本更新,我安装时版本为1.28.5
curl -L https://github.com/docker/compose/releases/download/1.28.5/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 给docker-compose执行权限
chmod +x /usr/local/bin/docker-compose

# docker-compose 基础命令
# 基本操作 
docker-compose up -d 

# 关闭并删除容器 
docker-compose down 

# 开启|关闭|重启已经存在的由docker-compose维护的容器 
docker-compose start|stop|restart 

# 运行当前内容,并重新构建 
docker-compose up -d --build

0x04 基础命令

# 搜索镜像
docker search 关键词

#下载镜像
docker pull 镜像名

# 查看已下载的镜像列表
docker image ls

# 创建并使用容器
docker run -it --name 容器名 镜像名/镜像ID /bin/bash

# 查看当前容器
docker ps -adocker ps -a

# 统计信息
docker stats

# 启动容器
docker start 容器名/容器ID

# 重启容器
docker restart 容器名/容器ID

# 终止容器
docker stop 容器名/容器ID

# 终止所有容器
docker stop $(docker ps -aq)

# 连接容器
docker exec -it 容器名/容器ID /bin/bash

# 删除容器
docker rm 容器名/容器ID

# 删除所有容器
docker rm $(docker ps -aq)

# 删除镜像
docker rmi 镜像名/容器ID

# 删除所有镜像
docker rmi $(docker images -q)
    
# 端口映射:部署一个容器,并将80端口映射到宿主机的8000端口上
# 可以使用--name自定义部署的容器名
docker run -d -p 8000:80 --name 容器名 镜像名

# 也可以直接通过镜像部署
docker run -d -p 8000:80 镜像名

# dockerfile 部署镜像
docker build -t 自定义镜像名称

# docker-compose 部署
docker-compose up -d

# 构建新的镜像
docker commit -a "提交的镜像作者" -m "提交时的说明文字" 容器的ID 要创建的新的镜像
docker commit -a "国光" -m "wordpress_phpmyadmin" d64655e87ccc wordpress_phpmyadmin:v1

# 保存离线镜像
docker save -o 镜像文件名.tar 要保持的镜像
docker save -o wordpress_phpmyadmin.tar wordpress_phpmyadmin:latest

# 导入离线镜像
docker load --input 镜像文件名.tar
docker load --input wordpress_phpmyadmin.tar

# 挂载卷,以下是例子
docker run -d -p 9088:80 --name wordpress_phpmyadmin -v "`pwd`/mysql":/var/lib/mysql/ -v "`pwd`/app":/app/ wordpress_phpmyadmin:latest

0x05 Docker靶场操作中的常用命令

# 基本操作 
docker run -d -p 物理端口1:容器端口1 -p 物理端口2:物理端口2 --name 容器名 <image-name>:<tag> 
docker exec -it 容器名/ID bash 

# 磁盘挂载 
docker run -d -p 8080:80 -v 本机路径:容器路径 --name 容器名 <image-name>:<tag> 

# 容器打包镜像 
docker commit -a "作者" -m "备注" 容器ID <image-name>:<tag> 

# 物理机拷贝到容器 
docker cp test.txt 容器ID:/var/www/html 

# 容器拷贝到物理机 
docker cp 容器ID:/var/www/html/test.txt 物理机路径 

# 查看容器 
docker ps -a --no-trunc 

# 停止所有容器 以此类推 
docker stop $(dokcer ps -aq) 

# 将容器打包成规范的镜像 
docker commit <exiting-Container> <hub-user>/<repo-name>[:<tag>] 

# 将镜像修改成规范的镜像 
docker tag <existing-image> <hub-user>/<repo-name>[:<tag>] 

# 登录 Docker Hub 
docker login 

# 上传推送镜像到公共仓库 
docker push <hub-user>/<repo-name>:<tag> 

# 当前目录的 Dockerfile 创建镜像
docker build -t <image-name>:<tag> .

# 指定文件构建镜像 
docker build -f /path/to/a/Dockerfile -t <image-name>:<tag> .

# 将镜像保存 tar 包 
docker save -o image-name.tar <image-name>:<tag> 

# 导入 tar 镜像 
docker load --input image-name.tar 

0x06 参考

https://help.aliyun.com/document_detail/60750.html

https://www.sqlsec.com/2019/10/docker2.html#toc-heading-6

https://www.sqlsec.com/2020/11/docker4.html#toc-heading-10