• Docker(一)


    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
    Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

    Docker的应用场景

    Web 应用的自动化打包和发布。
    自动化测试和持续集成、发布。
    在服务型环境中部署和调整数据库或其他的后台应用。
    从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

    Docker 的优点

    1、简化程序:
    Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的    任务,在Docker容器的处理下,只需要数秒就能完成。
    2、避免选择恐惧症:
    如果你有选择恐惧症,还是资深患者。Docker 帮你    打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
    3、节省开支:
    一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

    Ubuntu Docker 安装Docker

    前提条件
        Docker 要求 Ubuntu 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的 Ubuntu 版本是否支持 Docker:uname -r 

    Ubuntu 16.04 安装 Docker

    1.选择国内的云服务商,这里选择阿里云为例
        curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
    2.安装所需要的包
        sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
    3.添加使用 HTTPS 传输的软件包以及 CA 证书
        sudo apt-get update
        sudo apt-get install apt-transport-https ca-certificates
    4.添加GPG密钥
        sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
    5.添加软件源
        echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list
    6.添加成功后更新软件包缓存
        sudo apt-get update
    7.安装docker
        sudo apt-get install docker-engine
    8.启动 docker
        sudo systemctl enable docker
        sudo systemctl start docker

    Docker 设置代理

    3.1 创建目录
        mkdir -p /etc/systemd/system/docker.service.d
    3.2 创建文件/etc/systemd/system/docker.service.d/http-proxy.conf,内容如下:
        [Service]
        Environment="HTTP_PROXY=http://pill:pill@node2:3128/"
    3.3 重启docker
        systemctl daemon-reload
        systemctl restart docker
    3.4 验证docker代理是否设置成功
        systemctl show --property=Environment docker  
    3.5 显示如下结果说明设置成功
        Environment=GOTRACEBACK=crash HTTP_PROXY=http://pill:pill@node2:3128/

    Docker 安装 Python

    搜索python
        docker search python
    拉取python
        docker pull python:3.5
    可以在本地镜像列表里查到REPOSITORY为python,标签为3.5的镜像
        docker images python:3.5 
    
    使用python镜像
    ~/python/myapp目录下创建一个 helloworld.py 文件,代码如下:
        #!/usr/bin/python
        print("Hello, World!");
    运行容器
    runoob@runoob:~/python$ docker run  -v $PWD/myapp:/usr/src/myapp  -w /usr/src/myapp python:3.5 python helloworld.py
        -v $PWD/myapp:/usr/src/myapp :将主机中当前目录下的myapp挂载到容器的/usr/src/myapp
        -w /usr/src/myapp :指定容器的/usr/src/myapp目录为工作目录
        python helloworld.py :使用容器的python命令来执行工作目录中的helloworld.py文件

    使用mongo镜像

    运行容器
        runoob@runoob:~/mongo$ docker run -p 27017:27017 -v $PWD/db:/data/db -d mongo:3.2
        cda8830cad5fe35e9c4aed037bbd5434b69b19bf2075c8626911e6ebb08cad51
            -p 27017:27017 :将容器的27017 端口映射到主机的27017 端口
            -v $PWD/db:/data/db :将主机中当前目录下的db挂载到容器的/data/db,作为mongo数据存储目录
    查看容器启动情况
        runoob@runoob:~/mongo$ docker ps 
        CONTAINER ID   IMAGE        COMMAND                   ...    PORTS                      NAMES
        cda8830cad5f   mongo:3.2    "/entrypoint.sh mongo"    ...    0.0.0.0:27017->27017/tcp   suspicious_goodall
    使用mongo镜像执行mongo 命令连接到刚启动的容器,主机IP为172.17.0.1
        docker run -it mongo:3.2 mongo --host 172.17.0.1

    docker常用命令

    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]:创建一个新的容器并运行一个命令
        -d: 后台运行容器,并返回容器ID;
        -i: 以交互模式运行容器,通常与 -t 同时使用;
        -p: 端口映射,格式为:主机(宿主)端口:容器端口
        -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
    使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data
        docker run -p 80:80 -v /data:/data -d nginx:latest
    
    docker rm [OPTIONS] CONTAINER [CONTAINER...]:删除一个或多少容器
        -f :通过SIGKILL信号强制删除一个运行中的容器
        -l :移除容器间的网络连接,而非容器本身
        -v :-v 删除与容器关联的卷
    
    docker exec [OPTIONS] CONTAINER COMMAND [ARG...]:在运行的容器中执行命令
    -d :分离模式: 在后台运行
        -i :即使没有附加也保持STDIN 打开
        -t :分配一个伪终端
    在容器mynginx中以交互模式执行容器内/root/runoob.sh脚本
        runoob@runoob:~$ docker exec -it mynginx /bin/sh /root/runoob.sh
    
    docker ps : 列出容器
        -a :显示所有的容器,包括未运行的。
        -f :根据条件过滤显示的内容。
        --format :指定返回值的模板文件。
        -l :显示最近创建的容器。
        -n :列出最近创建的n个容器。
    
    docker export :将文件系统作为一个tar归档文件导出到STDOUT
        -o :将输入内容写到文件。
    将id为a404c6c174a2的容器按日期保存为tar文件。
        runoob@runoob:~$ docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2
    
    docker images : 列出本地镜像。
        -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
        --digests :显示镜像的摘要信息;
        -f :显示满足条件的镜像;
        --format :指定返回值的模板文件;
        --no-trunc :显示完整的镜像信息;
        -q :只显示镜像ID。

    遇到的问题

    mongod 命令执行发现已经有进程在运行mongod数据库--errno:48 Address already in use for socket: 0.0.0.0:27017
    处理方法:终端中输入:
        ps aux | grep mongod
    找到对应进程id,杀死:
        kill -9 pid
    再次执行 mongod 命令就可以开启 mongodb 服务

    Error: "https://apt.dockerproject.org/repo ubuntu-xenial Release"
    解决办法: http://tieba.baidu.com/p/4856244750

    Ubuntu更换源:
    https://blog.csdn.net/qq_35451572/article/details/79516563
    Ubuntu设置代理:
    https://www.cnblogs.com/supernalsnow/p/5542724.html

    Error: docker: Error response from daemon: failed to start shim: exec: "docker-containerd-shim": executable file not found in $PATH: unknown.
    解决办法: service docker restart
  • 相关阅读:
    hadoop环境搭建之分布式的建立3
    hadoop环境搭建之分布式的建立2
    hadoop环境搭建之分布式的建立1
    安装Centos虚拟机
    VMWare安装虚拟机
    VMware虚拟机的下载及安装
    启用并登陆Administrator账户后显示“无法登陆到你的账户”
    Windows PowerShell打不开,无法重装.net framework
    中国软件杯赛题分析
    每周总结(10)
  • 原文地址:https://www.cnblogs.com/eilinge/p/9836630.html
Copyright © 2020-2023  润新知