什么是docker

docker是基于go语言实现的云计算开源项目。其主要目标是“Build,Ship and Run Any App, Anywhere”,即通过对应用组件的封装,分发,部署,运行等生命周期的管理,达到应用组件级的“一次封装,到处运行”。

docker的优势

  1. 高效的构建应用。docker通过容器来打包应用,在迁移的时候只需要在新的服务器上启动需要的容器就可以了,这无疑将节省大量的宝贵时间,并降低部署过程中出现的风险。

  2. 高效的资源利用。docker容器对系统资源的需求很少,一台主机上可以运行数千个docker容器。

  3. 更简单的更新管理。使用Dockerfile来支持灵活的自动化创建和部署机制,可以极大的提高工作效率。

  4. 更加轻松的迁移和扩展。

docker核心概念

Dcoker镜像

docker镜像类似虚拟机镜像,包含了文件系统。镜像是创建docker容器的基础。我们可以通过下面的命令从默认镜像仓库,即Docker Hub公共注册服务器中的仓库,下载镜像。

dcoker pull node

当下载完成后可以通过

dcoker images命令查看本地的镜像列表

clipboard.png

创建镜像

创建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"]
存出与载入镜像
  1. 存出镜像

docker save -o target_name image_name
  1. 载入镜像

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多个镜像。


wupengyu
1.8k 声望166 粉丝

写作是为了更好的思考