首先Docker火了好一阵了,最近闲来无事就学习了下,算是了解的大致流程和基本操作,特此记录。
Docker的核心组件有以下:
- Docker客户端和服务器(也称为Docker引擎)
- Docker镜像
- Registry
- Docker容器
Docker客户端和服务器
Docker是C/S架构,Docker客户端只需向Docker服务器或守护进程发出请求,服务器或守护进程(也称为Docker引擎)完成工作并返回结果。
Docker镜像
容器需要基于Docker镜像来生成,镜像相当于容器的“源代码”。我的理解就像是集装箱里拉的货物(只不过在这里是各种软件罢了)
Registry
Registry用来存储用户构建的镜像,分为公共的和私有的,公共的仓库叫Docker Hub(集中型仓库,跟github网站模式类似,可以获取别人分享的);另一种就是架设自己私有的Registry(自己注册一个官方账号,然后上传到自己的账号空间)。
容器
Docker容器是盛放软件和服务的,就是基于镜像生成的容器,相当于一个执行环境可以执行一系列操作,强调一下它跟系统不一样,它不具备内核,所以我的理解就是一个容器就是提供了一些“服务”。
安装(Ubuntu环境16:04,这个版本系统层面就满足了安装Docker的不少前提条件)
1. 添加Docker的ATP仓库
sudo sh -c “echo deb https://apt.dockerproject.org/repo ubuntu-xenial main > /etc/apt/sources.list.d/docker.list”
2. 检查curl是否安装
sudo lsb_release –codename | cut -f2
结果应输出系统版本名称(eg: xenial)如果需要安装curl则执行:
sudo apt-key adv –keyserver hkp://p80.pool.sks-keyservers.net:80 –recv-keys 58118E89F3A91289C070ADBF76221572C52609D
3. 更新APT源
sudo apt-get update
4. 安装Docker
sudo apt-get install docker-engine
4. 安装Docker
sudo apt-get install docker-engine
5. 最后确认是否成功
sudo docker info
输出应为:
Containers: 0
Images: 0
…
6. 如果启用了UFW(防火墙),则还需要配置转发策略
把原始:
DEFAULT_FORWARD_POLICY=”DROP”
改为:
DEFAULT_FORWARD_POLICY=”ACCEPT”
Docker的基本操作
1. Docker容器
sudo docker run -i -t ubuntu /bin/bash
这条命令就会运行一个基于ubuntu镜像的容器(-i标志容器中STDIN为开启的,-t则是告诉Docker要为创建的容器分配一个伪tty终端),创建的时候如果本机仓库有ubuntu镜像它就会用本机的,否则就回去Dockerhub去下载,后面/bin/bash 就是在容器中执行的命令(这里是启动一个Bash Shell)
这条命令执行之后就会默认进入容器中此时可通过输入exit退出并终止容器。退出后想重启关闭的容器通过下面的命令
sudo docker start [容器ID / 容器名字]
如果想附着到正在运行的容器则执行:
sudo docker attach [容器ID / 容器名字]除了-i,-t之外,还可以有一系列的参数声明,比如-d就是将容器放在后端运行, –name 就可以对容器命名,还有-c和–restart等等一系列的操作可以声明。
Docker exec 命令可以在容器内部运行一些命令进程。
Docker stop则是停止容器的。
Docker rm [容器ID / 容器名字] 删除容器。
2. Docker镜像
镜像在容器中以层的形式而存在,通常下一级是上一级的父级或者必备基石
docker images 列出当前主机中包含的镜像
docker pull [镜像名称:镜像版本号] 从Dockerhub拉取镜像。
docker search [镜像名称:镜像版本号] 在Dockerhub中查找对应镜像。
3. 构建自己的镜像
构建自己的镜像,有俩种方式,docker commit 和 Dockerfile书写。
最后也是可以把自己的镜像发布到Dockerhub上的。
第一种docker commit: 创建好容器然后在容器里面安装对应的软件和你想做的操作,然后通过docker commit命令提交。
第二种(也是官方推荐的):把你一系列的操作和安装命令写道Dockerfile里面,然后通过docker build命令去构建一个新的镜像。 (提示:docker命令也支持git,所以将dockerfile放到github上,直接可以通过github上的dockerfile直接生成了)。
Dockerfile也可以配置缓存,没怎么了解就不说了