Docker搭建Web测试环境一般步骤及相关命令总结

0x00 前言

最近学习Docker中web环境的搭建,所以记录一下搭建过程中需要用到的命令以及相关步骤,本次搭建的数据库是从别的主机导出来的,所以还会涉及到一点SQL文件的导入和导出相关操作。

0x01 pull lamp镜像

查找Docker Hub上的lamp镜像

[root@Peithon ~]# docker search lamp
NAME                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
linode/lamp                            LAMP on Ubuntu 14.04.1 LTS Container            144                                     
tutum/lamp                             Out-of-the-box LAMP image (PHP+MySQL)           97                                      
greyltc/lamp                           a super secure, up-to-date and lightweight L…   85                                      [OK]
fauria/lamp                            Modern, developer friendly LAMP stack. Inclu…   41                                      [OK]
janes/alpine-lamp                      lamp base on alpine linux                       35                                      [OK]
nickistre/ubuntu-lamp                  LAMP server on Ubuntu                           26                                      [OK]
mattrayner/lamp                        A simple LAMP docker image running the prere…   22                                      [OK]
nickistre/centos-lamp                  LAMP on centos setup                            21                                      [OK]
nickistre/ubuntu-lamp-wordpress        LAMP on Ubuntu with wp-cli installed            9                                       [OK]
lioshi/lamp                            Docker image for LAMP + MySql under debian      9                                       [OK]
x4j5/silverstripe-lamp                 lamp stack for silverstripe development (Deb…   5                                       [OK]
nickistre/ubuntu-lamp-xdebug           LAMP on Ubuntu with xdebug installed            4                                       [OK]
sminnee/silverstripe-lamp              Docker image for SilverStripe LAMP stack tha…   4                                       
nickistre/centos-lamp-wordpress        LAMP on CentOS setups with wp-cli installed     3                                       [OK]
dell/lamp-base                         Base LAMP Image for dependant images            3                                       
nickistre/centos-lamp-xdebug           LAMP on centos with xDebug                      3                                       [OK]
shelleyma/lampp2                       lampp from github                               2                                       [OK]
gizra/drupal-lamp                      A base LAMP docker file for drupal projects.    2                                       [OK]
theodotos/ubuntu-lamp                  A LAMP (Linux/Apache/MariaDB/PHP) image base…   2                                       
lead4good/lamp-php                     LAMP Stack PHP                                  1                                       [OK]
ready2order/lamp                       LAMP                                            1                                       
thinkiq/lamp                           ThinkIQ Lamp image                              0                                       [OK]
davefx/trusty-lamp-selenium-headless   Ubuntu 14.04 system with configured LAMP ser…   0                                       [OK]
greyltc/lamp-aur                       LAMP stack (in Arch with php7) with AUR acce…   0                                       [OK]
lead4good/lamp-mysql                   LAMP-Stack MySQL                                0                                       [OK]

拉取镜像到本地

[root@Peithon ~]# docker pull tutum/lamp

0x02 网络模式的选择

使用docker run创建Docker容器时,需要根据自己的需要选择容器的网络模式,在Docker中有四种网络模式可以供我们选择,通常使用birdge模式比较多见。

1). bridge模式:使用–net=bridge指定,默认设置

当我们的Docker server启动时,会在主机创建一个docker0的虚拟网桥,当我们选择使用bridge模式,会为每一个容器分配Network Namespace、设置IP等,每个bridge模式的容器之间可以相互通信,主机和容器之间可以相互通信,但是外部无法访问到这些容器,而docker0就类似于交换机一样的功能。

# [root@Peithon ~]# docker run -d --name=webtest --net=bridge 3d49e175ec00

可以看到会从172.17.0.0/16这个网段随机分配一个没有被使用的ip,因为网络模式默认是使用bridge模式的,所以可以不用使用命令来指定。

使用docker network inspect bridge可以查看该网络模式下有哪些容器

2). host模式:使用–net=host指定

启动容器时使用host模式,容器将不会拥有自己独立的Network Namespace和IP,而是和主机共享同一个Network Namespace,容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

[root@Peithon ~]# docker run -d --name=webtest3 --net=host 3d49e175ec00

