概述
docker,一种容器化技术,一种进程。该进程通过操作镜像文件,生成若干虚拟容器,以装载若干彼此隔离的应用程序。
目标
隔离应用程序——提供若干彼此隔离的容器,在每个隔离的容器中,运行用户特定应用程序。
优势
- 易移植,“build once, configure once and run anywhere“
- 速度飞快
- 隔离
- CPU/内存的低消耗
- 快速开/关机
- 跨云计算基础构架
注意点
1.保持职责单一,一个容器只提供一个服务,如,
- 仅提供Nginx服务
- 仅提供 MySQL服务
2.若想让容器处于启动状态,则容器托管的应用程序必须有一个正在运行的进程,
- 如使用docker + nignx的时候,需要在niginx.conf文件头部加一个daemon off。或者手动启动 docker run -it nginx bash。
- 若启动命令是以后台守护(daemon on)模式启动nginx,则启动命令会立即结束,容器也会立即结束。
- 其实只要在任何命令之后加一句 && cat,就会让这条命令卡在前台而不会结束,不必daemon off。
基础支撑元素
1.client: 用户命令行工具,与daemon通讯
2.daemon: 运行在宿主机上的服务(常驻内存进程)1
2service docker start #启动docker daemon进程
service docker stop #关闭docker daemon进程
3.registry: 镜像仓库
集中存放镜像文件的场所【类似于git】
- 公开仓库public:公有仓库如docker hub提供了非常多的镜像文件,可直接拉取,也可上传自定义镜像;可搜索、可重复使用
- 私有仓库private: 私有仓库可用于团队项目管理;仅供给拥有访问权限的成员使用
重点要素
- 镜像
- 容器
docker运行应用程序过程:
- 构建镜像
- 运行容器
docker实现目标的方式:
- 通过命令,对镜像和容器的增删查改
镜像 images
用来创建container实例。只读。【类似于vm虚拟机中的快照】
分类
- 基础镜像:仅仅包含操作系统,如centos
- 中间镜像:如数据库镜像, tomacat, redis
- 应用镜像:具体的应用服务,毕竟丰富
获取方式
- 从Docker hub公共仓库中拉取
- 自定义构建
容器 containers
- 从镜像中创建的运行实例,负责应用程序的运行。
- 容器之间彼此隔离。
容器可以启动、开始、停止、删除。容器停止后会处于exited状态,但数据不会丢失,仍可通过docker start命令来启动。只有删除掉容器才会清除所有数据。
容器的网络端口:可以将容器的特定端口映射到宿主机上的任意一个端口
镜像-容器关系
通过镜像Image#1可以生成若干独立容器Container#1/Container#2/Container#3
使用过程
1.构建
构建镜像并push到Docker仓库
利用Dockerfile构建
Dockerfile包含创建镜像所需要的全部指令,说明如何自动创建镜像手动命令行构建
2.运输
从Docker仓库pull一份镜像到本地
3.运行
通过镜像文件开启Docker容器并提供服务
安装
CentOS 版本
docker支持两种CentOS版本:
- CentOS 7 (64-bit, 系统内核3.10以上)
- CentOS 6.5 (64-bit, 系统内核2.6.32-431以上) 或更高
检测版本命令如下:
1 | cat /etc/redhat-release #操作系统名称 |
或1
uname -r #系统内核号
CentOS 6.5或更高
安装及安装是否成功1
2
3
4
5rpm -iUvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum update -y
yum -y install docker-io
docker
启动docker服务及启动是否成功1
2service docker start
docker verison
配置加速器(因国内网速不佳)1
2vim /etc/sysconfig/docker
配置 other_args="--registry-mirror=https://jxus37ad.mirror.aliyuncs.com"
修改后重启并检查docker进程1
2service docker restart
ps -ef | grep docker
CentOS 7
yum安装
1.配置yum(可忽略)1
2
3
4
5
6
7
8yum install -y yum-utils device-mapper-persistent-data.x86_64 lvm2 #安装依赖环境
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #添加软件源信息,建议使用国内源
- https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo #国内源
- https://download.docker.com/linux/centos/docker-ce.repo #官网源
yum makecache fast #更新 yum 软件源缓存
2.安装 Docker CE1
yum install -y docker-ce #安装 docker-ce
脚本安装
1.确保 sudo 或 root 权限。
2.确保 yum 包更新到最新。1
2
3yum update -y #确保yum 包更新到最新
curl -fsSL https://get.docker.com/ | sh #执行Docker安装脚本,添加docker.repo源并安装 Docker
使用
宿主机构建镜像构建的context
web-client
+– Dockerfile
+– dist
+—— index.html
+– conf
+—— nginx.conf
编写Dockerfile
Dockerfile
1 | # Base images 基础镜像 |
- FROM,选择基础镜像(必须且必置顶)FROM scratch表示一个空白的特殊镜像
- RUN,创建镜像时运行的操作,RUN <命令>,就像在命令行中输入命令一样
- COPY,复制宿主文件到镜像
- ADD,更高级的复制,在COPY基础上,可以下载URL地址文件到镜像
- EXPOSE,对外部开放端口,容器的端口
- CMD,创建容器后启动的程序。如创建容器后,立即执行容器内的nginx进程(只有应用程序中有进程在前台运行,容器才能处于运行状态)
基于Dockerfile构建镜像
docker build [选项] <上下文路径/URL/->
eg.
docker build -t 镜像名称:TAG 上下文路径
docker build -t 镜像名称 . #在当前目录(有dockerfile)下构建镜像
docker build -t myapp:1.0.0 .
docker build -t ai-ops-web .
构建镜像/运行容器
基于Dockerfile
1.基于Dockerfile构建镜像1
2
3docker build -t ai-ops-web:nginx .
docker images
2.根据镜像构建并运行容器1
2
3docker run -d -p 8081:7070 ai-ops-web:nginx
docker ps -a
3.打开浏览器访问ip:8081
手动
1 | #直接从Docker hub拉取指定版本的镜像文件,默认最新版本latest |
查看
1 | docker images #查看本地已有镜像列表 |
删除
1 | docker rmi 镜像ID #删除镜像,多个镜像ID之间用空格隔开 |
修改
有时镜像构建过程中出现如下none的情况:
|REPOSITORY|TAG|IMAGE ID|CREATED|VIRTUAL SIZE|
|-|-|-|-|
|ai-ops-web-client|1.2.0-19|2ba15d4a7a51|7 minutes ago|99.8 MB|
|
修改如下:1
2docker tag IMAGE_ID REPOSITORY:TAG
docker tag ab5e30d1e67f ai-ops-web-client:1.2.0-18
停止/启动/重启容器
1 | docker start 容器ID |
进入镜像
1 | #下载镜像,并启动、进入镜像终端, -it 使容器终端和当前终端进行关联 |
进入容器
1 | #查看docker正在使用的容器 containerId |
基本命令
1 | docker #查看docker已经安装 |