zoukankan      html  css  js  c++  java
  • Docker学习笔记1 -- 刚入手docker时的几个命令

    Hello World

    docker run ubuntu:15.10 /bin/echo "Hello world"
    
    • docker 是命令二进制文件
    • run 运行一个容器
    • ubuntu:15.10 镜像名称,通过是名字加版本号
    • 后面是容器里执行的任务

    交互式,进入镜像内部

     docker run -i -t ubuntu:15.10 /bin/bash
    
    • -t:在新容器内指定一个伪终端或终端。
    • -i:允许你对容器内的标准输入 (STDIN) 进行交互。

    后台运行

    # docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
    6e42dee957d59d818d0d21bbf0ff8b2bc84d1006baa2696e81f33e023d3e2c04
    
    # docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    6e42dee957d5        ubuntu:15.10        "/bin/sh -c 'while t…"   2 seconds ago       Up 1 second                             sad_villani
    
    # docker logs 6e42dee957d5
    hello world
    hello world
    hello world
    

    停止运行

    # docker stop  6e42dee957d5
    6e42dee957d5
    

    容器

    载入镜像

     docker pull training/webapp 
    

    运行应用

    # docker run -d -P training/webapp python app.py
    
    # docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
    c99a63cd5cb3        training/webapp     "python app.py"     4 seconds ago       Up 3 seconds        0.0.0.0:32769->5000/tcp   jovial_elion
    
    # curl localhost:32769
    Hello world!
    
    • -d:让容器在后台运行。
    • -P:将容器内部使用的网络端口映射到我们使用的主机上。本地端口是32769,映射内部端口5000.

    指定端口映射

    [root@bigdata-base-001 ~]# docker run -d -p 5000:5000 training/webapp python app.py
    458bb7a6520a46e74137032770f846a5faf9afb43b6ba324667d4b1936566ea0
    [root@bigdata-base-001 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS                     NAMES
    458bb7a6520a        training/webapp     "python app.py"     4 seconds ago        Up 3 seconds        0.0.0.0:5000->5000/tcp    wizardly_babbage
    c99a63cd5cb3        training/webapp     "python app.py"     About a minute ago   Up About a minute   0.0.0.0:32769->5000/tcp   jovial_elion
    [root@bigdata-base-001 ~]# curl localhost:5000
    Hello world!
    

    可以发现运行两个应用,但对应本地不同的端口

    查看日志

    # docker logs 458bb7a6520a
     * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
    172.17.0.1 - - [03/Jan/2019 14:13:38] "GET / HTTP/1.1" 200 -
    

    tail日志

    # docker logs -f 458bb7a6520a
     * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
    172.17.0.1 - - [03/Jan/2019 14:13:38] "GET / HTTP/1.1" 200 -
    
    
    

    查看应用的进程

    # docker top 458bb7a6520a
    UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
    root                14801               14765               0                   22:13               ?                   00:00:00            python app.py
    

    登入镜像内部

    docker exec  -it 458bb7a6520a /bin/bash
    

    移除容器

    docker rm c99a63cd5cb3
    

    查看最近一次创建的容器

    # docker ps -l
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                            PORTS               NAMES
    458bb7a6520a        training/webapp     "python app.py"     20 minutes ago      Exited (137) About a minute ago                       wizardly_babbage
    

    镜像

    查看本地镜像

    docker images           
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    ubuntu              14.04               90d5884b1ee0        5 days ago          188 MB
    php                 5.6                 f40e9e0f10c8        9 days ago          444.8 MB
    

    拉取镜像

    docker pull ubuntu:13.10
    

    查找镜像

    docker search httpd
    

    更新镜像

    首先进入镜像

    docker run -t -i ubuntu:15.10 /bin/bash
    root@e218edb10161:/# apt-get update
    

    更新后,提交副本

    # docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
    sha256:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8
    
    • -m:提交的描述信息
    • -a:指定镜像作者
    • e218edb10161:容器ID
    • runoob/ubuntu:v2:指定要创建的目标镜像名

    构建镜像

    使用docker build通过Dockerfile构建镜像。

    一个示例Dockerfile

    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
    

    构建

    $ docker build -t runoob/centos:6.7 .
    Sending build context to Docker daemon 17.92 kB
    Step 1 : FROM centos:6.7
     ---> d95b5ca17cc3
    Step 2 : MAINTAINER Fisher "fisher@sudops.com"
     ---> Using cache
     ---> 0c92299c6f03
    Step 3 : RUN /bin/echo 'root:123456' |chpasswd
     ---> Using cache
     ---> 0397ce2fbd0a
    Step 4 : RUN useradd runoob
    ......
    
    • -t :指定要创建的目标镜像名
    • . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
    # docker images | grep run
    runoob/centos                                              6.7                 b9f70b080d42        12 seconds ago      191MB
    
    

    使用镜像来创建容器

    # docker run -t -i runoob/centos:6.7  /bin/bash
    

    设置镜像标签

    # docker tag b9f70b080d42  runoob/centos:dev
    
    # docker images | grep run                  
    runoob/centos                                              6.7                 b9f70b080d42        3 minutes ago       191MB
    runoob/centos                                              dev                 b9f70b080d42        3 minutes ago       191MB
    

    镜像标签可以理解为版本号。比如我们项目demo的版本是1.5.1,那么标签可以是:

    -- 构建一个镜像,名称是ryan/demo, tag是1.5.1
    docker build -t ryan/demo:1.5.1 .
    
    -- 因为这个镜像是最新的,将指针latest 指向这个
    docker tag ryan/demo:1.5.1  latest
    
    -- 对于版本1来说,这也是最新的
    docker tag ryan/demo:1.5.1  1
    

    也就是说,tag可以有多个对应的是同一个镜像。

  • 相关阅读:
    一致性哈希算法
    Tcp 3次握手 4次挥手
    计算机字符编码编年史
    虚拟机字节码指令表 JVM
    计算机是如何计算的、运行时栈帧分析(神奇i++续)
    神奇的i++
    记一次 springboot 参数解析 bug调试 HandlerMethodArgumentResolver
    String+、intern()、字符串常量池
    签名和加密的区别(详细)
    java之设计模式汇总
  • 原文地址:https://www.cnblogs.com/woshimrf/p/learn-docker-note1.html
Copyright © 2011-2022 走看看