目录
参考文件:
一、简介
0、沙箱机制
1、Docker架构
二、docker的安装
1、Ubuntu系统
2、CentOS系统
三、docker命令
3.1 关于镜像的操作
(1)镜像的搜索
(2)镜像下载
(3)查看本地镜像
(4)删除本地镜像
3.2 容器的基本操作
3.2.1> 查看容器命令
3.2.2> 创建与启动容器
3.2.3> 宿主机和容器之间的拷贝
3.2.4> 目录挂载
3.2.5> 查看容器IP地址
3.2.6> 删除容器
具体示例:
(1) 创建容器:
(2) 查看运行的容器
# 注意 同一个镜像可以assign到多个容器上
(3) 停止容器
(4) 重启容器
(5) 删除容器
3.3 容器的保存
(1)进入容器
(2)保存
3.4 对容器操作
(1)创建一个有端口映射的容器
四、使用docker-compose编排镜像
五、更换docker源
六,搭建靶机
【实列】进入要搭建的环境的目录查看yml文件
七、应用部署
7.1 MySQL部署
(1)拉取mysql镜像
(2)创建容器
(3)进去mysql容器
(4)登录mysql
(5)远程登录mysql
7.2 tomcat部署
(1)拉取镜像
(2)创建容器
7.3 Nginx部署
(1)拉取镜像
(2)创建Nginx容器
7.4 Redis部署
(1)拉取镜像
(2)创建容器
(3)远程连接CentOS容器中的redis
八、迁移与备份
8.1 容器保存为镜像
8.2 镜像备份
8.3 镜像恢复与迁移
https://mp.weixin.qq.com/s/IEa9DfUiep33G9PGKRe9KQ
https://mp.weixin.qq.com/s/lNU9CQ5heATDw1AuwDTQlg
https://blog.csdn.net/Z_Grant/article/details/101076012
参考视频:
https://www.bilibili.com/video/BV1jz411q7f4?p=7
目录
参考文件:
一、简介
0、沙箱机制
1、Docker架构
二、docker的安装
三、docker命令
3.1 关于镜像的操作
(1)镜像的搜索
(2)镜像下载
(3)查看本地镜像
(4)删除本地镜像
3.2 容器的基本操作
3.2.1> 查看容器命令
3.2.2> 创建与启动容器
3.2.3> 创建与启动容器
3.2.4> 目录挂载
3.2.5> 查看容器IP地址
3.2.6> 删除容器
具体示例:
(1) 创建容器:
(2) 查看运行的容器
# 注意 同一个镜像可以assign到多个容器上
(3) 停止容器
(4) 重启容器
(5) 删除容器
3.3 容器的保存
(1)进入容器
(2)保存
3.4 对容器操作
(1)创建一个有端口映射的容器
四、使用docker-compose编排镜像
五、更换docker源
六,搭建靶机
【实列】进入要搭建的环境的目录查看yml文件
沙箱机制
- 1.沙箱是一个虚拟系统程序,沙箱提供的环境相对于每一个运行的程序都是独立的,而且不会对现有的系统产生影响.
- 2.沙箱具有非常良好的独立性、隔离性,所以能够搭建一些具有高风险的软件进行测试.
1.1> Docker包括三个基本概念 :镜像(Image)、容器(Container)、仓库(Respository)
1.2> 容器与镜像的关系类似于面向对象编程中的对象与类。
Docker | 面向对象 |
容器 | 对象 |
镜像 | 类 |
如图所示:
概念 | 说明 |
Docker 镜像(Images) |
Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。 |
Docker 容器(Container) |
容器是独立运行的一个或一组应用,是镜像运行时的实体。 |
Docker 客户端(Client) |
Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。 |
Docker 主机(Host) |
一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
Docker Registry |
Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。 一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。 通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。 |
Docker Machine |
Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
#先下载python(最好先换源)
sudo apt install python3
#安装pip
sudo apt install python3-pip
#安装docker
sudo apt-get install docker.io
#创建软连接
sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
#下载docker-compose
sudo apt install docker-compose
#开启docker
sudo systemctl start docker.service
sudo systemctl start docker.socket
直接挂载课程配套的CentOS7.x镜像
# yum包更新到最新
sudo yum update
# 安装需要的软件包,yum-util提供yum-config-manager功能,另外两个是devicemapper驱动驱动依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置yum源为aliyun
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker
sudo yum install docker-ce
# 安装后查看docker版本
docker -v
设置ustc的镜像
# ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共的服务。
https://lug.ustc.edu.cn/wikl/mirrors/help/docker
# 编辑文件
vi /etc/docker/daemon.json
# 在该文件中输入如下内容:
{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}
# 启动docker服务
systemctl start docker
# 查看状态
systemctl status docker
当前docker版本信息查询
$ docker version
$ docker search XXXX
$ docker pull XXXX
$ docker images
$ docker rmi 镜像名
# 查看正在运行的容器
$ sudo docker ps
# 查看所有容器
$ sudo docker ps -a
# 查看最后一次运行的容器
$ sudo docker ps -l
# 查看停止的容器
$ sudo docker ps -f status=exited
创建容器常用的参数说明:
创建容器命令:
$ sudo docker run
# 交互式方式创建容器:
$ sudo docker -it --name=容器名 镜像名称:标签 /bin/bash
注意:这时我们通过ps命令查看,发现看到的启动的容器,状态为启动状态
# 退出当前容器:
命令:exit
# 守护式方式创建容器:
$ docker run -di --name=容器名称 镜像名称:标签
# 登录守护式容器方式:
$ docker exec -it 容器名称(或者容器ID) /bin/bash
如果我们需要将文件拷贝到容器内可以使用cp命令(不管你的容器是停止,还是运行的都可以进行拷贝)
$ sudo docker cp 需要拷贝的文件或目录 容器名称:容器目录
也可以将文件从容器内拷贝宿主机上
$ sudo docker cp 容器名称:容器目录 需要拷贝的文件或目录
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
创建容器 添加 -v 参数 后边为 宿主机:容器目录,例如
$ sudo docker -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
如果你共享的是多级目录,可能会出现权限不足的提示。
这个因为CentOS中的安全模式selinux把权限禁止了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题。
我们可以通过以下命令查看容器运行的各种数据:
$ sudo docker inspect 容器名称(容器ID)
也可以直接执行下面的命令直接输出IP地址:
$ sudo docker inspect --format='{{.NetworkSettings.IPSddress}}' 容器名称(容器ID)
删除指定容器:
$ sudo docker rm 容器名称(容器ID)
================================================================================================
================================================================================================
================================================================================================
$ docker run -itd --nane=指定容器的名称 使用的镜像名
-i:表示以交互模式运行容器
-d:表示后台运行容器,并返回容器ID
-t:为容器重新分配一个伪输入终端;
$ sudo docker ps
$ docker stop 容器名/容器ID
$ docker restart 容器名/容器ID
$ docker rm 容器名/容器ID
docker exec -it 容器名/容器ID /bin/bash
对通过同一镜像创建的不同容器,操作之后,可以保存为一个新的镜像
------端口映射
$ docker run -itd -p 宿主机端口:容器端口 镜像名
访问宿主机的90端口就是nginx喽
docker 提供了一个命令行工具 docker-compose 帮助完成镜像的编排, 要使用 docker-compose , 需要先编写一个 docker-compose.yml
文件, yaml 是一种常用配置文件格
yml :是一个可读性高,用来表达数据序列的格式
参考文献:docker-compose详解
由于本来的源太慢了。。。。。,使用阿里的加速源。【容器镜像服务】
- 登录之后,提供一个URL
配置镜像加速器
针对Docker客户端版本大于 1.10.0 的用户通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
两个开源的项目:
【vulhub靶机说明:】
# 进入某一个漏洞/环境的目录
cd flask/ssti
# 自动化编译环境
docker-compose build
# 启动整个环境
docker-compose up -d
#每个环境目录下都有相应的说明文件,请阅读该文件,进行漏洞/环境测试。
#测试完成后,删除整个环境
docker-compose down -v
使用docker-compose build
编译环境,然后启动环境
yang@yang-machine:~/baji/vulhub-master/joomla/CVE-2017-8917$ sudo docker-compose up -d
Pulling mysql (mysql:5)...
5: Pulling from library/mysql
8f91359f1fff: Pull complete
6bbb1c853362: Pull complete
e6e554c0af6f: Pull complete
f391c1a77330: Pull complete
414a8a88eabc: Pull complete
fee78658f4dd: Pull complete
9568f6bff01b: Pull complete
76041efb6f83: Pull complete
ea54dbd83183: Pull complete
566857d8f022: Pull complete
01c09495c6e7: Pull complete
Digest: sha256:f7985e36c668bb862a0e506f4ef9acdd1254cdf690469816f99633898895f7fa
Status: Downloaded newer image for mysql:5
Pulling web (vulhub/joomla:3.7.0)...
3.7.0: Pulling from vulhub/joomla
5e6ec7f28fb7: Pull complete
cf165947b5b7: Pull complete
7bd37682846d: Pull complete
99daf8e838e1: Pull complete
ae320713efba: Pull complete
ebcb99c48d8c: Pull complete
9867e71b4ab6: Pull complete
936eb418164a: Pull complete
bc298e7adaf7: Pull complete
ccd61b587bcd: Pull complete
b2d4b347f67c: Pull complete
56e9dde34152: Pull complete
9ad99b17eb78: Pull complete
f0b49b0a34a7: Pull complete
bc8d2ddd1ca2: Pull complete
cc87e0e6b730: Pull complete
80c164075256: Pull complete
1bb70ad75826: Pull complete
b30d9e1dab0d: Pull complete
c7e4f22b689f: Pull complete
5093ee2098f3: Pull complete
Digest: sha256:8b38262a5bfd3e8f56415e369c0970a736e31d1138fb9fe0343f88435d43574d
Status: Downloaded newer image for vulhub/joomla:3.7.0
Creating cve20178917_mysql_1 ...
Creating cve20178917_mysql_1 ... done
Creating cve20178917_web_1 ...
Creating cve20178917_web_1 ... done
yang@yang-machine:~/baji/vulhub-master/joomla/CVE-2017-8917$
查看是否成功启动
访问测试是否成功
测试完成后,删除整个环境
$ docker-compose down -v |
$ sudo docker rmi 镜像ID |
参考文献:
https://blog.csdn.net/Z_Grant/article/details/101076012
https://mp.weixin.qq.com/s/IEa9DfUiep33G9PGKRe9KQ
https://mp.weixin.qq.com/s/lNU9CQ5heATDw1AuwDTQlg
参考视频:https://www.bilibili.com/video/BV1jz411q7f4?p=11
$ sudo docker pull centos/mysql-57-centos7
$ sudo docker run -di --name=tensquare_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=ROOT centos/mysql-57-centos7
$ sudo docker exec -it tensquare_mysql /bin/bash
$ sudo mysql -u root -p
连接宿主机的IP,指定端口为33306
参考视频:https://www.bilibili.com/video/BV1jz411q7f4?p=12
$ sudo docker pull tomcat:7-jre7
创建容器 -p 表示地址映射
$ sudo docker run -di --name=mytomcat -p 9000:8000 -v /usr/local/webapps:/usr/loacl/tomcat/webapps tomcat:7-jre7
参考视频:https://www.bilibili.com/video/BV1jz411q7f4?p=13
$ sudo docker pull nginx
$ sudo docker run -di --name=mynginx -p 80:80 nginx
参考视频:https://www.bilibili.com/video/BV1jz411q7f4?p=14
$ sudo docker pull redis
$ sudo docker run -di --name=myredis -p 6375:6375 redis
我们可以通过以下命令将容器保存为镜像
这样可以将已经部署好的容器保存为镜像,方便已经配置好环境的移植。
$ docker commit 容器名称 镜像名称
我们可以通过以下命令将镜像保存为tar文件
$ docker save -o 要保存的tar文件 镜像
首先我们先删除mynginx_img镜像,然后执行此命令进行恢复
$ docker load -i mynginx.tar
-i:输入文件
执行后再次查看镜像,可以看到镜像已经恢复了