Docker 入门

很久之前就说要学Docker,但是一直断断续续的学了一点,这个暑假终于腾出点时间把Docker过一下。主要是阅读 《Docker-从入门到实践》这本书,然后看了一下希云的视频,留此文章用于备忘。

  1. Docker简述

  2. Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。Docker 的基础是Linux 容器 (LXC) 等技术。

  3. Docker 和传统虚拟化方式的不同之处:容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。

  4. Docker 容器的启动可以在秒级实现,容器除了运行其中应用外, 基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。

  5. Docker 核心概念

  6. image-镜像。Docker镜像就是一个只读的模板,模板中包含一些固定的配置文件。镜像是只读的,容器在启动的时候创建一层可写层 作为最上层。

  7. container-容器。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。

  8. repository-仓库。仓库是集中存放镜像文件的场所。每个仓库中又包含了多个镜像,每个镜像有不同的标签。

  9. 以上这些概念和git有着异曲同工之处,你可以将image看着是一个 os 的release,这样就很好理解Docker的相关概念了。

  10. ubuntu安装Docker (参考官方文档-我是在zeal中参考的)

  11. sudo apt-get install apt-transport-https ca-certificates 安装 apt-transport-https 包以支持 https 协议的源

  12. sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D 添加源的 gpg 密 钥

  13. lsb_release -c 获取当前操作系统的代号

  14. sudo vim /etc/apt/sources.list.d/docker.list
    然后填入 deb https://apt.dockerproject.org/repo ubuntu-trusty main

  15. sudo apt-get update 更新源

  16. sudo apt-get install -y linux-image-extra-$(uname -r) 为了让 Docker 使用 aufs 存储,推荐安装 linux-image-extra 软件包

  17. sudo apt-get install apparmor apparmor 是Linux内核的一个安全模块,新版本的Ubuntu已经被整合到内核

  18. sudo apt-get install -y docker-engine 安装Docker

  19. 至此Docker就安装完毕。

  20. Docker 镜像操作

  21. 获取镜像
    * 使用默认注册服务器(registry) sudo docker pull ubuntu:14.04 从远程获取镜像,等价于 sudo docker pull registry.hub.docker.com/ubuntu:14.04
    * 使用其他的注册服务器 sudo docker pull dl.dockerpool.com: 5000/ubuntu:14.04
    * 使用Dockerfile构建镜像: sudo docker build -t kangqf/centos:7.1 . -t是指定 tag
    * 通过文件导入镜像: sudo cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04

  22. 运行镜像
    * 交互式运行镜像 sudo docker run -t -i ubuntu:14.04 /bin/bash -i是指以交互式运行,-t 是指分配一个伪TTY
    * 守护态运行镜像 sudo docker run -d -p 8080:80 --name website kangqf/php-fpm:5.4 -d 是指以守护态运行 -p 表示端口映射(还有 -P随意端口映射)
    * 传入环境变量运行 sudo docker run -d -p 80:80 -e WORDPRESS_DB_HOST=172.17.0.2 -e WORDPRESS_DB_USER=admin -e WORDPRESS_DB_PASSWORD=111111 --name wordpress kangqf/wordpress:4.3

  23. 列出本地镜像 sudo docker images

  24. 提交镜像修改 sudo docker commit -m "fix systemd conflict" ed008584c431 kanngqf/php-fpm:5.4.1 -a 可以指定更新的用户信息 -m 用来指定提交的说明信息

  25. 上传镜像 sudo docker push ouruser/sinatra

  26. 本地存出镜像 sudo docker save -o ubuntu_14.04.tar ubuntu:14.04

  27. 本地载入镜像 sudo docker load --input ubuntu_14.04.tar 或是
    sudo docker load < ubuntu_14.04.tar 这将导入镜像以及其相 关的元数据信息(包括标签等)

  28. 移除本地镜像 sudo docker rmi training/sinatra 移除镜像之前确定该镜像没有被容器使用,如果有先移除该容器

  29. 移除所有未打标签的镜像 sudo docker rmi $(docker images -q -f "dangling=true")sudo docker rmi $(docker images --quiet --filter "dangling=true")的缩写。

  30. Docker 容器操作

  31. 启动容器 sudo docker run ubuntu: 14.04 /bin/echo 'Hello world' -t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,-i 则让容器的标准输入保持打开,-d 后台运行。

  32. 启动已经终止的容器 docker start 可以使用docker ps -a来查看已经终止的容器或是正在运行的容器。

  33. 获取容器的输出信息 docker logs

  34. 终止容器 docker stop

  35. 重启容器 docker restart

  36. 进入容器 docker attach website但是使用 attach 命令有时候并不方便。当多个窗口同时attach到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。

  37. 导出本地某个容器快照 docker export 7691a814370e > ubuntu.tar

  38. 导入容器快照 cat ubuntu.tar | sudo docker import - test/ubuntu: v1.0 load 和 import的区别是 import的快照会丢失所有的历史记录和源数据信息。

  39. 删除容器 docker rm 来删除一个处于终止状态的容器。 docker rm $( docker ps -a -q)清除所有处于终止态的容器。

  40. Docker 仓库

  41. 仓库( Repository)是存放镜像的地方。注册服务器( Registry)是管理仓库的具体服务器。例如对于仓库地址dl. dockerpool.com/ubuntu 来说,dl.dockerpool.com 是注册服务器地址,ubuntu 是仓库名。

  42. Docker Hub 是Docker官方维护的一个公共仓库。docker login 用来注册登录,docker search来查找官方的镜像,docker pull来下载镜像,docker push 将镜像推送到Docker Hub。

  43. 仓库自动创建(Automated Builds)。自动创建允许用户通过 Docker Hub 指定跟踪一个目标网站(目前支持 GitHub或BitBucket)上的项目,一旦项目发生新的提交,则自动执行创建。

  44. 私有仓库。docker-registry 是官方提供的工具,可以用于构建私有的镜像仓库。registry 支持 通过config_sample.yml来配置各种相关的选项,包括数据的存储方式等内容。

遇到的问题

  1. Cannot connect to the Docker daemon. Is the docker daemon running on this host?
    在 docker images docker build 等命令时加上 sudo

  2. Error: fakesystemd conflicts with systemd-219-19.el7_2.11.x86_64
    加上 --skip-broken

  3. run 之后马上退出
    检查entrypoint中的文件是否有可执行权限或者以交互式运行container然后查看调试信息

几个技巧

删除 none 的image

1
2
3
sudo docker ps -a | grep "Exited" | awk '{print $1 }'|xargs sudo docker stop
sudo docker ps -a | grep "Exited" | awk '{print $1 }'|xargs sudo docker rm
sudo docker images|grep none|awk '{print $3 }'|xargs sudo docker rmi

删除image的流程

1
2
3
sudo docker stop cid
sudo docker rm cid
sudo docker rmi iid

一些资源

希云培训代码

希云培训教程

Docker 入门实战

T B
站点访问量: / , 本页阅读量:
T B