• 写了点Docker笔记


    容器,可以理解为“打包好的程序运行环境”。对开发、运维、测试三方来说,都需要搭建同一套环境,因此容器技术可以为三方都提供了一套便捷可复现的程序运行环境。

    我们如果将机器看作程序运行的环境,那么打包好的虚拟机也可以被理解为一种”打包好的程序运行环境“。容器与虚拟机对比,其最大的优点在于 轻量化。虚拟机通常包括了完整的独立的操作系统功能,而容器则可以通过共享操作系统来实现轻量化。相比于虚拟机中操作系统GB级别的内存占用,容器则可以做到MB级别。

    容器技术只隔离应用程序的运行时环境,但容器之间可以共享同一个操作系统,这里的运行时环境指的是程序运行依赖的各种库以及配置。

    从性能上说,容器能够达到与物理机系统几乎一致的执行性能,而且体积小,启动快,总之优点可以浓缩成一个字——

    但是缺点也很多,以docker为例:

    • 采用client-server方式,如果server宕机那么所有容器都寄了。
    • debug很麻烦,非常麻烦
    • 虚拟机,比如openstack可以通过neutron来灵活构建各种网络架构,而docker在网络方面的支持不大行
    • 相较于虚拟机,容器无法实现“Build once,run everywhere”,因为容器技术只是打包了用户空间的系统调用,但是系统调用真正执行的地方在于宿主的内核。因此如果宿主的内核版本不同,则行为不一定一致。

    docker是基于Go语言开发的一个开源的容器技术实现。

    docker的实现是基于Linux系统的NameSpace和Control Groups机制的,因此必须部署在Linux系统上。windows和mac上使用的Docker Desktop本质上还是在Linux虚拟机上安装Docker。


    docker的应用场景包括:

    • Web应用的自动化打包和发布:对一些自动化构建与部署工具,其会从源代码仓库拉取代码后打包,构建成功后写入到docker镜像后推送到镜像服务器,然后通知应用服务器拉取镜像文件启动应用
    • 数据科学中更好的复现:Kaggle等很多DM竞赛中会要求参赛者提供自己的docker镜像,以进行复现
    • 微服务架构:容器技术为微服务的解耦和持续交付提供了便利
    • QPS扩容:新增一个容器可以轻松地对当前网络服务进行水平扩展,提高对高峰流量的抵抗能力
    • 培训小白:丢给他一个docker镜像,轻松保证了开发环境的一致性

    docker中有几个概念:

    • Dockerfile:容器对象的配置文件
    • image:docker根据dockerfile所生成的镜像对象
    • container:容器实体所运行的进程
    • docker registry:docker镜像的仓库

    而一个基本的容器部署过程可以被描述为:

    1. 根据需求,编写dockerfile
    2. 执行docker build,docker对dockerfile进行“编译”,得到image
    3. 指定一个image执行docker run,docker将其加载到内存中启动,对应的进程就是container

    docker指令

    docker run来在容器内指定运行一个镜像并执行一定指令

    docker run ubuntu:latest /bin/echo "hello world"
    
    • -i:允许对容器内的标准输入进行交互
    • -t:在容器内指定一个终端进行交互
    • -d:让容器在后台运行
    • --name:指定容器的名称
    • -P:让容器内部的网络端口随机映射到我们的主机上
    • -p:指定端口映射规则,比如-p 3000:5000将容器的5000端口映射到主机的3000端口上
    • -v:挂载主机的目录到容器中,比如-v /mydir:/data将主机的mydir目录同步挂载到容器的data目录
    • --volumes-from:指定另一个镜像,并使两者共享其挂载点

    docker rm 移除指定容器

    • -f:强制移除

    docker start 启动一个已停止的容器,包含了对容器文件系统的挂载

    docker stop 关闭一个正在运行的容器,包含了对容器文件系统的卸载

    docker restart 重启一个容器(可以是正在运行的),不包含对容器文件系统挂载或卸载

    docker exec进入一个正在运行的容器(后台运行中)


    docker ps来查看当前本机的所有容器及其状态

    • -a:打印详细信息

    docker images 查看当前主机上的所有镜像和状态

    docker logs 查看指定容器内部的标准输出

    • -f:实时监控并刷新输出

    docker pull 从镜像仓库中拉取或更新指定镜像

    docker search 从镜像仓库中搜索指定镜像

    docker rmi 删除指定镜像


    docker export 导出指定容器,得到一个镜像的快照文件。常用于制作基础镜像

    • -o:指定导出的文件

    docker import 导入指定快照文件。支持通过网络导入


    构建自己的镜像需要编写Dockerfile

    Dockerfile的每一行会依次执行,其效果相当于在基础镜像上套上一个新的层。Dockerfile中最多127层。每个指令的前缀必须大写

    FROM    centos:6.7
    MAINTAINER      Fisher "fisher@sudops.com"
    
    RUN     /bin/echo 'root:123456' |chpasswd
    RUN     useradd runoob
    RUN     /bin/echo 'runoob:123456' |chpasswd
    RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
    EXPOSE  22
    EXPOSE  80
    CMD     /usr/sbin/sshd -D
    
    • FROM:指定基础镜像源
    • MAINTAINER:声明构建者
    • RUN:执行命令
    • ENV:声明环境变量
    • ADD:添加主机文件到容器中(压缩文件会自动解压)
    • COPY:添加主机文件到容器中
    • WORKDIR:指定工作目录
    • EXPOSE:指定容器内应用可使用的端口
    • CMD:启动容器时默认执行的命令。如果在docker run时指定了启动指令,则该条被覆盖
    • VOLUME:在容器内新建主机目录的挂载点。但是不能指定主机上对应的目录,只相当于声明了“该容器有这些挂载点”

    docker build 将Dockerfile构建为镜像文件

    • -t:指定镜像名称与版本
    • -f:指定Dockerfile文件路径
  • 相关阅读:
    LeetCode Arithmetic Slices
    LeetCode Number of Longest Increasing Subsequence
    LeetCode Longest Increasing Subsequence
    shrio注解的方式进行权限控制
    30分钟学会如何使用Shiro(转自:http://www.cnblogs.com/learnhow/p/5694876.html)
    eclipse逆向生成实体类
    redis2.3.7安装时出现undefined reference to `clock_gettime'
    使用Nginx+Lua(OpenResty)开发高性能Web应用
    shrio初体验(2)Realm
    shrio初体验(1)
  • 原文地址:https://www.cnblogs.com/neumy/p/15858110.html
Copyright © 2020-2023  润新知