zoukankan      html  css  js  c++  java
  • Swoft+Docker

    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
  • 相关阅读:
    大端小端与数字的二进制存储
    java基础之进制转换汇总
    (转) tcp udp通讯协议
    JAVA Tcp Udp的通讯实现(转)
    ExecutorService创建线程使用 转()
    转:java中的位运算
    SVN服务器的搭建与TortoiseSVN的使用
    [Mark]VM Cone & Template
    [Mark]VM migrate
    [Mark] ethtool command in REHL OS
  • 原文地址:https://www.cnblogs.com/HappyTeemo/p/15396947.html
Copyright © 2011-2022 走看看