什么是docker
docker是基于go语言实现的云计算开源项目。其主要目标是“Build,Ship and Run Any App, Anywhere”,即通过对应用组件的封装,分发,部署,运行等生命周期的管理,达到应用组件级的“一次封装,到处运行”。
docker的优势
高效的构建应用。docker通过容器来打包应用,在迁移的时候只需要在新的服务器上启动需要的容器就可以了,这无疑将节省大量的宝贵时间,并降低部署过程中出现的风险。
高效的资源利用。docker容器对系统资源的需求很少,一台主机上可以运行数千个docker容器。
更简单的更新管理。使用Dockerfile来支持灵活的自动化创建和部署机制,可以极大的提高工作效率。
更加轻松的迁移和扩展。
docker核心概念
Dcoker镜像
docker镜像类似虚拟机镜像,包含了文件系统。镜像是创建docker容器的基础。我们可以通过下面的命令从默认镜像仓库,即Docker Hub公共注册服务器中的仓库,下载镜像。
dcoker pull node
当下载完成后可以通过
dcoker images命令查看本地的镜像列表
创建镜像
创建docker镜像有三种方式:基于已有镜像的容器创建,基于本地模版导入,基于Dockerfile创建。
1.基于已有镜像容器创建
docker commit -m 'test' -a 'auth' ID name
commit命令提交为一个新的镜像。提交时可以使用ID或者名称来指定容器。
2.使用Dockerfile创建镜像
Dockerfile是一个文本格式的配置文件,用户可以通过Dockerfile快速创建自己的自定义镜像。一般而已,Dockerfile包含四部分信息,基础镜像信息,维护者信息,镜像操作命令,和容器启动时执行命令。例如:
# This dockerfile user node image
# VERSION 1.0
# Author: XXX
# 第一行必须指定基于的基础镜像
FROM node:4.2.2
# 操作命令
ENV NODE_ENV test
RUN npm i -g npm@3.5.4
WORKDIR /data/app
COPY ./package.json /data/app/
RUN npm install
COPY ./dist /data/app/
EXPOSE 8050
# 容器启动时执行的命令
CMD ["node", "/data/app/app.js"]
存出与载入镜像
存出镜像
docker save -o target_name image_name
载入镜像
docker load --input image_name
Docker容器
docker利用容器来运行和隔离应用。是从镜像创建的应用运行实例,我们可以从同一个镜像创建多个不同的容器,而这些容器都是相互独立,互不可见的。
创建容器
docker create -it image_name
使用docker create创建的容器处于停止状态,可以使用docker start来启动。
创建并启动容器
docker run
该命令等价于先执行docker create 再执行docker start
进入容器
docker attach
在使用attach命令的时候会有很多不便,当多个窗口同时attach到同一个容器的时候,所有的窗口都会同步显示。当其中的一个窗口因命令阻塞时,其他窗口也就无法继续执行操作了。
导出容器
docker export containerId > target_name
可将这些文件传到其他机器上,再通过导入命令实现容器的迁移。
导入容器
docker import file
Docker仓库
docker仓库类似于代码仓库,是docker集中存放镜像文件的地方。与之容易混搅的是注册服务器,注册服务器是存放仓库的具体服务器,每个服务器上可以有多个仓库,每个仓库里又可以有多个镜像。例如对于仓库地址dl.dockerpool.com/ubuntu来说
dl.dockerpool.com是注册服务器地址,ubuntu是仓库名。目前Docker官方维护了一个公共仓库https://hub.docker.com,其中已经包含了15000多个镜像。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。