Docker入门

1.测试docker是否存在

  • sudo docker info
    返回docker的基本信息
$ sudo docker info
//出现一下内容
Containers: 2
 Running: 0
 Paused: 0
 Stopped: 2
Images: 1
...

2.运行第一个容器

$ sudo docker run -i -t ubuntu /bin/bash
//开始下载容器并运行
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
473ede7ed136: Pull complete 
c46b5fa4d940: Pull complete 
93ae3df89c92: Pull complete 
6b1eed27cade: Pull complete 
Digest: sha256:29934af957c53004d7fb6340139880d23fb1952505a15d69a03af0d1418878cb
Status: Downloaded newer image for ubuntu:latest
root@363ed45619ae:/# 
  • 注意 可通过 docker help 或者 man docker-run 来获取 docker的命令列表
  • 解析:
    sudo docker run -i -t ubuntu /bin/bash
    其中-i 标志保证容器中STDIN是开启的,持久的标准输入,-t标志是告诉docker为要创建的容器分配一个伪tty终端。 Ubuntu是 创建一个Ubuntu镜像,同时告诉新容器中要运行:/bin/bash 命令。所以就到:root@363ed45619ae:/# 。

3.使用容器

其中容器ID 363ed45619ae 。 也是它的主机名。

root@363ed45619ae:/home# hostname
363ed45619ae
root@363ed45619ae:/home# cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2  363ed45619ae
  • 网络配置
root@363ed45619ae:/home# ip a
  • 检查容器进程
root@363ed45619ae:/home# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  18508  3428 pts/0    Ss   07:34   0:00 /bin/bash
root        21  0.0  0.0  34400  2860 pts/0    R+   07:47   0:00 ps -aux
  • 在容器中安装软件包
root@363ed45619ae:~# apt-get upate    root@363ed45619ae:~# apt-get install vim 
  • 退出容器
exit

退出后,回到自己的物理机

  • 查看当前系统中的容器列表
$ sudo docker ps -a 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
363ed45619ae        ubuntu              "/bin/bash"         19 minutes ago      Exited (0) 31 seconds ago                       keen_boyd
31ef04a4ff1b        hello-world         "/hello"            3 days ago          Exited (0) 3 days ago                           gifted_austin
e4166694ac7c        hello-world         "/hello"            3 days ago          Exited (0) 3 days ago                           brave_kare
  • 查看最后一次运行的容器
$ sudo docker ps -a -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                          PORTS               NAMES
363ed45619ae        ubuntu              "/bin/bash"         20 minutes ago      Exited (0) About a minute ago                       keen_boyd

4.容器命名

--name 标志

$ sudo docker run --name hiekay_container -i -t ubuntu /bin/bash
root@989f63da27d3:/# exit
exit

$ sudo docker ps -a -l                                          
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
989f63da27d3        ubuntu              "/bin/bash"         26 seconds ago      Exited (0) 8 seconds ago                       hiekay_container

合法的容器名称符合: [a-zA-Z0-9_·-]

5.重启停止的容器

可以通过容器名称 或则 容器ID

$ sudo docker start hiekay_container
hiekay_container

$ sudo docker start 989f63da27d3                
989f63da27d3

6.附着到容器上

docker容器重新启动的时候 会重启一个交互式会话shell,我们可以用 docker attach 重新附着到该容器会话上 , 可通过容器 name 或者 ID 。

$ sudo docker attach hiekay_container
root@989f63da27d3:/#

$ sudo docker attach 989f63da27d3
root@989f63da27d3:/#

7.创建守护式容器

除了交互式运行的容器,大部分是需要创建长期运行的容器, 守护式容器 没有交互式会话,适合运行应用程序和服务。
实例:

$ sudo docker run --name demo -d ubuntu /bin/sh -c "while true; do echo hello world; sleep1; done" 
ea6e0fecba4f5185f62e2a46851882572bdb465fccfdac6b27a64ea9ff3cedc9

