• Docker虚拟机配置手札(centos)


    一、Docker只支持CentOS7及以上系统,不支持6.x系统

    二、yum安装Docker

    1、安装相关环境和设置仓库

    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

    2、安装Docker社区版

    yum install docker-ce docker-ce-cli containerd.io

    Docker 安装完默认未启动。并且已经创建好 docker 用户组,但该用户组下没有用户。

    3、启动Docker  systemctl start docker 

    4、运行hello-world  docker run hello-world 

    三、修改Docker镜像存放目录

    docker 默认的存储路径在  /var/lib/docker ,但机子的数据盘挂载在/home目录下,

    所以修改docker存储路径到  /home/docker  中。

    1、查找 docker.service 配置文件,不知道配置文件在哪里可以用以下命令显示

    systemctl disable docker
    systemctl enable docker
    #显示结果
    Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

    2、修改 docker.service 配置文件

    vi /usr/lib/systemd/system/docker.service

    3、在里面的EXECStart找到这样一行

     ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock ,将其修改为

     ExecStart=/usr/bin/dockerd --graph /home/docker -H fd:// --containerd=/run/containerd/containerd.sock 保存并退出

    4、重载并重启docker服务

    systemctl daemon-reload        #重载配置文件
    systemctl restart docker       #重启docker
    systemctl enable docker        #设为自启动

    5、查看docker运行信息  docker info 

     其中 Docker Root Dir: /home/docker  即表示已经成功修改运行目录了

    6、重新下载和运行hello-world镜像

     docker run hello-world 

    四、容器和镜像的导入导出

    镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

    镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

     docker images  查看镜像列表;   docker ps  查看容器列表;

    1、保存容器为镜像  docker commit mycentos myos202005  mycentos是容器名,即现正运行的这个虚拟机的名;myos202005是导出的虚拟机镜像名,可用于发布、备份等操作;

    2、导出镜像(转格式)为文件  docker save myos202005:latest > /home/myos202005.img 

    3、导出容器(正在运行的虚拟机)为文件  docker export mycentos > /home/myos202005.img

    4、导入镜像, docker load --input /home/myos202005.img 

    5、导入容器, docker import /home/myos202005.img myos202005 

    区别:
        docker save保存的是镜像(image),docker export保存的是容器(container);
        docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
        docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。

     (如果VMware中的虚拟机centos空间不足,需要扩容,参考这篇文章

     五、运行虚拟机和进入虚拟机系统

    1、后台运行镜像(会新建一个容器) 

    docker run -itd --privileged=true --name myos202005 myos202005:latest

      (注:以特权模式运行,容器中才能使用启动服务systemctl等系统命令)

    2、如果有运行过,则应该启动容器  docker ps -a   docker start 容器ID 

    2、进入容器(虚拟机),使用 docker ps 查看容器信息,然后  docker exec -it 容器ID /bin/bash

    3、退出容器(虚拟机),不关闭容器  Ctrl + P + Q

    4、关闭容器, docker stop 容器ID ;重启容器  docker restart 容器ID ;启动容器  docker start 容器ID 

    5、查看包括已退出的容器  docker ps -a ;删除容器  docker rm 容器ID ;删除镜像 docker rmi 镜像ID 

    PS:容器ID 和 容器名是等效的,以上命令均可以用容器名替代容器ID。

    六、虚拟机端口映射

    1、先分别查看本机和docker机的进程端口使用情况 netstat -nlpt 

    2、查看容器列表信息  docker ps 

    3、停止容器、停止docker服务 

    docker stop 容器ID
    systemctl stop docker

    4、修改容器的配置文件,两个配置文件都要改

    vi /var/lib/docker/containers/容器ID/hostconfig.json
    vi /var/lib/docker/containers/容器ID/config.v2.json

    PS:如果第三步修改过docker存放目录,如 /home/docker,则配置文件的位置也在相应新的位置

    例如把docker中mysql 3306端口,映射到外面的13306端口,以便远程访问docker中的数据库

    5、hostconfig.json修改

    找到 PortBindings ,把那一段JSON修改为  "PortBindings":{"3306/tcp":[{"HostIp":"","HostPort":"13306"}]} 

    6、config.v2.json修改

    修改值 config > ExposedPorts 和 NetworkSettings > Ports

    "Config": {
        ....
        "ExposedPorts": {
            "22/tcp": {},
            "3306/tcp": {}
        },
        ....
    },
    "NetworkSettings": {
        ....
        "Ports": {
            "22/tcp":null,
            "3306/tcp": [{
                "HostIp": "",
                "HostPort": "13306"
            }],
        },
        ...
    }

    7、修改完成后先检查两个文件是否JSON格式正确

    8、启动docker,启动容器, 查看容器列表信息,查看端口映射是否生效

    systemctl start docker
    docker start 容器ID
    docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                       NAMES
    容器ID                myos202005:latest   "/usr/sbin/init"    3 hours ago         Up 5 seconds        22/tcp, 1300/tcp, 0.0.0.0:13306->3306/tcp   cranky_franklin

    如上标红的 13306->3306,则表示端口映射成功

    9、查看端口使用情况  netstat -nlpt ,可以看到 docker-proxy 进程使用13306端口

    10、服务器防火墙开放相应的端口

    #查看开放的端口
    firewall-cmd --list-port
    #添加端口(永久)
    firewall-cmd --zone=public --add-port=13306/tcp --permanent
    #重载防火墙
    firewall-cmd --reload

    如果是用的阿里云,还有“安全组”策略限制了端口访问,需要在阿里云后台操作添加端口

    七、Nginx / Apache 反向代理部分域名到docker中

    实现效果:blog.batsing.com 正常定向在服务器中,blog.demo.batsing.com 定向到docker中。都是使用80端口。

    实现过程:

    1、docker机里有内网IP(默认172.17.0.2

    2、服务器可以通过此IP访问到docker中的nginx curl 172.17.0.2:80

    3、服务器配置系统hosts,把demo域名指向docker内网IP

    cat /etc/hosts
    172.17.0.2 blog.demo.batsing.com

    4、Nginx中配置vhost,将demo域名转发到域名自身

    server {
        listen            80;
        server_name        blog.demo.batsing.com;
        location / {
            proxy_pass    http://blog.demo.batsing.com;
            proxy_set_header X-Real-IP $remote_addr;                                                   
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;
        }
    }

    转发到域名自身,因为服务器的hosts配置,所以会转发到docker机中,从而实现部分域名转入到docker中的功能。

    服务器中其他站点域名,按nginx正常配置即可。

    docker中的nginx配置,也是按正常配置即可,无需另行特殊配置。

  • 相关阅读:
    2020牛客暑期多校(三)
    贪心算法
    高级搜索题集
    状态压缩dp
    [kuangbin带你飞]专题二 搜索进阶
    [kuangbin带你飞]专题一 简单搜索
    HDU 1695 GCD(求两区间的互质数对+容斥原理)
    UVA 10200 Prime Time(简单素数判定预处理)
    HDU 1452 FZU 1053 Happy 2004(逆元函数+因子和函数+大指数取模化简公式)
    低三位的数是8的倍数就可以被8整除
  • 原文地址:https://www.cnblogs.com/batsing/p/docker.html
Copyright © 2020-2023  润新知