下面是主机的

查看网络模式为host的信息

通过这种方式创建的容器,容器发生端口冲突

3). none模式:使用–net=none指定(也可以使用–network none)

该模式有自己独立的Network Namespace,但不为Docker容器进行任何网络配置,需要自己手动添加。

[root@Peithon ~]# docker run -d --name webtest4 --network none 3d49e175ec00

这种模式下的容器外部无法访问,可以放一些重要的文件或者工具,这样只有本地可以访问,安全性会比较高。

4). container模式:使用–net=container:NAMEorID指定

指定新创建的容器和已经存在的一个容器共用一个Network Namespace,而不是和宿主机共享,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。

[root@Peithon ~]# docker run -d --name webtest5 --network container:webtest 3d49e175ec00

可以看出webtest5webtest是共享网络的。

本次搭建将使用bridge模式,并将上面测试所建容器删除

0x03 创建容器,并将80端口转发到宿主机的8001端口

[root@Peithon ~]# docker run -d --name test1 -p 8001:80 tutum/lamp

通过将容器的端口转发到宿主机,在宿主机上可以访问本机的端口来访问Docker容器中的服务

在防火墙开放8001端口,使外部网络也能对其进行访问

[root@Peithon ~]# firewall-cmd --zone=public --add-port=8001/tcp --permanent
[root@Peithon ~]# firewall-cmd --reload #重启firewall

0x04 主机和容器之间文件的拷贝

1).将本地的/opt/src/Web1下的html文件拷贝到test1容器中的/var/www目录下

docker cp 宿主机中要拷贝的文件名及其路径 容器名:要拷贝到容器里面对应的路径

在宿主机执行命令

[root@Peithon ~]# docker cp /opt/src/Web1/html test1:/var/www

2).将test1容器中的/var/www目录下的html文件拷贝到本地的/opt/src/Web1

在宿主机执行命令

[root@Peithon ~]# docker cp test1:/var/www/html /opt/src/Web1

拷贝命令不管容器有没有启动都生效

通过docker cp将宿主机上的站点文件拷贝到Docker容器中

0x05 从宿主机的数据库中导出SQL文件,导入到Docker中的数据库中

mysqldump -h localhost -u root -p 数据库名 >/opt/src/Web1/dbsqlfile.sql

[root@Peithon ~]# mysqldump -h localhost -u root -p ctf1003 >/opt/src/Web1/dbctf1003.sql

输入密码,到此将mysql数据库中的ctf1003数据库导出到dbctf1003.sql文件中了

Docker中的数据库默认没有密码的,所以还需要我们设置一下密码

#登录数据库之后
>set password for 'root'@'localhost'=password('123456');
>create database ctf1003;

将SQL文件导入数据到Docker容器中的数据库中

[root@Peithon ~]# mysql -h localhost -u root -p ctf1003 < /opt/src/Web1/dbctf1003.sql

输入密码,然后就OK了

0x06 提交容器打包成新的镜像

[root@Peithon ~]# docker commit -a "Peithon" -m "Web 测试" e61c66465773 ubuntu:web500

e61c66465773 :CONTAINER ID
ubuntu:web500 ->新镜像的REPOSITORY:TAG

查看刚打包的镜像

0x07 上传到Docker Hub上

1). 标记镜像

docker tag image username/repository:tag

[root@Peithon ~]# docker tag ubuntu:web500 peithon/ubuntu:web500

2).Docker Hub账号登录

[root@Peithon ~]# docker login

然后输入用户密码,登录成功之后将镜像标记然后上传。

3).将标记镜像上传到存储库

docker push username/repository:tag

[root@Peithon ~]# docker push peithon/ubuntu:web500

登录到Docker Hub上查看是否上传成功

至此就基本完成了环境的搭建

-------------本文结束感谢您的阅读-------------

本文标题:Docker搭建Web测试环境一般步骤及相关命令总结

文章作者:Peithon

发布时间:2018年07月22日 - 02:07

最后更新:2018年10月13日 - 08:10

原始链接:https://peithon.github.io/2018/07/22/docker-bridge-test/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。