首先介绍下Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
1.下载安装
Docker官网 https://www.docker.com/
下载地址 https://oomake.com/download/docker-windows ps:下载之后貌似win7安装不上,我这公司电脑是win7的打不开安装程序,可能是需要win10吧.
win7下载地址 https://get.daocloud.io/toolbox/
安装过程中会有选项安装组件 如有安装git不用勾选 VirtualBox也是 , 如果全选安装之后会出现如下软件:
Oracle VM VirtualBox
Git
Boot2Docker for Windows
首先需要配置git环境变量 这步骤不在详细介绍 命令行中 输入 git 显示即说明成功
2. 启动DOCKERT
在命令窗口中,切到docker的安装目录下
双击红色框中文件 等待..... 如果报错 则吧boot2docker.iso文件复制到 报错目录即可
成功之后会显示小鲸鱼 图片如下
3. 搭建CentOS服务器环境
3.1 验证Docker是否启动
打开CMD,输入
1 |
docker version |
如果输出版本信息的话,表示Docker启动成功。
3.2 拉取CentOS镜像
输入命令
1 |
docker pull centos |
以上命令会到Docker官方库里去下载最新的CentOS镜像,但是因为是国外的站点,所以下载会很慢。这里可以使用国内的镜像加速。
1 |
docker pull registry.docker-cn.com/library/centos |
使用镜像加速下载镜像时,必须输入完整的库名和镜像名。
由于CentOS7在Docker上有一个DBUS的BUG,所以这里建议下载CentOS6的镜像。只需在镜像名后面加上TAG既可。
1 |
docker pull registry.docker-cn.com/library/centos:6 |
3.3 运行CentOS容器
镜像下载好之后,输入命令
1 |
docker images |
可以看到已经有一个镜像了。
然后用这个镜像运行起一个容器
1 2 3 |
docker run -i -t -d -p 20:20 -p 21:21 -p 80:80 -p 443:443 -p 888:888 -p 8888:8888 --privileged=true -v /root/www:/www b5e5ffb5cdea //可能出现挂载失效状况下面解释 docker ps 查询容器id 下面语句可以连接xshell之后执行 docker exec -it 1c5a8ee342b6 /bin/bash |
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
- -it: 表示使用终端模式运行容器
- -d:运行程序直接返回守护进程模式运行
- -P 将容器的80端口映射到主机随机端口。
- -p 80:80 将容器的80端口映射到主机的80端口
- -v 映射主机目录和容器目录
- b5e5ffb5cdea 表示镜像的ID
- 1c5a8ee342b6 表示docker ps查出的容器id
- /bin/bash 表示镜像运行起之后要执行的程序
- –name=”nginx-lb”: 为容器指定一个名称;
- /root/www:/www 表示将真机的/root/www文件夹映射到docker容器的/www上去。
- --privileged=true 表示在运行容器的时候,给容器加特权,不然容器没有写文件的权限,会导致安装失败。
- docker exec 表示在容器里执行一个命令,可以执行bash进入交互式
使用 git-bash.exe 的 控制台 报错 $ docker exec -ti nginx /bin/bash the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty' 换个 cmd.exe 就解决问题了,或者先执行docker-machine shh 进入宿主机在使用 docker exec -it fb95852e3f16(容器ID) /bin/bash 进入容器
可以看到命令提示符已经变成Linux样式了,表示已经成功在容器里运行起了CentOS。
如果挂载失败,把-v参数移动到--name前面即可
4.使用xshell 连接docker
windows的cmd窗口 功能太少,使用xshell连接docker
需要设置Oracle VM VirtualBox的端口转发, 设置->网络->高级->端口转发
连接xshell 账号 docker 密码 tcuser
连接成功会显示小鲸鱼 logo
接下来使用上面讲的进入bash 执行下面语句
docker exec -it 1c5a8ee342b6 /bin/bash
5.Centos 安装需要的东西
由于docker中是一个纯净版本,我们首先需要给他升级并且安装必要的软件。
1 |
yum check-update -y && yum update -y && yum install initscripts screen wget -y |
由于宝塔 Linux 管理面板是可视化操作,其傻瓜式的安装方法以及简洁的控制界面让我欲罢不能,索性装个试试看。
1 |
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh && sh install.sh |
6.安装easywoole
准备学习easyswoole框架,安装方式提供了docker安装方式,按照手册安装
1 |
docker pull encircles/easyswoole3:latest |
在国内使用Docker Hub的话就特别慢,为此,我们可以给Docker配置国内的加速地址。然后到Shell中去依次执行:
阿里云镜像地址 https://cr.console.aliyun.com/cn-hangzhou/mirrors
1 2 3 4 |
docker-machine ssh default sudo sed -i "s|EXTRA_ARGS='|EXTRA_ARGS='--registry-mirror=加速地址 |g" /var/lib/boot2docker/profile exit docker-machine restart default |
这样重启Docker后就可以用国内的镜像来加速下载了。
试一下下载一个看看快不快:
1 |
docker pull encircles/easyswoole3:latest |
启动容器
1 |
docker run -d -it -p 9501:9501 --name containerName encircles/easyswoole3:latest |
手册上说这地方是不对的:此时可以访问 http://localhost:9501
看到框架的欢迎页面,表示容器运行成功
【注意,Docker容器是在VirtualBox的虚拟机里面,不是在Windows里面,所以不能用127.0.0.1或者localhost访问】
通过docker-machine env可以看到,我这里是192.168.99.100:2376 , 所以连接地址为http://192.168.99.100:9501/
成功:
7.安装mysql
1 |
docker pull mysql |
下载完镜像,我们运行一个容器:
1 |
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123 mysql:latest |
接下来我们打开windows下的mysql客户端,服务器地址填docker虚拟机的IP地址,通过docker-machine env可以看到,我这里是192.168.99.100,然后用户名root,密码123,这样我们就可以连接到docker容器里面的mysql了。
8.使用Dockerfile镜像安装
写好dockerfile文件php环境样例 文件名字为Dockerfile
生成docker镜像 docker build -t qq/ . -t 是tag 标签名 不要忘记了后面有个点当前的意思,会自动加载当前目录下的Dockerfile文件
docker images 查阅镜像id
生成容器 docker run -i -t -d -p 9501:9501 --privileged=true -v /root/www:/www --name newsw 275f57403e55
9.查看容器信息连接两个容器
docker inspect 容积或镜像ID
可以使用--link 参数去实现 , 官方不建议这么做 , 并且以后会删除这个参数
现在使用netwok
1.创建网络
1 |
docker network create php-mysql |
2.启动MySQL数据库
1 |
docker run -d -p 3306:3306 --name mysql --network php-mysql --network-alias mysql -e MYSQL_ROOT_PASSWORD=root mysql:latestd |
3.启动php环境
1 |
docker run -i -t -d -p 9501:9501 --privileged=true -v /root/www:/www --name easyswoole --network php-mysql --network-alias easyswoole 1a6d8e312083 |
4.验证在容器中是否能与数据库通信
1 2 3 4 5 6 7 8 9 |
docker@default:/root/www/Dockerfile/mysql$ docker exec -it dd062c6da146 /bin/bash root@dd062c6da146:/www# ping -w 2 mysql PING mysql (172.18.0.2) 56(84) bytes of data. 64 bytes from mysql.php-mysql (172.18.0.2): icmp_seq=1 ttl=64 time=0.275 ms 64 bytes from mysql.php-mysql (172.18.0.2): icmp_seq=2 ttl=64 time=0.135 ms --- mysql ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 0.135/0.205/0.275/0.070 ms root@dd062c6da146:/www# |
说明:
如果出现 bash: ping: command not found
1 2 |
root@dd062c6da146:/www# apt-get update apt-get install iputils-ping |
如果能够ping通说明在php容器中可以使用msyql数据库
附录:
安装流程参考 https://www.cnblogs.com/linjj/p/5606687.html
docker命令学习 https://blog.csphere.cn/archives/22
Comments | NOTHING