使用docker 的一点总结

Posted on 2017-12-16 20:23:13

因为功夫网和域名备案的问题(坑爹的腾讯云不能用阿里云备案的域名),本博客从搬瓦工迁移到腾讯云又搬到阿里云,实在不胜配置环境之烦,遂尝试docker快速搭建。

一键运行?

最初的想法当然是构建一个大而全的镜像,把lnmp全部配置好,代码也放进去,新的服务器上装好docker只需 docker pulldocker run一键运行(虚拟机的后遗症(⊙﹏⊙)b)。

但是问题来了

  • 这样做镜像过于臃肿,如果要多开几个进程实在很不划算。
  • docker的容器应该是一次性的,当容器被销毁时,需要持久化的数据(代码和数据库)也将丢失。

正确的姿势

将webapp的各个组件解耦,需要持久化的数据放在docker的宿主机(数据卷)中保存,以便在多个容器中共享和重用。

不过还是有个问题,容器之间如何相互访问呢?

容器与虚拟机

这个容器互访的问题容后再议,先从基础开始

  • Docker基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离(操作系统层面的虚拟化)
    docker-1
  • 虚拟机则是虚拟出一套硬件后运行一个完整的操作系统
    vitrualization

镜像容器和仓库

  • 镜像是一个特殊的文件系统,利用Union mount实现分层架构,每一层都是readonly,提供容器运行时所需的程序、库、资源、配置等文件,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。

  • 容器的实质是运行在独立的命名空间的进程,运行时以镜像为基础层,在其上创建存储层,其生命周期取决于容器。

  • Docker Registry集中存储、分发镜像的服务,可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag),通过 <仓库名>:<标签> 的格式来指定具体镜像,通常使用官方Registry公开服务

container

从安装开始

官网,笔者的操作系统是Ubuntu16.04,其他发行版见左侧,Windows赶紧换系统!!!

(如果你是新装好的话)

sudo apt-get install \
     apt-transport-https \
     ca-certificates \
     curl \
     software-properties-common

添加官方源

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository \
    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) \
    stable"

安装docker-ce

sudo apt install docker-ce

身为墙国人,当然要设置国内加速啦

容器基本使用

懒得详细写了,善用man--help就好,run attatch exec start stop rm啥的

镜像从哪来

从Registry获取
sudo docker pull
构建镜像
从容器commit

不推荐,只有制作镜像的人知道执行过什么命令、怎么生成的镜像(而且大概率会忘记),别人根本无从得知,不利于维护。

build和Dockerfile

把每一层修改、安装、构建、操作的命令都写入一个脚本(并不是),由这个脚本来构建、定制镜像。

sudo docker build -t f4nyc/myblog:v2 . #此处.指定构建镜像上下文的路径,将被打包传给docker引擎

数据持久化

使用数据卷,可供多个容器共享和重用,绕过UFS,默认一直存在。

docker run --name=blog-1 -p 7001:8000 --mount source=blog_code,target=/var/www/code     --restart=always -d f4nyc/myblog:v2 python /var/www/code/blog/main.py

网络

docker network create

默认可参考

集群管理

使用官方的Compose MachineDocker Swarm

主要参考


待填坑
(把镜像的时区也改了)