docker

概述

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
2
service docker start	#启动docker daemon进程
service docker stop #关闭docker daemon进程

3.registry: 镜像仓库
集中存放镜像文件的场所【类似于git】

  • 公开仓库public:公有仓库如docker hub提供了非常多的镜像文件,可直接拉取,也可上传自定义镜像;可搜索、可重复使用
  • 私有仓库private: 私有仓库可用于团队项目管理;仅供给拥有访问权限的成员使用

重点要素

  • 镜像
  • 容器

docker运行应用程序过程:

  1. 构建镜像
  2. 运行容器

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
5
rpm -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
2
service docker start
docker verison

配置加速器(因国内网速不佳)

1
2
vim /etc/sysconfig/docker
配置 other_args="--registry-mirror=https://jxus37ad.mirror.aliyuncs.com"

修改后重启并检查docker进程

1
2
service docker restart
ps -ef | grep docker

CentOS 7

yum安装

1.配置yum(可忽略)

1
2
3
4
5
6
7
8
yum 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 CE

1
yum install -y docker-ce	#安装 docker-ce

脚本安装

1.确保 sudo 或 root 权限。
2.确保 yum 包更新到最新。

1
2
3
yum 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# Base images 基础镜像
FROM centos:centos7

#MAINTAINER 维护者信息
MAINTAINER network-bigdata

#ADD 获取url中的文件,放在当前目录下
ADD http://nginx.org/download/nginx-1.15.3.tar.gz .

#RUN 执行以下命令
RUN yum install -y pcre-devel wget net-tools gcc zlib zlib-devel make openssl-devel
RUN tar -zxvf nginx-1.15.3.tar.gz
RUN mkdir -p /usr/local/nginx
RUN cd nginx-1.15.3 && ./configure && make && make install
RUN ln -s /usr/local/nginx/sbin/* /usr/local/sbin/

#REPLACE CONF 替换配置文件
RUN rm /usr/local/nginx/conf/nginx.conf
ADD conf/nginx.conf /usr/local/nginx/conf/

#ADD RESOUCES 添加静态资源
RUN rm /usr/local/nginx/html/index.html
RUN mkdir -p /usr/local/nginx/html/static
COPY dist/ /usr/local/nginx/html/static

#EXPOSE 映射端口
EXPOSE 7070

#CMD 运行以下命令
CMD ["nginx"]
  • 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
3
docker build -t ai-ops-web:nginx .

docker images

2.根据镜像构建并运行容器

1
2
3
docker run -d -p 8081:7070 ai-ops-web:nginx

docker ps -a

3.打开浏览器访问ip:8081

手动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#直接从Docker hub拉取指定版本的镜像文件,默认最新版本latest
docker pull 镜像名:TAG
docker pull ubuntu:latest
docker pull busybox

#若镜像不存在,则新增并运行。即下载最新版本latest镜像,并运行镜像,临时启动一个容器
#若镜像存在则直接运行。
docker run 镜像名

#如想一直启动一个容器,则-d
docker run -d centos

#如想给将宿主网络端口映射到容器,则-p,-p <宿主端口>:<容器端口>
docker run -d -p 3000:3000 myapp:1.0.0

查看

1
2
3
4
5
6
docker images			#查看本地已有镜像列表
docker ps -a #查看所有容器列表,包括运行中的和已经停止的
docker ps #查看正运行的容器列表

docker inspect 镜像ID(镜像名)/容器ID(容器名) #查看镜像/容器的详情
docker inspect 2de3fe38fadc | grep IP

删除

1
2
docker rmi 镜像ID	#删除镜像,多个镜像ID之间用空格隔开
docker rm 容器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|
|||ab5e30d1e67f|2 weeks ago|397.1 MB|

修改如下:

1
2
docker tag IMAGE_ID REPOSITORY:TAG
docker tag ab5e30d1e67f ai-ops-web-client:1.2.0-18

停止/启动/重启容器

1
2
3
docker start 容器ID
docker restart 容器ID
docker stop 容器ID

进入镜像

1
2
3
4
#下载镜像,并启动、进入镜像终端, -it 使容器终端和当前终端进行关联
docker run -it 镜像ID /bin/bash

exit

进入容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#查看docker正在使用的容器 containerId
docker ps

#将虚拟机dist/下内容复制到docker容器(containerId)中的html/static文件夹下(Version 1.8才支持从宿主机cp文件到容器)
docker cp dist/. 02895bc63d97:/usr/local/nginx/html/static

#进入docker容器
docker exec -it 02895bc63d97 /bin/bash

#查看一下,是否已成功复制
cd /usr/local/nginx/html/static/

#退出docker容器
exit

#清除浏览器缓存即更新成功

基本命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
docker	#查看docker已经安装
docker info #docker信息
docker version #docker版本信息

service docker start #启动docker daemon进程
service docker stop #关闭docker daemon进程

docker build
docker commit

docker pull
docker run
docker exec

docker images
docker ps -a
docker inspect

docker rm
docker rmi

docker start/stop/restart
-------------Keep It Simple Stupid-------------
0%