目录
- 什么是 Docker ?
- CentOS 环境安装 Docker
- Docker 的使用
- 创建 Docker 镜像
- 存取上传 Docker 镜像
1. 什么是 Docker ?
单个服务器, 物理性能;
云时代, 凭借虚拟化技术构建的集群处理能力;
大型主机虚拟化 → 虚拟机虚拟化 → 容器技术
基于容器打造的云平台称为 “容器云”;
Docker 是众多容器技术中的佼佼者;
诞生于 2013 年;已经加入 Linux 基金会,遵循 Apache 2.0 协议;
Linux 各大发行版已经在官方软件源中默认带有 Docker 软件包;
Docker 的构想是要实现“Build,Ship and Run Any App,Anywhere”,即通过对应用的封装(Packaging)、
分发(Distribution)、部署(Deployment)、运行(Runtime)生命周期进行管理,达到应用组件级别的“一次封装,到
处运行”。
组件,可以是一个 Web 应用、一个编译环境、一套数据库平台服务、一个操作系统或集群。
Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个
虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行
版本管理、复制、分享、修改,就像管理普通的代码一样。
Docker 三大核心概念:镜像(Images)、容器(Containers)、仓库(Registry)
1.镜像:一个 Apache 镜像包括一个基本的操作系统环境和 Apache 应用程序。
2.容器:可以看作一个简易版的 Linux 系统环境以及运行在其中的应用程序打包而成的盒子。
镜像自身是只读的。容器从镜像启动时,会在镜像的最上层创建一个可写层。
3.仓库:可以将自己的镜像 push 到指定的公有或私有仓库。使用时 pull 下来即可。
Docker 引擎分两个版本:社区版本(Community Edition,CE)和企业版本(Enterprise Edition,EE)。
Docker 社区版本每月发布一次尝鲜(Edge)版本,每季(3、6、9、12月)发行一次稳定(Stable)版本。
2. CentOS 环境安装 Docker
官方链接:Install Docker Engine on CentOS
2.1 安装 yum-utils 包(提供了 yum-config-manager)
$ sudo yum update
$ sudo yum install -y yum-utils
2.2 添加 Docker 稳定版本的 yum 软件源 (/etc/yum.repos.d/docker-ce.repo)
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
2.3 安装 Docker 引擎(可以直接安装最新版本,也可以选择安装旧版本)
$ sudo yum install -y docker-ce
2.4 查看 Docker 版本
$ sudo docker version(或 info)
3. Docker 的使用
3.1 启动 Docker
$ sudo systemctl start docker
3.2 测试 hello-world image
$ sudo docker image pull hello-world
$ sudo docker run hello-world ## docker run 具有抓取 image 文件功能,所以可以省略上面的抓取操作。
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
## run 后容器自动结束
$ docker container ls ## 查看正在运行的容器
$ docker container ls --all ## 查看全部容器
$ docker container rm [containerID] ## 终止一个容器
3.3 image 文件操作
$ docker image ls ## 查看本机所有 image 文件
$ docker image rm [imageName] ## 删除 image 文件
* Docker 将应用程序及其依赖,打包成 image 文件(平台通用)。
* 通过这个 image 文件生成 Docker 容器。
* Docker 容器运行即相当于用户需求的可执行文件的运行。
4. 创建 Docker 镜像
4.1 基于已有镜像的容器创建
$ docker container commit -m "message" -a "author" a23b909c384 Repository:0.1
9e9c814023bcffc3e67e892a235afe6lb02f66a947d2747f724bd317dda02f27 ## 返回新的 ID 信息
4.2 基于 Dockerfile 创建
关于 Dockerfile:官方链接:Dockerfile reference
Dockerfile 主体分为四部分:基础镜像信息、维护者信息、镜像操作指令、容器启动时执行指令
Dockerfile 文件结构:
# escape=\ (backslash)
# This dockerfile uses the ubuntu:xeniel image
# VERSION 2 - EDITION 1
# Author: docker_user
# Command format: Instruction [arguments / command]
# Base image to use, this must be set as the first line
FROM ubuntu:xeniel
# Maintainer: docker_user <docker_user at email.com> (@docker_user)
LABEL maintainer docker user<docker user@email.com>
# Commands to update the image
RUN echo "deb http://archive.ubuntu.com/ubuntu/ xeniel main universe" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaeron off;" >> /etc/nginx/nginx.conf
# Commands when creating a new container
CMD /usr/sbin/nginx
创建步骤:参考链接:Docker 入门教程
1. 先下载源码:
$ wget https://github.com/ruanyf/koa-demos/archive/master.zip
$ unzip koa-demos-master.zip
$ cd koa-demos
koa-demos/
demos Dockerfile logo.png package.json package-lock.json README.md
2. 新建文本文件 .dockerignore
$ mkdir .dockerignore
# /.docerignore
.git
node_modules
npm-debug.log
## 在.dockerignore 文件中添加以上三个路径,目的是排除不打包进 image 文件。
## 如果没有这三个路径可以不新建 .dockerignore。
3. 编辑 Dockerfile 文件
$ vim Dockerfile
## /Dockerfile
FROM node:8.4
COPY . /app
WORKDIR /app
RUN npm install --registry=https://registry.npm.taobao.org
EXPOSE 3000
CMD node demos/0.1.js
## FROM node:8.4:继承官方 8.4 版本的 node image。
## COPY . /app:将当前目录下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录。
## WORKDIR /app:指定接下来的工作路径为/app。
## RUN npm install:在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。
## EXPOSE 3000:将容器 3000 端口暴露出来, 允许外部连接这个端口。
## CMD node demos/0.1.js:容器启动后执行该命令。(注意:插入该命令后,docker container run -p 8000:3000 -it koa-demo /bin/bash 后面将无法添加附加命令 /bin/bash)
4. 创建 image 文件
$ docker image build -t koa-demo .
## 或者
$ docker image build -t koa-demo:0.0.1 .
## 其中:-t参数用来指定 image 文件的名字,后面还可以用冒号指定标签。如果不指定,默认的标签就是latest。最后的那个点表示 Dockerfile 文件所在的路径,上例是当前路径,所以是一个点。
$ docker image ls ## 查看是否创建成功
## 运行该容器
$ docker container run -p 8000:3000 -it koa-demo /bin/bash ## 无 CMD 命令执行该命令
$ docker container run -p 8000:3000 -it koa-demo ## 有 CMD 命令执行该命令
5. 存取上传 Docker 镜像
5.1 存出镜像(导出到本地)
$ docker save -o ubuntu_18.04.tar ubuntu:18.04 ## 导出本地镜像 ubuntu:18.04 为文件 ubuntu_18.04.tar
5.2 载入镜像(本地导入)
$ docker load -i ubuntu_18.04.tar ## 导入本地 ubuntu_18.04.tar 文件
5.3 上传镜像到 Docker Hub 官方仓库
$ docker login ## 登录仓库
$ docker tag test:0.0.1 user/test:0.0.1 ## 添加新的标签 user/test:latest
$ docker push user/test:0.0.1 ## 使用 push 命令上传
官方链接:Install Docker Engine on CentOS
官方链接:Dockerfile reference
参考链接:Docker 入门教程
参考书籍:《Docker技术入门与实战 第3版》