D~DIDI~DIDIDI!!!!

0%

Docker简单学习

今天简单的去了解了一下Docker,记了些笔记,没有系统的整理,所以非常乱emmmm

  • docker run ubuntu:15.10 /bin/echo "xianyu"

    • docker: Docker 的二进制执行文件。
    • run: 与前面的 docker 组合来运行一个容器。
    • ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
    • /bin/echo “xianyu”: 在启动的容器里执行的命令
  • 1

  • 以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "xianyu",然后输出结果。

  • docker run -i -t ubuntu:15.10 /bin/bash

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

  • docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"

  • 使用该命令创建一个以进程方式运行的容器

  • 3

  • 输出为一串长字符串,即为容器ID,每个容器ID唯一

  • 4

  • 可通过docker ps常看运行中的容器

  • 输出详情介绍:

  • CONTAINER ID: 容器 ID。

  • IMAGE: 使用的镜像。

  • COMMAND: 启动容器时运行的命令。

  • CREATED: 容器的创建时间。

  • STATUS: 容器状态。

  • 状态有7种:

    • created(已创建)
    • restarting(重启中)
    • running(运行中)
    • removing(迁移中)
    • paused(暂停)
    • exited(停止)
    • dead(死亡)
  • PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。

  • NAMES: 自动分配的容器名称。

  • 5

  • 通过 docker logs 命令,可以查看容器内的标准输出

  • 比如:docker logs 659309fcfaac或者docker logs peaceful_leakey

  • 6

  • 使用 docker stop 可以停止容器

  • 运行 web 应用

  • 我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用。

  • docker pull training/webapp # 载入镜像
    docker run -d -P training/webapp python app.py

    • **-d:**让容器在后台运行。
    • **-P:**将容器内部使用的网络端口映射到我们使用的主机上。
  • docker run -d -p 5000:5000 training/webapp python app.py

  • 也可以使用-p 5000:5000手动指定端口,经容器内部5000端口转发到外部server的5000端口

    • -P :是容器内部端口随机映射到主机的高端口。
    • -p : 是容器内部端口绑定到指定的主机端口。
  • 7

  • 使用docker port可以查看端口

  • 8

  • docker logs -f 可以查看web日志

  • 9

  • 提交镜像

  • runoob@runoob:~$ docker commit -m="has update" -a="xianyu" e218edb10161 xianyu/ubuntu:xianyu

    • -m: 提交的描述信息
    • -a: 指定镜像作者
    • e218edb10161:容器 ID
    • xianyu/ubuntu:xianyu: 指定要创建的目标镜像名
  • 构建镜像

  • 我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

  • ```bash
    runoob@runoob:~$ cat Dockerfile
    FROM centos:6.7
    MAINTAINER Fisher “fisher@sudops.com

    RUN /bin/echo ‘root:123456’ |chpasswd
    RUN useradd xianyu
    RUN /bin/echo ‘xianyu:123456’ |chpasswd
    RUN /bin/echo -e “LANG="en_US.UTF-8"“ >/etc/default/local
    EXPOSE 22
    EXPOSE 80
    CMD /usr/sbin/sshd -D

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23

    - 每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。

    - 第一条FROM,指定使用哪个镜像源

    - RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。

    - 然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

    - `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 "[email protected]"
    ---> Using cache
    ---> 0c92299c6f03
    Step 3 : RUN /bin/echo 'root:123456' |chpasswd
    ---> Using cache
    ---> 0397ce2fbd0a
    Step 4 : RUN useradd runoob
    ......
  • 参数说明:

    • -t :指定要创建的目标镜像名
    • . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
  • 命令 作用
    docker ps -a 查看所有docker进程
    docker logs 停止日志
    docker stop 停止容器
    docker port 查看端口
    docker logs -f 可以查看web日志
    docker images 列出本地镜像
    docker pull 下载镜像
    docker search 查找镜像
    docker rmi 删除镜像
    docker attach 进入容器
  • 连接容器

  • 运行一个容器并连接到新建的 test-net 网络:

  • docker run -itd --name test1 --network test-net ubuntu /bin/bash

  • 打开新的终端,再运行一个容器并加入到 test-net 网络:

  • docker run -itd --name test2 --network test-net ubuntu /bin/bash

  • 10

  • 下面通过 ping 来证明 test1 容器和 test2 容器建立了互联关系。

  • 如果 test1、test2 容器内中无 ping 命令,则在容器内执行以下命令安装 ping(即学即用:可以在一个容器里安装好,提交容器到镜像,在以新的镜像重新运行以上俩个容器)。

  • apt-get update
    apt install iputils-ping

  • 在 test1 容器输入以下命令:

  • 11

  • 同理在 test2 容器也会成功连接到:

  • 10

  • 这样,test1 容器和 test2 容器建立了互联关系。

  • 23333

     摸鱼真是太快了了2333333