• 【云计算学习笔记】Docker(一)


    安装Docker

    (出于安全性考虑,有关Docker的命令需在root权限下进行,这里全程sudo一下)

    mkdir ~/docker && cd ~/docker &&
    sudo apt-get -y install docker.io
    
    • 1
    • 2

    docker version:查看 Docker 的版本信息
    docker help:查看 Docker 的帮助文档

    更换镜像源:

    Docker 工作的基础即是镜像。认为一个镜像相当于是一个独立的由应用组成的虚拟机。为此,docker 建立了 Docker Hub 来存贮镜像(就像GitHub一样)。
    以下命令更换镜像源为腾讯云的镜像:

    sudo su -
    cat >> /etc/docker/daemon.json <<- EOF
    {
      "registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
    }
    EOF
    systemctl restart docker
    exit
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    下载Docker相关镜像

    docker pull <镜像>
    
    • 1

    拉取镜像,<>内为镜像名称

    sudo docker image ls
    
    • 1

    查看已下载的镜像

    几个常用镜像及其下载命令

    Nginx

    sudo docker pull nginx:alpine
    sudo docker pull php:7-fpm-alpine
    sudo docker pull postgres:alpine
    
    • 1
    • 2
    • 3

    启动镜像(以Nginx为例)

    sudo docker run --rm -d -p 80:80 --name nginx nginx:alpine
    
    • 1

    参数说明

    –rm:容器执行完后会被直接销毁。
    –name:指定容器名称。
    -d:容器会在后台运行。
    -p:开放容器的80端口映射到主机的80端口。
    -v:将nginx的配置文件挂载到容器的对应目录

    之后可在Ngnix对应网址上看到欢迎页面。

    停止容器

    sudo docker stop <容器ID或容器名称>
    
    • 1

    命令使用说明:

    • 若输入ID,可以只输入前几个字符(Docker会自动匹配后面的字符)。
    • 若输入容器名称,则必须完整输入。

    LNMP

    什么是LNMP?

    Linux-Nginx-MySQL(MariaDB)-PHP

    高效管理并启动:docker-compose

    安装:

    sudo apt-get install -y python-pip && sudo pip install docker-compose
    
    • 1

    创建并修改配置文件docker-compose.yml:

    touch ~/docker/docker-compose.yml
    
    • 1

    用vim打开该文件并填入以下内容:(vim操作不熟练的可搜搜别的资料哈,这里不多细述了)

    version: "3"
    services:
    
      Nginx:
        image: nginx:alpine
        ports:
          - 80:80
        volumes:
          - ./web:/usr/share/nginx/html:ro
          - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
    
      PHP:
        image: undefined01/php:7-fpm-alpine
        volumes:
          - ./web:/var/www/html:rw
    
      Database:
        image: postgres:alpine
        environment:
          POSTGRES_USER: "postgres"
          POSTGRES_PASSWORD: "rootroot"
        volumes:
          - ./data:/var/lib/postgresql/data:rw
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    配置文件中涉及到的参数:

    • version:配置文件使用第三套标准。
    • services:需要启动的服务(容器)列表。

    对于每一个服务,又有:

    • image:该服务使用的镜像。
    • ports:该服务开放的端口。
    • volumes:将某目录或文件挂载到容器的相应位置上,后面的ro、rw表示对于容器是否可读写。
    • enviornment:设置该容器的环境变量。此处通过环境变量的形式设置数据库的账号和密码。
      !!此处数据库账号密码保存在文件中,所以一定要注意文件的访问权限!!

    Nginx的配置文件:

    server {
        listen       80;
        server_name  localhost;
    
        location / {
            root   /usr/share/nginx/html;
            index  index.php index.html index.htm;
        }
    
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
        location ~ \.php$ {
            fastcgi_pass   PHP:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    一些问题:

    如何更改容器里的配置文件?

    只需要在本地编辑好后挂载到容器中去(会覆盖容器中的文件),前面小节中预留的nginx.conf就是为此。

    如何让 Nginx 容器与 PHP 容器通讯?

    对于由 docker-compose 启动的所有容器,都会自动加入由 docker 维护的局域网中,并且会自动为其他容器将某容器的名称(如 PHP )解析成相应的局域网IP。

    启动LNMP

    sudo docker-compose up -d
    
    • 1

    查看启动情况

    sudo docker container ls
    
    • 1

    测试环境

    获取编辑权限

    sudo chmod -R 777 ./data ./web
    
    • 1

    测试php:

    创建index.php文件

    touch ~/docker/web/index.php
    
    • 1

    填入以下内容:

    <?php
    phpinfo();
    ?>
    
    • 1
    • 2
    • 3

    若操作正常,可在相应页面看到php相关信息。

    测试数据库:

    (因为PostgreSQL更适合云部署,所以这里用的PostgreSQL)
    创建测试文件并填入以下内容:

    <?php
    $dbconn = pg_connect('host=Database user=postgres password=rootroot') or die('Could not connect: ' . pg_last_error());
    pg_query('CREATE TABLE IF NOT EXISTS test ( tester INT )');
    
    pg_query('INSERT INTO test VALUES (0)');
    $res = pg_query('SELECT * FROM test') or die('Query failed: ' . pg_last_error());
    $num = pg_num_rows($res);
    echo "You have visited this site $num times";
    
    pg_free_result($res);
    pg_close($dbconn);
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    使用命令停止服务

    以下命令会自动销毁相应容器

    sudo docker-compose down
    
    • 1

    数据库会保存在当前 docker 目录下的 data 文件夹中,若迁移到任何一台新的主机,只需要将该目录打包带走。

    结语

    以上仅为学习笔记,不是解决问题的成熟方案。笔者是在临时实验机上跑的,如果有同学需要在常用云服务器甚至是企业级服务器上跑,由于现实情况的复杂性,建议对文章中提到的内容仔细研究、慎重输入,最好先在小机子上练练手,确保没问题了再跑。

  • 相关阅读:
    基于YOLOv5-v6.2全新版本模型构建自己的图像识别模型超详细教程
    【elementui源码解析】如何实现自动渲染md文档-第一篇
    Flutter高仿微信-第52篇-群聊-清空聊天记录
    后端:任何客户端的东西都不可信任
    2022牛客多校(一)
    Dynamics 365应用程序开发 7. 使用Web API开发应用程序
    YOLOv5 分类模型 数据集加载 3
    MySQL优化策略
    Acwing 2816. 判断子序列
    联想笔记本电脑开机后一直黑屏的解决办法
  • 原文地址:https://blog.csdn.net/julia_xueli/article/details/125434609