Docker学习(7) Docker容器

Docker学习(7) Docker容器

Docker容器——简介

  • 容器是镜像的运行时实例
  • 启动容器使用docker container run 命令
lhf@lhf-virtual-machine:~$ docker container run -it ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
22e816666fd6: Pull complete 
079b6d2a1e53: Pull complete 
11048ebae908: Pull complete 
c58094023a2e: Pull complete 
Digest: sha256:a7b8b7b33e44b123d7f997bd4d3d0a59fafc63e203d17efedf09ff3f6f516152
Status: Downloaded newer image for ubuntu:latest
root@0cfde51e6cf0:/# 
  • -it 参数:使当前终端连接到容器的shell终端之上。
  • 容器会随着运行应用的退出而终止。
  • 启动一个容器并运行sleep命令休眠10秒,然后退出
lhf@lhf-virtual-machine:~$ docker container  run alpine:latest sleep 10
  • 停止容器:docker container stop
  • 开启容器:docker container start
  • 杀死容器:docker container rm

Docker容器——详解

容器VS虚拟机

  • 虚拟机是占用宿主机的物理资源:如CPU,RAM、存储,将物理资源资源划分为虚拟资源
  • 容器:OS占用全部硬件资源,在OS之上,需要安装容器引擎。容器引擎可以获取系统资源:比如进程树、文件系统及网络桟、、
    • 将系统分割为安全且相互隔离的系统结构,称之为容器。
  • 虚拟机:硬件虚拟化——将硬件物理资源划分为虚拟资源
  • 容器:操作系统虚拟化——将操作系统资源划分为虚拟资源

虚拟机的额外开销

  • 虚拟机模型将底层硬件资源划分为虚拟机当中。每个虚拟机的操作系统都会造成额外的开销。
  • 容器模型在宿主操作系统中运行单个内核。——容器与宿主机共享一个操作系统/内核,所有只消耗一个OS的损耗。

检查Docker Daemon

  • 登录到docker主机的第一件事情就是检查docker是否正常运行
lhf@lhf-virtual-machine:~$ docker version
Client: Docker Engine - Community
 Version:           19.03.4
 API version:       1.40
 Go version:        go1.12.10
 Git commit:        9013bf583a
 Built:             Fri Oct 18 15:53:51 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.4
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.10
  Git commit:       9013bf583a
  Built:            Fri Oct 18 15:52:23 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.10
  GitCommit:        b34a5c8af56e510852c35414db4c1f4fa6172339
 runc:
  Version:          1.0.0-rc8+dev
  GitCommit:        3e425f80a8c931f88e6d94a8c831b9d5aa481657
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
  • 如果普通用户使用docker遇到权限问题——通过添加docker组解决
    • usermon -aG docker <user>

启动一个简单容器

  • 启动ubuntu容器
lhf@lhf-virtual-machine:~$ docker container run -it ubuntu:latest /bin/bash
root@931328b30484:/# 
  • 当输入完命令,敲回车后。docker的运行流程
  1. Docker客户端选择合适的API来调用docker daemon
  2. docker daemon接受命令来搜索本地docker缓存,观察是否有命令请求的镜像。
  3. 一旦镜像拉取到本地,daemon后创建容器并运行指定的应用。

容器进程

  • 启动ubuntu容器时,让容器运行Bash Shell (/bin/bash)
  • 是Bash Shell 成为ubuntu容器中运行且唯一运行的进程
  • 查看进程
root@931328b30484:/# ps -elf
F S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root          1      0  0  80   0 -  4627 wait   16:49 pts/0    00:00:00 /bin/bash
4 R root         15      1  0  80   0 -  8600 -      16:56 pts/0    00:00:00 ps -elf

容器的生命周期

  • 容器可以做持久化数据
  • 创建一个名为percy的容器,验证容器持久化
lhf@lhf-virtual-machine:~$ docker container  run --name percy -it ubuntu:latest /bin/bash
root@4b56ad9da088:/# cd /tmp 
root@4b56ad9da088:/tmp# ls -l
total 0
root@4b56ad9da088:/tmp# echo "docker container run" > newfile
root@4b56ad9da088:/tmp# ls -l
total 4
-rw-r--r-- 1 root root 21 Oct 26 17:01 newfile
root@4b56ad9da088:/tmp# cat newfile 
docker container run

  • 退出容器并关闭再启动查看
lhf@lhf-virtual-machine:~$ docker container  run --name percy -it ubuntu:latest /bin/bash
root@5656283002d8:/# lhf@lhf-virtual-machine:~$ 
lhf@lhf-virtual-machine:~$ docker container ls 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
5656283002d8        ubuntu:latest       "/bin/bash"         10 seconds ago      Up 9 seconds                            percy
lhf@lhf-virtual-machine:~$ docker container stop percy
percy
lhf@lhf-virtual-machine:~$ docker container ls 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
lhf@lhf-virtual-machine:~$ docker container start percy
percy
lhf@lhf-virtual-machine:~$ docker container ls 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
5656283002d8        ubunt

