Docker

以下纯属个人理解:

  1. Docker就是一种虚拟机,将环境打包成镜像,等于做了一个Linux系统裁剪。
  2. 镜像就是我们安装系统的镜像,里面包含了你的代码和环境。
  3. 容器就是一个虚拟机,你可以用一个镜像创建多个容器,等于就是安装了多个虚拟机。
  4. 然后用docker exec就可以进入容器执行命令,等于就是开了一个shell。但是有点不同的是,你在前台跑的命令,哪怕你关掉当前“页面”(可能是shell或者cmd,看在哪里运行的docker),命令还是在执行。
  5. 当你将代码和环境都弄好了,就可以打包成镜像发布了,可以公开也可以私用,随便你,可以理解为就是一个iso文件。

下面来看下基本操作:(基于Swoft的)

安装docker

yum install docker
service docker start

docker run hello-world的时候报错:

# docker run docker.io/hello-world
container_linux.go:247: starting container process caused "process_linux.go:258: applying cgroup configuration for process caused \"Cannot set property TasksAccounting, or unknown property.\""
/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "process_linux.go:258: applying cgroup configuration for process caused \"Cannot set property TasksAccounting, or unknown property.\"".

解决:主要原因还是centos系统版本兼容性问题,如果将系统做更新升级,即可解决。

yum update

搭建环境

docker run -d -p 80:80 --name swoft swoft/swoft

这里就是利用swoft/swoft镜像运行一个名为swoft 的容器,然后-d表示后台运行,-p表示端口映射。

为什么要端口映射?我们写的web代码大多数都是要请求80端口,但是这是虚拟机,实际上还是只有一个80端口,所以可以映射比如81端口,别人访问81端口的时候就会映射去访问docker里面的80端口,而不用去特意在代码里面改成81端口。

如果成功了:

docker images #查看所有镜像,会看到一个名为swoft/swoft的镜像。
docker ps -a #查看所有容器,可以看到一个名为swoft且正在运行的容器。
# 进入容器
docker exec -it swoft /bin/bash
#停止容器
docker stop swoft
#启动容器
docker start swoft

写代码

此时我们运行的是官方的代码,那我自己要写代码怎么操作?

我们在某个地方git代码,比如/home/www/myswoft

然后写代码,写完之后:

docker run -it --rm -p 81:80 -v /home/www/myswoft/  swoft/swoft  /bin/bash
#--rm表示我退出容器后就删掉容器。
然后就会进入容器里面
php bin/swoft start #将swoft运行起来 此时docker ps -a会看到一个正在跑的容器,然后执行的就是你写代码。
exit #退出容器。

注意:如果用本机的数据库和redis需要开IP可访问。

MySQL:
例如,你想root使用123456从任何主机连接到mysql服务器的话。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123546' WITH GRANT OPTION;
如果你想允许用户root从ip为192.168.1.3的主机连接到mysql服务器,并使用123456作为密码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.3' IDENTIFIED BY '123456' WITH GRANT OPTION; flush privileges; Redis:
注释掉bind 127.0.0.1可以使所有的ip访问redis
若是想指定多个ip访问,但并不是全部的ip访问,可以bind
protected-mode no /etc/init.d/redis-server stop
/etc/init.d/redis-server start
/etc/init.d/redis-server restart

打包代码

功能什么的都写好了,想换个服务器运行,这个时候就可以直接打包:

docker build -t myswoft:v1  .
在/home/www/myswoft,也就是放代码的位置运行,swoft已经将dockerfile写好了,直接用。
注意最后的点不要掉了,表示当前目录。myswoft就是镜像的名字,v1就是版本号。 然后docker ps -a可以看到自己打包的镜像,如果不满意可以:
docker rmi ID #根据ID删镜像 接下来可以试着运行一下试试:
docker run -p 81:80 --name myswoft myswoft:v1
不满意:
docker rm imagename #根据名字删容器 调试:
docker start/stop imagename
docker exec -it /bin/bash 都弄好了, 要发布或者下载下来:
docker save -o /home/myswoft myswoft:v1 在别的服务器导入镜像:
docker load < /home/myswoft

docker添加域名

先运行docker镜像

  • 进入 docker 容器 mynginx 是容器名

    docker exec -i -t mynginx /bin/bash
  • 安装vim

    apt-get install vim
  • 修改 hosts 文件

    vi /etc/hosts
  • 添加域名解析规则

    192.168.99.100 example.test

最新文章

  1. 为什么要重写hashcode() 方法
  2. 无需FQ,自建本地CDN,秒上StackOverFlow!
  3. MMU内存管理单元相关知识点总结
  4. OpenGLES入门笔记一
  5. AJAX向服务器发送请求
  6. 利用代码生成工具Database2Sharp设计数据编辑界面
  7. wap版百度hi给你飞速的赶脚 赶紧登陆手机百度hi吧
  8. golang文件上传和下载
  9. css 所有选择器
  10. Js通过原型继承创建子类
  11. JDBC连接Oracle数据库时出现的ORA-12505错误及解决办法
  12. 【jsp 分页】mysql limit方式进行分页
  13. mac配置java和maven环境变量
  14. Linux中使用export命令设置环境变量
  15. P1962 斐波那契数列-题解(矩阵乘法扩展)
  16. 浅析nodejs的buffer类(转)
  17. python的标准数据类型
  18. python图像处理库PIL的基本概念介绍
  19. python &amp; MySQLdb(two)
  20. bzoj2142: 礼物

热门文章

  1. PHP出现iconv(): Detected an illegal character in input string
  2. 队列,一种&quot;公平&quot;的数据结构
  3. linux帐户安全管理与技巧
  4. Centos7安装配置Gitlab-CE
  5. c++ 的学习笔记 第一集cim cout
  6. 鸿蒙源码分析系列(总目录) | 百万汉字注解 百篇博客分析 | 深入挖透OpenHarmony源码 | v8.23
  7. Pycharm软件学生和老师可申请免费专业版激活码
  8. 初探计算机网络之TCP/IP网络协议
  9. js 判断两个对象是否相等
  10. js Promise用法