docker使用教程

0x01 获取镜像:

1
docker pull ubuntu

0x02 启动容器

该命令使用Ubuntu镜像启动一个容器:

1
docker run -it ubuntu /bin/bash

参数说明

i:交互式操作;

-t:终端;

ubuntu:ubuntu镜像

/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式shell,因此使用的是/bin/bash

退出终端直接输入exit

启动已停止运行的容器

1
docker ps -a

使用docker start启动一个已停止的容器:

1
docker start <container id>

0x03 后台运行

可以使用-d指定容器的运行模式:

1
docker run -itd --name ubuntu-test ubuntu /bin/bash

注:加了-d参数默认不会进入容器,想要进入容器需要使用指令docker exec

0x04 停止一个容器:

1
docker stop <容器 ID>

停止的容器可以通过docker restart重启:

1
docker restart <容器 ID>

0x05 进入容器

在使用-d参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

docker attach

docker exec:推荐使用docker exec命令,因为此退出容器终端,不会导致容器的停止。

0x06 导出和导入容器

6.1 导出容器

如果要导出本地某个容器,可以使用docker export命令

1
docker export <container ID> > xxx.tar

6.2 导入容器快照

可以使用docker import从容器快照文件中再导入为镜像,一下实例将快照文件ubuntu.tar导入到镜像test/ubuntu:v1

1
cat docker/ubuntu.tar | docker import - test/ubuntu:v1

也可以通过指定URL或者某个目录来导入,例如:

1
docker import http://example.com/exampleimage.tgz example/imagerepo

0x07 删除容器

删除容器使用docker rm命令

1
docker rm -f <container ID>

0x08 运行一个web应用

例:在docker容器中运行一个Python Flask应用来运行一个web应用

1
2
docker pull training/webapp #载入镜像
docker run -d -P training/webapp python app.py

参数说明:

-d:让容器在后台运行;-P:将容器内部使用的网络端口随机映射到我们使用的主机上

0x09 实战中docker相关的实践

容器和mysql日志恢复

1.服务器镜像sha256值是多少?

SHA256:327fd99f3e48231bec578755859f0f321982274c83d02910eadc7701edbd2e6a

2.服务器中部署数据库为?

使用docker container ls -a命令查看docker容器,发现是Mysql数据库,为进一步验证使用docker inspect mysql查看容器的配置信息

3.数据库使用了哪个端口?

端口号33060

4.数据库root用户的密码是多少?

密码123456

5.“林小某”的身份证号是多少?

注:这里需要用Mysqlbinlogbinlog日志进行恢复

因为容器启动后数据库中姓名字段没有林小某,考虑到需要数据恢复,针对binlog日志进行单独的数据恢复,另外要注意,如果启动容器,原始的binlog会被删除并重新生成

上面两张图,是容器启动后的目录和未启动前的对比(binlog.000001~binlog.000003),在binlog.000001中,使用emeditor选择utf-8编码打开后,能搜到林小某的身份证号330…

通过mysqlbinlog命令将日志生成sql语句

查看sql数据内容部分为base64编码,使用mysqlbinlog命令解码输出:

1
mysqlbinlog --base64-output=decode-rows -v binlog.000001 > /root/123.txt

查看导出的123.txt,确定是被删除的数据