Docker CE笔记

准备工作

  • 国内换为清华源
  • 系统使用 Ubuntu 16.04

安装Docker CE

官方中文文档

Docker 的早期版本称为 docker-ce (社区版,免费),旧版为 dockerdocker-engine 。如果安装过要先卸载。

国内镜像加速

由于某些不可抗力因素,国内下载速度实在堪忧!

所以,对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存
在请新建该文件)

1
2
3
4
5
{
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}

注意,一定要保证该文件符合 json 规范,否则 Docker 将不能启动。
之后重新启动服务。

1
2
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

Docker基础

进入容器之后很可能不能运行 vimsudovi 等基本命令,因为为了保证容器里的镜像足够纯净,足够小。

  1. 最最基础命令

    在执行 docker run 时,同时下载 ubuntu 镜像。

    1
    $ sudo docker run -i -t ubuntu /bin/bash

    -i 保证容器中的STDIN标准输入开启

    -t 分配一个 伪tty终端

  2. 检查容器进程

    1
    $ ps -aux
  3. 退出(退回到宿主机)

    1
    $ exit

    在宿主机查看容器列表:

    1
    $ sudo docker ps -a

  4. (在创建时)容器命名

    在宿主机:

    1
    $ sudo docker run --name test -i -t ubuntu /bin/bash
  5. 重启容器

    1
    $ sudo docker start ID/NAME

    start 也可以为 restart

  6. 停止容器

    1
    $ sudo docker stop ID/NAME
  7. 创建容器但不运行

    1
    $ sudo docker create --name NAME -i -t ubuntu /bin/bash
  8. attach(to fasten or join one thing to another)

    1
    $ sudo docker attach NAME/ID

    重启容器后,会运行一个交互式回话shell。退出shell后容器会再次停止运行。

  9. 创建守护式容器

    1
    $ sudo docker run --name NAME -d ubuntu /bin/sh -c "while true; do echo Hi;  sleep 2; done"

    参数 -d 后台运行

  10. 在宿主机查看容器内进程(前提是在运行)

    1
    $ sudo docker top NAME
  11. Docker统计CPU、内存等使用信息 (注意是 stats,不是 status)

    1
    $ sudo docker stats ID/NAME

  12. 查看容器详细信息—— inspect

    1
    $ sudo docker inspect daemon_dave
  13. 在容器内进行交互式命令

    1
    $ sudo docker exec -i -t daemon_dave /bin/bash

    一旦退出交互式界面,容器就停止运行!!

  14. 删除容器

    1
    $ sudo docker rm NAME/ID
  15. 删除所有容器

    目前还不能一次性删除。

    1
    $ sudo docker rm `sudo docker ps -a -q`

    注意: 使用

    1
    ``

    运行 sudo docker ps -a -q 命令

    -q 获取IDs

  16. 进入容器换软件源

    将默认源换成 中科大源 选择 HTTP IPV4

    不知道为什么 HTTPS 用不了,清华源也用不了,只有中科大的才行

  17. 查看镜像、容器、数据卷所占空间

    1
    2
    3
    4
    5
    6
    $ docker system df
    TYPE TOTAL ACTIVE SIZE RECLAIMABLE
    Images 2 1 116.7MB 116.7MB (99%)
    Containers 1 0 0B 0B
    Local Volumes 0 0 0B 0B
    Build Cache 0 0 0B 0B

Docker镜像仓库

  1. 列出Docker镜像

    1
    $ sudo docker images

    或:sudo docker image ls

  2. 拉取(指定)镜像

    1
    $ sudo docker pull ubuntu:16.04提交定制容器、镜像

构建镜像

  1. 使用Commit提交容器

    1
    $ sudo docker commit 0f886a94ea6f ithou/apache2
  2. 使用自己构建的镜像

    1
    $ sudo docker run -it ithou/apache2 /bin/bash
  3. 使用Dockerfile构建镜像(推荐)

    1
    2
    3
    $ mkdir static_web
    $ cd static_web
    $ sudo vim Dockerfile

    Dockerfile 内容:

    1
    2
    3
    4
    5
    FROM ubuntu:14.04  # 镜像(可以指定版本)
    MAINTAINER ithou "qq@qq.com" # 邮箱
    RUN apt-get update && apt-get -y install nginx
    RUN echo 'Hello, I am in your container.'
    EXPOSE 80

    构建

    1
    $ sudo docker build -t="ithou/static_web" .
  4. 列出Docker镜像

    1
    $ sudo docker images ithou/static_web
  5. 从新镜像启动一个容器

    1
    $ sudo docker run -d -p 80 --name static_web ithou/static_web nginx -g "daemon off;"

Dockerfile指令

  1. CMD

    Dockerfile 中只能有一条 CMD指令,如果有多条只能运行最后一条。

    1
    CMD ["/bin/bash"]

    注意:

    如果使用 service start nginx 命令,则希望upstart来以守护进程形式启动 nginx 服务。而 CMD service nginx start 会被理解为 CMD ["sh", "-c", "service nginx start"], 因此主进程实际上是 sh. 当 service ... 命令结束后,sh 自然就结束了, sh 作为主进程退出,容器自然就停止了。

    正确做法是直接执行nginx可执行文件,并且要求以前台形式运行:

    1
    2
    > CMD ["nginx", "-g", "daemon off;"]
    >
  1. COPY 和 ADD

    所有文件复制均使用 COPY 指令,仅在需要 自动解压 的场合使用 ADD

……

Docker Compose

官方中文文档:https://docs.docker-cn.com/get-started/part3/ (文档的 yml 文件格式有错)

  1. 启动服务

    1
    $ docker-compose up

    守护进程 启动服务:docker-compose up -d

  2. 停止正在运行的服务

    1
    $ docker-compose stop
———— The End ————