其中-d参数 是标志让容器放在后台运行。
其中 命令是让 运行一个 while 循环 一直打印 hello world ,直到容器或进程停止。

  • 可通过 docker ps命令 查看 正在运行的容器
$ sudo docker ps                                                                                   
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
ea6e0fecba4f        ubuntu              "/bin/sh -c 'while t…"   2 minutes ago       Up 2 minutes                            demo
8.查看容器内部的工作
  • docker logs
$ sudo docker logs demo
hello world
hello world
hello world
......

也可以用 -f参数来监控日志

$ sudo docker logs -f demo

也可以用 tail 命令看最后的几行日志

sudo docker logs --tail 10  demo
或
sudo docker logs --tail 0 -f  demo

9.查看容器内的进程

  • docker top
$ sudo docker top demo                                                        
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                31469               31448               99                  16:11               ?                   00:09:46            /bin/sh -c while true; do echo hello world; sleep1; done

10.在容器内运行进程

  • docker exec
    两种类型:后台任务 和 交互式任务
  • 后台任务
$ sudo docker exec -d demo touch /etc/new_file1
  • 交互式任务
$ sudo docker exec -t -i demo /bin/bash        
root@ea6e0fecba4f:/# 

11.停止守护式容器

  • docker stop name/ID
$ sudo docker stop demo 
或
$ sudo docker stop ea6e0fecba4f 
  • 注意: 也可以通过docker kill 关闭

12.自动重启容器

  • 自动重启标志: --restart
$ sudo docker run --restart=always --name demo -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done" 
  • 注意: --restart 被设置为 always ,无论退出代码是什么,一直会自动重启。
    还可以设置为: on-failure 只有当退出代码为0的时候才会自动重启,也可以传参数: 5, 重启次数。
    --restart=on-failure:5

13.深入容器

  • docker inspect 获取更多容器信息
$ sudo docker inspect demo
//获取的信息
[
    {
        "Id": "ea6e0fecba4f5185f62e2a46851882572bdb465fccfdac6b27a64ea9ff3cedc9",
        "Created": "2018-10-29T08:11:49.219017867Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true; do echo hello world; sleep1; done"
        ],
......
  • 可以用 -f 或 --format 标志来选定查看结果 ,支持完整的Go语言模板
    例子:
    查看容器的运行状态
$ sudo docker inspect --format='{{.State.Running}}' demo 
//返回
false

查看容器IP

$ sudo docker inspect --format='{{.NetworkSettings.IPAddress}}' demo

查看多个容器的信息

$ sudo docker inspect --format='{{.Name}} {{.State.Running}}' demo demo1
/demo false
/demo1 false

14.删除容器

  • docker rm name/ID
$ sudo docker rm demo1                                                                                                
demo1
  • 注意:删除之前 必须先关闭

  • 删除所有

$ sudo rm 'docker ps -a -q '

解析:docker -a 列出所有容器,-q 返回ID, 然后传给 sudo rm ID , 即可删除。

15. 小结

docker 基础,请多联系。

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

推荐阅读更多精彩内容

  • Docker入门 Docker命令官方示例 [toc] 1. Docker架构 1.1 Docker镜像与Dock...
    CaiGuangyin阅读 1,837评论 2 6
  • docker状态 该命令会返回所有容器和镜像的数量、docker使用的驱动程序和存储驱动,以及docker的基本配...
    dshowing阅读 6,357评论 0 2
  • 1、Docker与虚拟机的优缺点 2、Docker基本架构 Docker是一个构建、发布、运行分布式应用的平台,包...
    wangw2030阅读 391评论 0 0
  • edenmandom 之人生導師曼德拉先生之諺語
    黑貓子阅读 877评论 0 0
  • 这株小麦苗 使劲地吮吸雨露 争夺肥料 它颜色分外绿 苗株格外高 到了夏收季节 不接麦子 但生一个灰包
    淋湿的雨6996阅读 485评论 0 1