docker学习笔记

简介

容器与管理程序虚拟化有所不同,管理程序虚拟化通过中间层将一台或多台独立的机器虚拟运行于物理硬件之上,而容器则是直接运行在操作系统内核之上的用户空间。
由于客居于操作系统,容器智能运行与底层宿主机相同或相似的操作系统。

docker组件

  • Docker客户端和服务端

    docker是C/S架构的程序

  • Docker镜像

    镜像相当于容器的"源代码"。体积小,易于分享,存储和跟新。

  • Registry

    docker用registry来保存用户构建的镜像。类似gitHub,docker仓库是docker hub.

  • Docker容器

    包含了:

    • 一个镜像格式
    • 一系列标注操作
    • 一个执行环境

docker能做什么

  • 加速本地开发和构建流程,使其更加高效,更加轻量化。
  • 能够让独立服务或应用程序在不同的环境中,得到相同的运行结果。
  • 用docker创建隔离的环境来进行测试。
  • 构建一个多用户的平台Pass
  • 高性能、超大规模的宿主机部署
  • ......

docker相关命令

docker rmi $(docker images --filter dangling=true -q)

执行这条命令删除pull过程或者create过程产生的临时镜像,剩下的都是有用的镜像。镜像是一层层叠加起来的,你使用的是带名字和tag的发布镜像,那些中间镜像没有名字,只有哈希,所以叫none。。

docker run -it --name hahah ubuntu /bin/bash

查找本地是否存在ubuntu:latest镜像
存在就启动

不存在就从docker hub查找镜像下载保存到本地

使用ubuntu镜像创建一个容器

--name 指定容器别名

-d 将容器放到后台运行

docker rm 删除容器

删除所有容器

<pre> docker rm docker ps -a -q</pre>

docker start 启动容器

docker restart 重启容器

docker stop $name 停止容器

docker attach 进入容器会话

docker logs 获取守护容器的日志

docker logs -f 跟踪守护式容器的日志

  • 查看当前系统中的容器列表

docker ps -a

  • 查看容器内的进程

    docker top $name

  • 在容器内部运行进程

    • 在容器中运行后台任务

    docker exec -d $name touch /etc/new_config_file

    -d 表叔运行一个后台进程

    • 在容器内运行交互命令

      docker exec -i -t $name /bin/bash

      -i -t 创建tty并捕捉STDIN

  • 自动重启容器

    docker run --restart=always --name $name -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

    --restart=on-failure

    --restart=on-failure:3

  • 深入容器,对容器进行详细的检查返回其配置信息

    docker inspect $name

构建镜像

查找镜像

docker search ubuntu

构建镜像

  • docker commit 命令
  • docker build命令和Dockerfile文件
docke commit
  1. 进入一个基础容器

  2. 修改容器内容

  3. docker commit
    docker commit -m '提交信息' --authon="justudy" $name justudy/nginx:webserver

    justudy/nginx指定了镜像的用户名和仓库名,并增加了一个webserver标签

    可以使用 docker inspect justudy/nginx:webserver 查看镜像信息。

用Dockerfile构建镜像

Dockerfile使用基本的基于DSL语法的指令来构建一个Docker镜像,之后使用docker build命令基于该Dockerfile中的指令构建一个新的镜像

大致流程:

  1. docker从基础镜像运行一个容器
  2. 执行一条指令,对容器做出修改
  3. 执行类型docker commit 的操作,提交一个新的镜像层
  4. docker在基于刚提交的镜像运行一个新容器
  5. 执行dockerfile的下一条指令,知道所有指令都执行完毕

编写好Dockerfile
执行dockerbuild

  1. 构建镜像时设置标签

    docker build -t 'justudy/demo:v1' .

  2. 从git仓库构建docker镜像

    docker build -t 'justudy/demo:v1' git@github.com:justudy/demo

Dockerfile指令

  1. CMD

    CMD指令用于指定一个容器启动时要运行的命令
    CMD ["/bin/bash", "-1"]
    在Dockerfile中只能指定一条CMD命令

  2. ENTRYPOINT

    ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;"]

    docker run 后面带的命令会作为参数传递给ENTRYPOINT

  3. WORKDIR

    从镜像创建一个新容器时,在容器内部设置一个工作目录。CMD和ENTRYPOINT指定的程序会在这个目录下执行。

    WORKDIR /opt/webapp/db
    RUN bundle install
    WORKDIR /opt/webapp
    ENTRYPOINT ["rackup"]
    

    docker run -w 可指定工作目录

  4. ENV

    ENV指令用来在镜像构建过程中设置环境变量
    ENV RVM_PATH /HOME/RVM

    ENV TARGET_DIR /opt/app
    WORKDIR $TARGET_DIR
    

    docker run -e "TARGET_DIR=/opt/app" -e传递环境变量

  5. USER

    USER指定用来指定该镜像以什么样的用户去执行

    USER nginx

    docker run -u 命令指定用户

  6. VOLUME

    用来向基于镜像创建的容器添加卷,一个卷式可以存在于一个或者多个容器内的特定目录。
    VOLUME ["/opt/project"]

  7. ADD

    用来讲构建环境下的文件和目录复制到镜像中

    ADD _linux/var/spool/cron/crontabs/root /var/spool/cron/crontabs/root

  8. COPY

    COPY不会提取解压文件
    COPY ./composer.json /app/

  9. ONBUILD
    为镜像添加触发器,当一个镜像被用作其他镜像的基础镜像时,该镜像的触发器将会执行

ONBUILD ADD . /app/src
ONBUILD RUN cd /app/src && make

将镜像推送到Docker Hub

镜像构建完毕,将他上传到docker hub。
docker push youruser/yourimage

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • Docker 学习目标: 掌握Docker基础知识,能够理解Docker镜像与容器的概念 完成Docker安装与启...
    执笔梦一场阅读 3,176评论 2 10
  • 最近赶上项目快要上线, 一直没有时间更新博客, 今天终于有空可以更新了......在前面的章节中, 我们介绍了Do...
    春风知桺阅读 376评论 0 1
  • 【版权声明】本博客转载自汤小洋 一、Docker简介 1. Docker是什么? ​ 产生背景: 开发和运维之...
    云未声阅读 447评论 0 7
  • 一、Docker学习笔记 撸一门技术,必先登其官网,扒其皮,喝其血 官网地址:https://docs.docke...
    Waldeinsamkeit4阅读 533评论 1 4
  • 近来发现docker越来越受欢迎了,而且看起来,docker的热度还远没有到达顶峰,或许在这个云服务时代的大背景下...
    尽情的嘲笑我吧阅读 514评论 0 5