zoukankan      html  css  js  c++  java
  • Docker入门

    1.Docker的概念

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
    Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
    容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低

    1.1与虚拟机的区别

    Docker相对于虚拟机是更"轻量级"虚拟化,目的和虚拟机一样都是创造"隔离环境"。
    虚拟机需要创建一层"Guest OS",虚拟机是操作系统级别的隔离,容器本质上是进程级的资源隔离。

    1.2.Docker仓库

    可以对比与Github,对镜像进行托管,可以从仓库拉取镜像,也可以提交镜像到仓库。 (DockerHub)

    1.3.Docker镜像

    可以理解为虚拟机的操作系统ISO文件,利用镜像可以很方便的生成容器。

    1.4.容器

    可以理解为实际运行的虚拟机

    1.5.tar文件

    可以将镜像 save成tar文件,也可以从tar文件中load镜像,类似于虚拟机的vmdk文件。

    在线Docker工具 https://labs.play-with-docker.com/

    2.Docker容器使用

    2.1容器的启动、关闭

    docker run [options] <镜像名称>
    -d 后台运行
    -p 内外端口映射 90:80 外部90端口映射到容器的80
    -P :是容器内部端口随机映射到主机的端口。
    -v #指定文件路径映射 宿主机路径:内部路径
    -t: 在新容器内指定一个伪终端或终端。
    -i: 允许你对容器内的标准输入 (STDIN) 进行交互。
    docker start <容器id> 启动一个已停止的容器
    docker stop <容器id> 停止容器
    docker restart <容器id> 重启容器

    2.2 进入容器

    docker attach 退回会停止容器
    docker exec 退出不会停止容器

    2.3 导出容器

    docker export <容器ID> > nginx.tar
    **docker import **
    docker import http://example.com/exampleimage.tgz example/imagerepo #从URL 导入
    docker import nginx-test.tar nginx:imp 或 cat nginx-test.tar | docker import - nginx:imp

    2.4 查看容器信息

    docker logs <容器ID> 查看容器内标准输出
    docker top <容器ID> 查看容器内进程
    docker inspect <容器ID> 查看dicker底层信息

    2.5 删除容器

    docker rm <容器ID>

    2.6 容器之间的连接

    docker run -p 指定内网端口映射
    -P :是容器内部端口随机映射到主机的高端口 (49000~49900)
    端口映射加上IP
    docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py
    upd协议
    docker run -d -p 127.0.0.1:5001:5000/udp training/webapp python app.py

    容器互联
    1.创建 network
    docker network create -d bridge test-net
    -d:参数指定 Docker 网络类型,有 bridge、overlay。
    2.启动容器 使用--network 参数
    docker run -itd --name test1 --network test-net ubuntu /bin/bash
    docker run -itd --name test2 --network test-net ubuntu /bin/bash
    3.两个启动的容器内使用ping测试是否互联

    配置Docker的DNS
    /etc/docker/daemon.json 重启Docker
    {
    "dns" : [
    "114.114.114.114",
    "8.8.8.8"
    ]
    }
    docker run -it --rm ubuntu cat etc/resolv.conf #查看DNS是否生效

    3.Docker镜像使用

    docker pull nginx #获取nginx镜像
    docker images #查看Docker镜像
    docker commit 容器ID 镜像名称 #提交本地容器为镜像
    docker build -t 镜像名 DockerFile路径 #通过DockerFile构建Docker镜像
    docker save 镜像名 *.tar #将镜像生成tar文件
    docker load *.tar
    docker rmi #删除镜像
    docker search <镜像名> #查找镜像

    4.Docker仓库使用

    官方维护的仓库DockerHub
    docker login #登陆
    docker logout #注销
    docker search #查找镜像
    docker pull #拉取镜像
    docker push #推送镜像
    docker tag ubuntu:18.04 username/ubuntu:18.04#打标签
    docker push username/ubuntu:18.04

    5.Docker File使用

    Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明 文件名严格区分大小写
    构建镜像 在DockerFile文件目录下 docker build -t nginx:test

    FROM 基于哪个镜像
    WORKDIR 指定工作目录 WORKDIR 指定的工作目录,必须是提前创建好的 shell语句运行的目录

    RUN 用于执行后面跟着的命令行命令 docker bulid 时运行
    CMD 用于执行后面跟着的命令行命令 docker run 时运行
    ENTRYPOINT

    COPY <源路径> <容器目标路径>
    上下文目录中复制文件或者目录到容器里指定路径
    ADD 类似于COPY 可以为Url 压缩文件自动解压

    ENV 指定环境变量
    ARG 指定参数 仅用于build 可以用 --build-arg <参数名>=<值> 来覆盖
    LABLE 指定元数据 docker inspect时查看

    EXPOSE 暴露端口 docker run -P 随机映射到暴露的端口
    VOLUME 定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。容器内的路径

    USER 指定运行命令的用户
    ONBUILD 用于延迟构建命令的执行 当前镜像构建不会执行 当下次构建以当前镜像为FROM时执行

    6.Docker compose使用

    Docker Compose 多容器项目
    容器之间 内网 互相访问
    容器和外部 通过 Docker网卡到宿主机网卡

    容器之间相互访问的方法
    1.A访问B 进入容器B 查看B的IP 进行访问

    2.docker run时 使用 --link 容器名:映射名
    docker run -d --link myA:A myB b
    在myB容器中使用A 就可以解析到myA容器的IP

    3.docker compose
    通过docker-compose.yml的配置 来启动并运行多个容器
    https://www.bilibili.com/video/av61131351

    docker-compose up -d #构建 运行应用程序
    https://www.runoob.com/docker/docker-compose.html
    容器之间通过docker-compose.yml中的名字即可 互相访问

  • 相关阅读:
    getline在windows系统下的怪现象
    android camera根据屏幕图像大小设置显示
    android camera以时间来命名照片文件
    android 基本的画图方法
    android 开发使用剪切板传递数据
    用keytool生成一个自签名证书,并导出到文件
    VBA,两个sheet根据第一列id相同比较其余列,不同的值放到sheet3中
    摄像头视频采集压缩及传输
    Extjs 3根据数据库动态生成checkboxgroup(extjs系列1)
    Extjs 3,jstl根据数据库数据自动构建FormPanel(Extjs系列2)
  • 原文地址:https://www.cnblogs.com/shinyrou/p/13450960.html
Copyright © 2011-2022 走看看