标签: Docker

  • VirtualBox Windows 10 v1903 中无法启动:Call to WHvSetupPartition failed:

    VirtualBox Windows 10 v1903 中无法启动:Call to WHvSetupPartition failed:

    windows Hyper-V启动后不可以兼容Virtualbox和VMware! 两者一起安装后,启动Virtualbox就会蓝屏!!

    那么最近windows10推出一个新功能:sadbox windows10。那么这个windows系统肯定安装在 Hyper-V 咯。所以出现Call to WHvSetupPartition failed:等错误就直接把 Hyper-V 关掉即可!

    方法一( Windows设置–应用和功能–程序和功能–启用或关闭Windows功能 )

    方法二

    当然也可以通过命令行文件来执行(需以管理员身份运行)

    关闭Windows10 Hyper 功能

    bcdedit /set hypervisorlaunchtype off

    打开Windows10 Hyper 功能

    bcdedit /set hypervisorlaunchtype auto
  • Docker 下使用Centos系统镜像安装 uwsgi 运行 Python3 Django Nginx 反向代理

    Docker 下使用Centos系统镜像安装 uwsgi 运行 Python3 Django Nginx 反向代理

    需求描述

    最近老季在用Python3,Django写项目,这边具体记录一下在Docker下如何安装uwsgi来运行Django。

    注意:本项目代码已在宿主中生成过项目及文件,创建项目方法请移步:django入门教程 创建项目(Project)和应用(App)

    宿主Docker命令

    docker run -itd -v D:\wwwroot\:/data/wwwroot -p 8001:9000 --name juwsgi --link jnginx --link jmysql centos /usr/sbin/init

    这里我们只在linux系统中安装了 uwsgi 来运行python的web环境,mysql已单独运行在其他容器中。

    创建映射文件

    在 d:\wwwroot\traffic_scheduling 中创建 uwsgi.ini 的配置文件

    [uwsgi]
    # Django-related settings 
    # the base directory (full path) 
    chdir = /data/wwwroot/traffic_scheduling/web/
    # Django's wsgi file 
    module = web.wsgi 
    # the virtualenv (full path) 
    # home = /path/to/virtualenv 
    # process-related settings 
    master master = true 
    # maximum number of worker processes 
    processes = 2
    # the socket (use the full path to be safe) 
    # socket = /path/to/your/project/mysite.sock 
    socket = :9000
    # ... with appropriate permissions - may be needed 
    # chmod-socket = 664 
    # clear environment on exit 
    vacuum = true
    buffer-size = 32768
    pidfile = /tmp/uwsgi-IRM.pid   
    daemonize = /tmp/uwsgi-IRM.log
    

    uwsgi中的socket

    uwsgi监听的socket,可以为socket文件

    socket = /www/wwwroot/web/script/uwsgi.sock

    或 ip地址+端口号

    socket = :9000

    用nginx的时候就配socket , 直接运行的时候配 http
    指定IP端口 // 直接外部访问

    http-socket = :9000

    进入容器

    docker exec -it juwsgi /bin/bash

    在容器中运行命令

    1、在Centos容器中运行安装Python3

    CentOS上安装配置Python3.7 编译安装图文教程

    2、在容器中运行pip命令

    pip install --upgrade pip
    pip install django mysqlclient uwsgi
    ln -s /usr/local/bin/uwsgi /usr/bin/uwsgi

    测试你的Django项目

    现在,我们想让uWSGI做同样的事,但是返回一个Django站点而不是 test.py 模块。

    如果你还没有这样做,那么请确保你的 mysite 项目实际上正常工作,在终端中运行如下命令:

    python manage.py runserver 0.0.0.0:9000

    在浏览器中输入 http://127.0.0.1:9000 。

    如果正常,在终端中ctrl + c 取消,然后在终端中进入目录 /data/wwwroot/traffic_scheduling/web/ ,则使用uWSGI来运行它:

    uwsgi --http :9000 --module web.wsgi
    • module web.wsgi: 加载指定的wsgi模块

    将你的浏览器指向该服务器;如果站点出现,那么意味着uWSGI可以为你虚拟环境中的Django应用服务,而这个栈工作正常:

    the web client <-> uWSGI <-> Django
    

    现在,通常我们不会让浏览器直接与uWSGI通信。那是web服务器的工作,这是个穿针引线的活。

    配置Nginx容器

    Docker 安装 Nginx 映射本地文件 多虚拟主机 图文教程

    示例配置文件如下

    # mysite_nginx.conf
    # the upstream component nginx needs to connect to
    upstream django {
        # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
        server 127.0.0.1:9000; # for a web port socket (we'll use this first)
    }
    # configuration of the server
    server {
        # the port your site will be served on
        listen      8001;
        # the domain name it will serve for
        server_name .example.com; # substitute your machine's IP address or FQDN
        charset     utf-8;
        # max upload size
        client_max_body_size 75M;   # adjust to taste
        location /static {
            root /data/wwwroot/traffic_scheduling/web/; # your Django project's static files - amend as required
        }
        # Finally, send all non-media requests to the Django server.
        location / {
            uwsgi_pass  django;
            include     uwsgi_params; # the uwsgi_params file you installed
        }
    }

    Centos下请关闭SELinux,否则会出现 403 forbidden (13: Permission denied) 。关闭SELinux的两种方法

    部署静态文件

    在运行nginx之前,你必须收集所有的Django静态文件到静态文件夹里。首先,必须编辑web/settings.py,添加:

    STATIC_ROOT = os.path.join(BASE_DIR, "static")

    然后运行

    python manage.py collectstatic
    

    基本的nginx测试

    重启nginx:

    /etc/init.d/nginx restart

    要检查是否正确的提供了媒体文件服务,添加一个名为 media.png 的图像到 /data/wwwroot/traffic_scheduling/web/static 目录中,然后访问http://example.com:8000/media/media.png – 如果这能正常工作,那么至少你知道nginx正在正确的提供文件服务。

    值得不仅仅是重启nginx,而是实际停止然后再次启动它,这将会通知是否有问题,以及问题在哪里。

    在宿主中查看是否可以成功运行

    在浏览器中输入 http://127.0.0.1:8001 查看是否运行成功。

  • Docker.For.Win – Install fails on installationmanifest.json

    Docker.For.Win – Install fails on installationmanifest.json

    问题描述

    Docker升级出现 Installation Failed:

        Text from error:
        Installing Docker for Windows 
        Docker for Windows 
        Installation failed 
        x 
        17.06.O-rc2-ce-win14 
        Could not find file 'C:\Program Files\Docker\Docker\installationmanifest.json'. 
        at System.lO._Error.WinlOError(lnt32 errorCode, String maybeFullPath) 
        at System.lO.FileStream.lnit(String path, FileMode mode, FileAccess access, Int32 rights, Boolean 
        useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String 
        msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) 
        at System.lO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 
        bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean 
        checkHost) 
        at System.lO.StreamReader..ctor(String path, Encoding encoding, Boolean 
        detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost) 
        at System.lO.File.lnternalReadAllText(String path, Encoding encoding, Boolean checkHost) 
        at Lightweightlnstaller.UninstallWorkflow.<ProcessAsync>d_7.MoveNext() 
        End of stack trace from previous location where exception was thrown 
        at System. Runtime. ExceptionServices. Exception Dispatchl nfo. Throw()

    解决办法

    1. Kill the installer process if it’s still running.
    2. Run Regedit.
    3. Run a quick backup of the registry by selecting File > Export (It is recommended that you set the export range to All.)
    4. Navigate to Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
    5. If there is a Docker for Windows entry, delete key and all subkeys.
    6. Relaunch the installer, and you should no longer be prompted to update. The installer should proceed as a fresh install from this point.
    1. 运

    1、关闭所有的安装进程

    2、运行注册表(WIN+r), 在运行中输入:regedit

    3、打开注册表 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

    4、找到 Docker for Windows

    5、将右侧的支点全部删除。

    可以将Docker恢复到最初的状态,然后可以重新安装或升级。

  • Docker 安装 memcached 出现 can’t run as root without the -u switch

    Docker 安装 memcached 出现 can’t run as root without the -u switch

    出现问题

    can’t run as root without the -u switch

    解决办法

    docker run -d -p 11211:11211 --name jmemcached memcached -u root

    -u root 使用 root来执行,docker容器就不会自动退出。否则可能会出现刚启动容器就会自动退出。

  • Docker 出现 This error may also indicate that the docker daemon is not running.

    Docker 出现 This error may also indicate that the docker daemon is not running.

    问题描述

    Docker使用过程中出现错误

    error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.39/containers/json?all=1: open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuration on Windows, the docker client must be run elevated to connect. This error may also indicate that the docker daemon is not running.

    这个问题好坑,找了好久都没有解决办法,卸载重装以后还是不行。

    注:卸载后将会删除所有镜像及虚拟机容器。

    解决办法

    在 cmd.exe 中执行,开启守护进程即可。

    cd "C:\Program Files\Docker\Docker"
    ./DockerCli.exe -SwitchDaemon
  • Docker容器中使用问题:Failed to get D-Bus connection: Operation not permitted 解决办法 图文教程

    Docker容器中使用问题:Failed to get D-Bus connection: Operation not permitted 解决办法 图文教程

    问题描述

    在CentOS7 中,docker 容器中 yum 安装完mysql后,启动mysqld报错

    systemctl start mysqld

    Failed to get D-Bus connection: Operation not permitted

    解决办法

    生成容器:

    docker run -itd -name mysql   mysql-yum-install /usr/sbin/init

    进入容器:

    docker exec -it mysql /bin/bash

    这样可以使用systemctl启动服务了。

    创建容器时正确代码

    docker run -itd --name mysql  mysql-yum-install  /usr/sbin/init

    进入容器

    docker exec -it mysql /bin/bash

    重启服务

    systemctl start mariadb
  • Docker安装Centos/Debian等系统镜像

    Docker安装Centos/Debian等系统镜像

    前面老季博客里记录了一下基本的Nginx+PHP-FPM+Mariadb的一些相关知识,由于跟前面的命令行不同,所以我们这里再记录一下如何安装加载Centos系统镜像并执行一些命令。

    Docker下载Centos镜像

    先下载一个docker镜像,在系统终端或cmd命令中执行:

    docker pull centos

    创建docker容器

    docker run -itd -p 81:80 -p 443:443 --privileged=true -v /data/wwwroot:/wwwroot --name jcentos centos /usr/sbin/init 

    如果参数使用错了就会出现如下错误

    Docker容器中使用问题:Failed to get D-Bus connection: Operation not permitted 解决办法 图文教程

    运行docker容器

    docker exec -it jcentos /bin/bash
  • docker logs-查看docker容器日志

    docker logs-查看docker容器日志

    前面老季学习了docker的相关知识,在实际的项目中我们知道使用docker logs查看日志,但是如何通过 docker logs 命令可以查看容器的指定时间日志,指定最后行数呢?下面我们将会记录一下具体的方法。

    命令格式

    $ docker logs [OPTIONS] CONTAINER
      Options:
            --details        显示更多的信息
        -f, --follow         跟踪实时日志
            --since string   显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
            --tail string    从日志末尾显示多少行日志, 默认是all
        -t, --timestamps     显示时间戳
            --until string   显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)

    例子

    查看指定时间后的日志,只显示最后100行:

    $ docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID

    查看最近30分钟的日志:

    $ docker logs --since 30m CONTAINER_ID

    查看某时间之后的日志:

    $ docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID

    查看某时间段日志:

    $ docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID
  • Docker容器下如何配置MySQL主从复制服务器 图文教程

    Docker容器下如何配置MySQL主从复制服务器 图文教程

    今天说一下MySQL的主从复制如何做到?我们这里直接使用Docker来配置。

    准备工作说明

    我们这里要做得是将jmysql2数据库容器自动同步jmysql数据库容器里的数据。

    开始前务必将jmysql、jmysql2数据库及所有表内容同步。

    建立Docker容器

    docker run -d --name jmysql -v D:\mysqlData:/var/lib/mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=jjjjjj mariadb
    docker run -d --name jmysql2 -v D:\mysqlData2:/var/lib/mysql -p 3308:3306 -e MYSQL_ROOT_PASSWORD=jjjjjj --link jmysql mariadb

    这里建立的Mariadb的root密码均为:jjjjjj

    jmysql2必须要添加 --link jmysql 参数 ,否则无法连接到jmysql服务器。

    在命令行或者CMD中分别执行一下命令

    docker exec -it jmysql /bin/bash
    docker exec -it jmysql2 /bin/bash

    初始化Docker环境

    apt-get update ; apt-get install vim -y

    原理分析

    原理:mysql要做到主从复制,其实依靠的是二进制日志,即:假设主服务器叫A,从服务器叫B;主从复制就是

         B跟着A学,A做什么,B就做什么。那么B怎么同步A的动作呢?现在A有一个日志功能,把自己所做的增删改查的动作

         全都记录在日志中,B只需要拿到这份日志,照着日志上面的动作施加到自己身上就可以了。这样就实现了主从复制。

    扩展:MYSQL还有一种日志叫做:慢日志

         可以设置一个时间,那么所有执行时间超过这个时间的SQL都会被记录下来。这样就可以通过慢日志快速的找到网站中SQL的瓶颈来进行优化。

             大家有时间可以研究一下,这里不多做介绍。

    实现步骤

    jmysql主数据库命令行

    修改MySQL/Mariadb配置文件, 修改mysql的配置文件,使其支持二进制日志功能。

    打开主服务器的mysql配置文件:my.conf

     vi /etc/mysql/my.cnf

    加入如下代码:

    server-id               = 111
    log_bin = /var/log/mysql/mariadb-bin
    #binlog日志只记录指定库的更新
    #binlog-do-db=db_name
    #binlog日志不记录指定库的更新
    #binlog-ignore-db=db_name

    参数解释:

    log-bin=mysql-bin //将mysql二进制日志取名为mysql-bin

    binlog_format=mixed //二进制日志的格式,有三种:statement/row/mixed,具体分别不多做解释,这里使用mixed

    server-id=111 //为服务器设置一个独一无二的id便于区分,这里使用ip地址的最后一位充当server-id

    配置完成,:wq 保存,重启mysql

    重启mysql命令:#

    service mysqld restart

    同样的,进入从服务器,配置从服务器的my.cnf,重复步骤1即可,

    唯一的区别是,server-id要改成从服务器的ip尾位,即server-id=1;其他两项是一样的,保存,并重启mySQL;

    在主服务器上为从服务器分配一个账号,就像一把钥匙,从服务器拿着这个钥匙,才能到主服务器上来共享主服务器的日志文件。

    进入主服务器的mysql界面,命令:

     mysql -u root -p 111111     //我这里mysql账号是root,密码是111111

    在mysql操作界面下,输入下面一行命令:

    GRANT replication slave ON *.* TO 'slave'@'%' IDENTIFIED BY '111111'; 

    查看主服务器BIN日志的信息(执行完之后记录下这两值,然后在配置完从服务器之前不要对主服务器进行任何操作,因为每次操作数据库时这两值会发生改变).

    show master status;

    设置jmysql2从数据库服务器

    进入从服务器mysql,命令:

    mysql -u root -p111111

    关闭slave(如果你以前配置过主从的话,一定要先关闭),命令:

    stop slave;

    开始配置:输入下面代码即可:

    change master to master_host="jmysql", master_user="slave", master_password='111111', master_log_file="mariadb-bin.000001" , master_log_pos=330;

    参数解释:

    MASTER_HOST  :  设置要连接的主服务器的ip地址
    MASTER_USER  :  设置要连接的主服务器的用户名
    MASTER_PASSWORD  :  设置要连接的主服务器的密码
    MASTER_LOG_FILE  :  设置要连接的主服务器的bin日志的日志名称,即第3步得到的信息
    MASTER_LOG_POS : 设置要连接的主服务器的bin日志的记录位置,即第3步得到的信息,(这里注意,最后一项不需要加引号。否则配置失败)

    先在从服务器配置完成,启动从服务器,命令:

    start slave;

    查看是否配置成功

    show slave status;

    上面两项均为yes,说明配置成功,否则,请重复前面的步骤。

    ok,到这里MySQL的主从复制就配置完了,其实明白原理的话还是很简单的,

    这里就不给大家测试了,大家配置完可以自己测试一下,有什么问题的话,

  • Docker 容器中为PHP-FPM 环境安装Memcached扩展 图文教程

    Docker 容器中为PHP-FPM 环境安装Memcached扩展 图文教程

    前面我们写了关于Docker的一些内容,现在我们需要在容器中开启php对Memcached的扩展。网上找了一些资料,下面我们直接贴出命令行。

    进入容器

    docker exec -it jphp-fpm /bin/bash

    jphp-fpm 是我们创建容器时给的容器名。

    注意:我们这里使用的是 bitnami/php-fpm 的套件。

    安装预编译环境

    apt-get update -y && apt-get install -y pkg-config libmemcached-dev autoconf gcc make zlib1g zlib1g-dev vim

    安装php-memcached扩展

    pecl channel-update pecl.php.net && pecl install memcached

    修改php的配置文件php.ini

    通过phpinfo里Loaded Configuration File,我们看到php.ini的位置:/opt/bitnami/php/lib/php.ini

    echo 'extension=memcached.so' >> /opt/bitnami/php/lib/php.ini

    退出容器 ,HOST终端重启php-fpm

    docker restart jphp-fpm
  • Make没有安装,错误sh: make: not found

    Make没有安装,错误sh: make: not found

    今天在Docker容器中安装php-memcached扩展,报如下错误:
    sh: make: not found

    make 没安装,Linux(Debian、Ubuntu)终端中执行以下命令即可:

    apt-get update
    apt-get install make

    Centos、Redhat下执行:

    yum update
    yum install make

  • 系统重启Reboot 后 Docker服务及容器自动启动设置

    系统重启Reboot 后 Docker服务及容器自动启动设置

    前面几篇我们学习了Docker的相关知识:

    下面我们记录一下如何在系统重启之后,使Docker容器自动启动。

    Docker服务自动重启设置

    systemctl enable docker.service

    Docker容器自动启动设置

    在运行docker容器时可以加如下参数来保证每次docker服务重启后容器也自动重启:

    --restart=always

    –restart具体参数值详细信息:
           no –  容器退出时,不重启容器;
           on-failure – 只有在非0状态退出时才从新启动容器;
           always – 无论退出状态是如何,都重启容器;

    如果已经启动了则可以使用如下命令:

    docker update --restart=always <CONTAINER ID>

    如何判断Docker容器状态是否已启动

    docker ps -a

    通过这里 STATUS 来判断是否已启动。

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    eee0acf086c8 nginx “nginx -g ‘daemon …” 3 hours ago Up 4 minutes 0.0.0.0:80->80/tcp jnginx
    cf8ad8125a4c bitnami/php-fpm “php-fpm -F –pid …” 3 hours ago Up 5 minutes 9000/tcp jphp-fpm
    ab6dea2ab176 memcached “docker-entrypoint…” 2 days ago Up 5 minutes 0.0.0.0:11211->11211/tcp jmemcached
    f0df7b311a41 mariadb “docker-entrypoint…” 2 days ago Up 5 minutes 0.0.0.0:3306->3306/tcp jmysql

WeChat
↑