##前言
本篇为学习使用docker过程中的一些记录,学习docker的原因是希望使用docker在服务器上自动化部署本地编写的服务端程序。本文为学习笔记型文章,方便快速查阅,关于docker的安装等内容请移步官网,想系统的学习docker可以看dockerpool出的
PS:下文的使用环境为macos

比较好的教程

##常用命令

  • 获取镜像docker pull,如
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ docker pull ubuntu:12.04
    Pulling repository ubuntu
    ab8e2728644c: Pulling dependent layers
    511136ea3c5a: Download complete
    5f0ffaa9455e: Download complete
    a300658979be: Download complete
    904483ae0c30: Download complete
    ffdaafd1ca50: Download complete
    d047ae21eeaf: Download complete

从 Docker Hub 仓库下载一个 Ubuntu 12.04 操作系统的镜像

  • 列出本地镜像docker images,如

    1
    2
    3
    4
    $ docker images
    REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
    nginx latest a785ba7493fd 12 days ago 132.9 MB
    hello-world latest 91c95931e552 7 weeks ago 910 B
  • Mac环境下启动docker boot2docker start
    mac下需要开启一个虚拟机,和其他linux系统不同

  • 列出已有的容器 docker ps ,加参数’-a’列出所有镜像

  • 查看boot2docker状态 boot2docker status

  • 启动一个容器并运行一个镜像 如:docker run -d -P --name web nginx
    -d :让容器在命令完成后在后台继续运行
    -P :The -P flag publishes exposed ports from the container to your local host; this lets you access them from your Mac.

  • 查看容器端口docker port web,如:

    1
    2
    3
    $ docker port web
    443/tcp -> 0.0.0.0:32770
    80/tcp -> 0.0.0.0:32771

容器端口80映射到host端口32771

  • 查看VM的ip地址 boot2docker ip

  • 在网页中访问应用的地址为 $VM ip地址 /host port,如:
    http://192.168.59.103:32771

  • 停止容器 docker stop,如:

    1
    docker stop web

stop container name / container id

  • 删除容器 docker rm,如:
    1
    docker rm web

rm container name / container id

  • 从dockerfile中构建镜像docker build 如:

    1
    2
    3
    4
    5
    # -t 镜像的名称
    # --rm 构建成功后,删除临时镜像(每执行一行 Dockerfile 中的命令,就会创建一个临时镜像)
    # “.” 是 Dockerfile 所在的路径(当前目录), 也可以替换为一个具体的 Dockerfile 的路径。
    docker build -t="ouruser/sinatra:v2" .
    或 docker build --rm -t ouruser/sinatra:v2 .
  • 推送到dockerhub docker push 如:

    1
    docker push user/sinatra

注意创建和推送时把user替换成自己的用户名

  • 进入容器控制台 docker attach如:
    1
    docker attach name

按两次回车进入,按ctrl+p+q退出(按住ctrl,先按p再按q)

  • 查看容器信息 docker inspect 如:

    1
    docker inspect name
  • 将本地文件挂载到container中,-v

    1
    docker run -v /data:/mnt -i -t rdmclin2/node /bin/bash

例如将data文件夹挂载到container中的mnt文件夹中,可以在mnt文件夹中查看,这个文件是共享的,所以两边的操作都会互相看到。
将mnt的文件拷贝到container中即可。

  • 启动容器的终端

    1
    docker run -t -i ouruser/sinatra:v2 /bin/bash
  • 提交修改过的container创建为image,docker commit

    1
    docker commit -m "Added app file and do npm insall" -a "xxxx" 6f878669e0d7 rdmclin2/node

-m为信息,-a为用户信息。后面的id胃container的id

  • 指定端口运行image -p,如:
    1
    docker run -p 49160:8080 -d <your username>/centos-node-hello

在docker run 后面追加-d=true或者-d,则containter将会运行在后台模式(Detached mode)

  • 重启一个停止的容器 docker restart,如:

    1
    sudo docker restart containerName
  • 如何编写Dockerfile ?

    $ 看这个

  • 停止并删除所有container

    1
    2
    docker stop $(docker ps -a -q)
    docker rm $(docker ps -a -q)
  • 批量删除所有的镜像

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