lhf@lhf-virtual-machine:~$ docker container ls 
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
5656283002d8        ubuntu:latest       "/bin/bash"         About a minute ago   Up 30 seconds                           percy
lhf@lhf-virtual-machine:~$ docker container exec -it percy bash
root@5656283002d8:/# 

利用重启策略进行容器的自我修复

  • 通常运行容器时配置好重启策略—— 可以在指定事件或者错误后来完成自我修复。
  • 容器支持的重启策略包括:
      • always
      • unless-stopped
      • on-failed
  • always策略:除非容器被明确停止,否则容器会只有重启处于停止状态的容器
lhf@lhf-virtual-machine:~$ docker container run --name neversaydie -it --restart always alpine sh
/ # exit
lhf@lhf-virtual-machine:~$ docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
d41ee829e5b7        alpine              "sh"                15 seconds ago      Up 4 seconds                            neversaydie

  • always和unless-stopped最大的区别,就是那些指定了--restart unless-stopped并处与stopped状态的容器,不会再docker daemon重启的时候重启
  • on-failes 策略会在退出容器并返回值不是1 的时候重启

Web服务器实例

lhf@lhf-virtual-machine:~$ docker container run -d --name webserver -p 80:8080 nigelpoulton/pluralsight-docker-ci
Unable to find image 'nigelpoulton/pluralsight-docker-ci:latest' locally
latest: Pulling from nigelpoulton/pluralsight-docker-ci
Image docker.io/nigelpoulton/pluralsight-docker-ci:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
a3ed95caeb02: Pull complete 
3b231ed5aa2f: Pull complete 
7e4f9cd54d46: Pull complete 
929432235e51: Pull complete 
6899ef41c594: Pull complete 
0b38fccd0dab: Pull complete 
Digest: sha256:7a6b0125fe7893e70dc63b2c42ad779e5866c6d2779ceb9b12a28e2c38bd8d3d
Status: Downloaded newer image for nigelpoulton/pluralsight-docker-ci:latest
3167e2ac812bcb5d5ba605bd1ebeec9880e4272a8202a3a8ef8680cc3947ab00
lhf@lhf-virtual-machine:~$ 

  • -d参数:在后台运行。

  • -p参数:将docker主机的端口映射到容器内

  • 开启网页查看

7.png

查看容器详情

  • 使用命令docker container inspect来查看容器的启动时的应用列表
lhf@lhf-virtual-machine:~$ docker container  ls
CONTAINER ID        IMAGE                                COMMAND                  CREATED             STATUS              PORTS                  NAMES
3167e2ac812b        nigelpoulton/pluralsight-docker-ci   "/bin/sh -c 'cd /src…"   5 minutes ago       Up 5 minutes        0.0.0.0:80->8080/tcp   webserver
lhf@lhf-virtual-machine:~$ docker container  inspect 3167e2ac812b
<snip>
           "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "e20f36059636d1f85225d1ecc5db1163eea9acca6752b31d02a4f4636b5fad78",
                    "EndpointID": "f880825948dbbf3b84601603b1d51ae88b2c6343b01bb4a01ab633584a8fac26",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }

快速清理

  • 快速清理docker主机上全部运行的容器
lhf@lhf-virtual-machine:~$ docker container  rm $(docker container ls -aq) -f
3167e2ac812b
lhf@lhf-virtual-machine:~$ docker container  ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

容器——命令

  • docker container run:启动rongq

  • Ctrl-PQ:断开Shell与容器的连接

  • docker container ls:列出运行状态的容器

  • docker container exec:允许用户在运行状态的容器,启动一个新的进程。

  • docker container stop:停止运行中的容器。

  • docker container start:重启处于停止状态的容器。

  • docker container rm:删除停止状态的容器。

  • docker container inspect:显示容器的配置细节和运行时信息。

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

推荐阅读更多精彩内容

  • 一、Docker 简介 Docker 两个主要部件:Docker: 开源的容器虚拟化平台Docker Hub: 用...
    R_X阅读 4,382评论 0 27
  • 《Docker从入门到实践》阅读笔记 原书地址: https://yeasy.gitbooks.io/docker...
    GuoYuebo阅读 11,359评论 1 39
  • 一 、什么是 Docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国...
    Blazzer阅读 3,130评论 0 13
  • 一支烟 被火柴点燃后 便已是告别 尼古丁 浸入肺、血液和骨骼 最后击中心脏 舌尖丝丝缠绕 齿缝间许多话 迷失在一场...
    梦怀云阅读 310评论 0 4
  • 我好讨厌这种把你当情绪垃圾桶的人啊。 所以是不是要适当地对待任何一种感情。做到游刃有余。
    小草白and杀猪刀阅读 95评论 0 0