只要肯下功夫,十岁也能学得会的 Docker 精简版!
一、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
四、迁移与备份
容器保存为镜像: 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 版本
只要肯下功夫,十岁也能学得会的 Docker 精简版!的更多相关文章
- 程序员与年龄:四十岁普通开发、三十五岁首席架构、三十岁基层Leader
最近,有一个词儿特别热门--躺平.有没有人跟你说过:"躺平说起来容易,做起来更容易." 和躺平相对的是另外一个词--内卷,群聊的时候,已经很多次看过草卷起来了.jpg表情包.某些节 ...
- 如何从 0 开始学 ruby on rails (漫步版)
如何从 0 开始学 ruby on rails (漫步版) ruby 是一门编程语言,ruby on rails 是 ruby 的一个 web 框架,简称 rails. 有很多人对 rails 感兴 ...
- 十大滤波算法程序大全(Arduino精编无错版)(转)
源:十大滤波算法程序大全(Arduino精编无错版) 转载请注明出处:极客工坊 http://www.geek-workshop.com/thread-7694-1-1.html
- 从零開始学Swift之Hello World进化版
上节课,也就是昨晚啦,我们学习到从零開始学Swift之Hello World.那一节仅仅有一句代码,大家会认为不够过瘾. 那么这节课,就给大家来多点瘾货吧! 先上图! //var 代表变量的类型, s ...
- 21天学通 C++(第8版) 内涵目录
21天学通 C++(第8版) 第1章 绪论 1 1.1 C++简史 1 1.1.1 与C语言的关系 1 1.1.2 C++的优点 1 1.1.3 C++标准的发展历程 2 1.1.4 哪些人使用C++ ...
- 28岁,转行学 IT 靠谱吗?
前几天在知乎上,刷到这么一个问题 鉴于有不少人看了我的blog给我私信一些职业规划相关的问题,讨论很多的就是担心自己年龄是否还适合转行. 于是决定静心下来码了一篇回答, 同时搬到博客园来供大家消遣.. ...
- 热泪盈眶的五十岁 | James Altucher
我是一名程序员,但我不爱看技术博客,因为要吸取知识点,看源代码.官方文档和书永远比看技术博客要好.对于博客这种偏碎片的媒介,我倾向于看一些短小精炼.有一点深度的叙述,Altucher刚好符我目前的品味 ...
- 二十五、Hadoop学记笔记————Hive复习与深入
Hive主要为了简化MapReduce流程,使非编程人员也能进行数据的梳理,即直接使用sql语句代替MapReduce程序 Hive建表的时候元数据(表明,字段信息等)存于关系型数据库中,数据存于HD ...
- 二十四、Hadoop学记笔记————Spark的架构
master为主节点 一个集群中可能运行多个application,因此也可能会有多个driver DAG Scheduler就是讲RDD Graph拆分成一个个stage 一个Task对应一个Spa ...
随机推荐
- 如何改变CorelDRAW的外观主题皮肤?
CorelDRAW,我们通常也简称为CDR,是一款专业而且使用广泛的矢量图形绘制软件,也常用于绘制图形以及平面设计中.今天我们以CorelDRAW 2020来为大家演示一下,如何改变CorelDRAW ...
- 下载器Folx教程:智能标签怎么用?
Mac专用下载器Folx的智能标签中内置了图片标签,可以自动分类图片文件,但要如何分类GIF图片呢?其实,我们可以在Folx的标签面板创建动图标签,然后再创建标签专属的下载文件夹,来独立存放GIF格式 ...
- SFTP 连接服务器下载文件方法采坑说明
本篇博客主要记录请求SFTP服务器的一些方法采坑情况. 采坑的方法说明: 1. cd():这个方法用于进入某个目录下. 默认情况,当连接SFTP服务器成功后直接进入用户目录,比如我连接自己本机SFTP ...
- SwiftUI:看我展示52张扑克牌,“很快啊!”
目录 思路 效果图 相关代码解析 枚举创建扑克牌号码 枚举创建扑克牌类型 viewModel逻辑 UI实现 源码 感受 思路 使用 SwiftUI 创建 UI 结构: 使用 swift 的枚举和结构体 ...
- 关于你天天见到的JDK、JRE和JVM
什么是JDK.JRE.JVM? 大家都知道电脑的操作系统是由汇编和C语言写出,因此操作系统无法直接识别其他语言.这时我们就需要为我们写的Java程序配备一名翻译官 ----- 编译环境,将Java程序 ...
- 总结一下 php连接oracle,完全可用。
大致有两种方法 第一种 开启php_pdo_oci扩展,一般集成环境都会有这个扩展. 这个东西还是比较简单的,去官网查看吧 http://php.net/manual/zh/book.pdo.php ...
- SpringBoot中的Tomcat是如何启动的?
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>s ...
- python数据更新
def cal(s,m): if s==u"废弃" or s==u"拆除": return 4 elif s==u"竣工": return ...
- RabbitMQ Go客户端教程5——topic
本文翻译自RabbitMQ官网的Go语言客户端系列教程,本文首发于我的个人博客:liwenzhou.com,教程共分为六篇,本文是第五篇--topic. 这些教程涵盖了使用RabbitMQ创建消息传递 ...
- 第二十一章、 Model/View便利类列表部件QListWidget详解
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 列表部件(List Widget)对应类QListWidget,是从QListView派生 ...