zoukankan      html  css  js  c++  java
  • docker practice

    Docker三个基本概念:

    镜像Image:分层存储Union FS,静态不变;Ubuntu/Debian有UnionFS较优,而CentOS/RHEL只有devicemapper,loop-lvm、direct-lvm都较差,/var/lib/docker还会不断增大(删除镜像也没用)

    容器Container:运行镜像时再封装容器存储层,容器可以创建、启动、停止、删除、暂停等,持久化数据应使用数据卷Volume、或绑定宿主目录

    仓库Repository:user/image:tag,user默认library,tag默认latest,常用服务有hub.docker.com、quay.io,国内:daocloud.io,私服有Nexus

    镜像补丁:

    docker run --name webserver -d -p 80:80 nginx # 访问 http://localhost
    docker exec -it webserver bash  # 修改 /usr/share/nginx/html/index.html
    docker diff webserver # 查看有哪些变化,容器停止后会丢失修改;缺点:变化太多,暗箱操作,镜像臃肿
    docker commit --author "name <email>" --message "vi index.html" webserver nginx:v2 # 保存容器为新镜像 nginx:v2
    docker history nginx:v2 # 查看 nginx:v2 历史
    docker run --name web2 -d -p 81:80 nginx:v2 # 运行新镜像

    镜像定制:scratch,特殊空白镜像,是个虚拟概念,并不实际存在;swarm、coreos/etcd等不以系统为基础,直接复制可执行文件,因此镜像极为小巧,go语言特别适合容器微服务架构

    FROM nginx
    RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
    docker build -t nginx:v3 . # 构建镜像,最后的点是指定上下文,COPY ./package.json /app/,是从上下文来查找package.json文件

    服务类:nginx、redis、mongo、mysql、httpd、php、tomcat;语言类:node、openjdk、python、ruby、golang;系统类:ubuntu、debian、centos、fedora、alpine

    RUN有两种格式:RUN cmd,RUN ["exe", "arg1", "arg2"],每个RUN都会增加一层,docker限制127层(曾经是限42层),多个命令可以&&串联

    FROM ubuntu:16.04
    RUN apt-get update 
    && apt-get install -y curl 
    && rm -rf /var/lib/apt/lists/*
    ENTRYPOINT [ "curl", "-s", "http://ip.cn" ]  # CMD [ "curl", "-s", "http://ip.cn" ] CMD表示容器启动时执行命令,而ENTRYPOINT会将CMD当作参数
    docker run myip -i # 对于CMD会被-i覆盖而报错,而ENTRYPOINT则会附加参数-i
    VOLUME /data # 匿名卷,写入时不进入容器存储层,从而保证容器存储层的无状态化
    docker run -d -v mydata:/data xxxx # 挂载宿主目录,数据持久化

     容器管理

    docker attach cli  # exit退出会导致容器停止
    docker exec -it cli bash # exit退出容器不会停止,-it表示有tty交互界面
    docker rm -f $(docker ps -qa) # 停止所有运行容器,然后删除
    docker conotainer prune # 删除所有已停止的容器

    虚拟网络

    docker network create -d bridge my-net  # -d 支持bridge、overlay,后者用于swarm mode
    docker run -it --rm --name busybox1 --network my-net busybox sh # 运行容器并加入网络
    docker run -it --rm --name busybox2 --network my-net busybox sh # ping busybox1,会自动解析成ip并成功
  • 相关阅读:
    (补充)10.Hibernate框架的查询方式
    12.Hibernate多对多关系
    11.Hibernate一对多关系
    (补充)06.Hibernate持久化类&持久化对象
    09.Hibernate中的事务与并发
    08.Hibernate的一级缓存-->>Session
    07.Hibernate常用的接口和类---Session接口☆☆☆☆☆
    05.Hibernate常用的接口和类---Configuration类和作用
    04.Hibernate常用的接口和类---SessionFactory类和作用
    python学习笔记(字典)
  • 原文地址:https://www.cnblogs.com/xingqi/p/9048064.html
Copyright © 2011-2022 走看看