共计 5121 个字符,预计需要花费 13 分钟才能阅读完成。
[toc]
一、Docker 简介
1.1 什么是 Docker
咱们用的传统虚拟机如 VMware
,VisualBox
之类的须要模仿整台机器包含硬件,每台虚拟机都须要有本人的操作系统,虚拟机一旦被开启,预调配给它的资源将全副被占用。每一台虚拟机包含利用,必要的二进制和库,以及一个残缺的用户操作系统。
而容器技术是和咱们的宿主机共享硬件资源及操作系统,能够实现资源的动态分配。容器蕴含利用和其所有的依赖包,然而与其余容器共享内核。容器在宿主机操作系统中,在用户空间以拆散的过程运行。
容器技术是实现操作系统虚拟化的一种路径,能够让您在资源受到隔离的过程中运行应用程序及其依赖关系。通过应用容器,咱们能够轻松打包应用程序的代码、配置和依赖关系,将其变成容易应用的构建块,从而实现环境一致性、经营效率、开发人员生产力和版本控制等诸多指标。容器能够帮忙保障应用程序疾速、牢靠、统一地部署,其间不受部署环境的影响。容器还赋予咱们对资源更多的精细化控制能力,让咱们的基础设施效率更高。
个性容器虚拟机启动秒级分钟级硬盘应用个别为 MB 个别为 GB 性能靠近原生弱于零碎反对量单机反对上千个容器个别是几十个
1.2 Docker 中包含三个根本的概念
Image
(镜像)Docker 镜像能够看作是一个非凡的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还蕴含了一些为运行时筹备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不蕴含任何动态数据,其内容在构建之后也不会被扭转。Container
(容器)容器 (container)
的定义和镜像 (image)
简直截然不同,也是一堆层的对立视角,惟一区别在于容器的最下面那一层是可读可写的。Repository
(仓库) Docker
仓库是集中寄存镜像文件的场合。仓库又能够分为两种模式:public(私有仓库)、private(公有仓库)
1.3 Docker 组件
① Docker
服务器与客户端
Docker
是一个客户端 - 服务器(C/S
)架构程序。Docker
客户端只须要向 Docker
服务器或者守护过程发出请求,服务器或者守护过程将实现所有工作并返回后果。Docker
提供了一个命令行工具 Docker
以及一整套 RESTful API
。你能够在同一台宿主机上运行 Docker
守护过程和客户端,也能够从本地的 Docker
客户端连贯到运行在另一台宿主机上的近程 Docker
守护过程。
② Docker
镜像与容器
镜像是构建 Docker
的基石。用户基于镜像来运行本人的容器。镜像也是 Docker
生命周期中的 ” 构建 ” 局部。镜像是基于联结文件系统的一种层式构造,由一系列指令一步一步构建进去。例如:【增加一个文件】【执行一个命令】【关上一个窗口】,也能够将镜像当作容器的 ” 源代码 ”。镜像体积很小,十分 ” 便携 ”,易于分享、存储和更新。
Docker
能够帮忙你构建和部署容器,你只须要把本人的应用程序或者服务打包放进容器即可。容器是基于镜像启动起来的,容器中能够运行一个或多个过程。咱们能够认为,镜像是 Docker
生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。容器基于镜像启动,一旦容器启动实现后,咱们就能够登录到容器中装置本人须要的软件或者服务。所以 Docker
容器就是:【一个镜像格局】【一些列规范操作】【一个执行环境】。
③ Registry
(注册核心)
Docker
用 Registry
来保留用户构建的镜像。Registry
分为公共和公有两种。Docker
Docker` 公司经营公共的
Registry叫做
Docker Hub。用户能够在
Docker Hub注册账号,分享并保留本人的镜像(阐明:在
Docker Hub下载镜像巨慢,能够本人构建公有的
Registry`)。
1.4 装置 Docker
装置一些必要的零碎工具: sudo yum install -y yum-utils device-mapper-persistent-data lvm2
增加软件源信息:sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新 yum
缓存: sudo yum makecache fast
装置 Docker-ce
: sudo yum -y install docker-ce
启动 Docker
后盾服务: sudo systemctl start docker
配置国内镜像仓库, 批改结束后,重启 docker
,应用 docker info
命令即可查看 docker
的镜像仓库信息
vi /etc/docker/daemon.json
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/","https://hub-mirror.c.163.com","https://registry.docker-cn.com"],
"insecure-registries": ["10.0.0.12:5000"]
}
二、Docker 常用命令
docker
命令大全:https://www.runoob.com/docker/docker-command-manual.html
搜寻镜像: docker search image_name
拉取镜像: docker pull image_name
拉取某个版本的镜像: docker pull centos:latest
查看镜像: docker images
删除镜像:docker rmi image_name/docker rmi container_id
(强制加 -f
)
查看运行中的启动: docker ps
查看所有容器: docker ps -a
启动容器: docker start container_name/container_id
重启容器: docker restart container_name/container_id
敞开容器: docker stop container_name/container_id
进入容器: docker run container_name/container_id
删除容器: docker rm container_name/docker rmi container_id
(强制加 -f
)
查看运行容器的各种数据:docker inspect container_name/container_id
打标签 :docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
例:docker tag ubuntu:15.10 runoob/ubuntu:v3
将指定镜像保留成 tar
归档文件: docker save [OPTIONS] IMAGE [IMAGE...]
例:docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
OPTIONS
阐明:
-o
: 输入到的文件
导入应用 docker save
命令导出的镜像: docker load [OPTIONS]
例:docker load --input fedora.tar
OPTIONS
阐明:
--input
,-i
: 指定导入的文件,代替STDIN
--quiet
,-q
: 精简输入信息
三、利用部署
3.1 mysql 部署
下载:docker pull mysql:5.6
启动 mysql
并指定 root
用户的明码:docker run -itd --name mysql5.6 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 mysql:5.6
进入 mysql
容器:docker exec -it mysql5.6 /bin/bash
进入命令行:mysql -u root -p
复制 sql
脚本到容器:docker cp /opt/create.sql mysql5.6:/home/sql/;
3.2 装置 Redis
下载:docker pull redis:3.2
启动:docker run -p 6379:6379 -v $PWD/data:/data -d redis:3.2 redis-server --appendonly yes
查看 redis运行的id:docker ps
启动 redis
客户端:docker exec -it container_id redis-cli
3.3 装置 Elasticsearch
下载:docker pull elasticsearch:2.4.4
启动:docker run -d -p 9200:9200 -p 9300:9300 --name elasticsearch elasticsearch:2.4.4
9300 是 TCP
通信端口,集群间和 TCP Client
都走的它,9200 是 HTTP
协定的 RESTFUL
接口
3.4 装置 oracle11g
装置 oracle11g
四、迁徙与备份
容器保留为镜像: docker commit mysql5.6 mysql5.6_i
镜像备份,将镜像保留为 tar
文件: docker save -o mysql5.6.tar mysql5.6_i
镜像复原与迁徙:
首先先删除掉 mysql5.6
镜像 而后执行此命令进行复原:docker load -i mynginx.tar
(-i
:输出的文件)
执行后再次查看镜像,能够看到镜像曾经复原
五、Dockerfile
Dockerfile
是由一系列命令和参数形成的脚本,这些命令利用于根底镜像并最终创立一个新的镜像。
- 对于开发人员:能够为开发团队提供一个完全一致的开发环境
- 对于测试人员:能够间接拿开发时所构建的镜像或者通过
Dockerfile
文件构建一个新的镜像开始工作 - 对于运维人员:在部署时,能够实现利用的无缝移植
5.1 常用命令
命令作用 FROM image_name:tag 定义了应用哪个根底镜像启动构建流程 MAINTAINER user_name 申明镜像的创建者 ENV key value 设置环境变量 (能够写多条)RUN command 是 Dockerfile 的外围局部(能够写多条)ADD source_dir/file dest_dir/file 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后主动解压 COPY source_dir/file dest_dir/file 和 ADD 类似,然而如果有压缩文件并不能解压 WORKDIR path_dir 设置工作目录
5.2 应用脚本创立镜像
① 上传 jdk-8u171-linux-x64.tar.gz
到服务器(虚拟机)中的 /usr/local/dockerjdk8
目录
② 创立文件 Dockerfile
[root@rich ~]
FROM centos:7
MAINTAINER RICH
WORKDIR /usr
RUN mkdir /usr/local/java
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
③ 执行命令构建镜像
[root@rich ~]
留神后边的空格和点,不要省略,指定以后 Dockerfile
的地位
④查看镜像是否建设实现:docker images
六、Docker 公有仓库
6.1 公有仓库搭建与配置
① 拉取公有仓库镜像:docker pull registry
② 启动公有仓库容器:docker run -di --name=registry -p 5000:5000 registry
③ 拜访 http://ip:5000/v2/_catalog
:看到 {"repositories":[]}
示意公有仓库搭建胜利并且内容为空
④批改 daemon.json
vi /etc/docker/daemon.json
{"insecure-registries":["192.168.184.141:5000"]}
此步用于让 Docker
信赖公有仓库地址
⑤ 重启 Docker
服务:systemctl restart docker
6.2 镜像上传至公有仓库
① 标记此镜像为公有仓库的镜像:docker tag jdk1.8 ip:5000/jdk1.8
② 再次启动私服容器:docker start registry
③ 上传标记的镜像:docker push ip:5000/jdk1.8
微信搜一搜 : 全栈小刘,获取文章 pdf 版本