docker学习总结

核心概念与安装配置

什么是docker

Docker是一个开源的应用容器引擎,基于LXC(Linux Container)内核虚拟化技术实现,提供一系列更强的功能,比如镜像、Dockerfile等;
Docker理念是将应用及依赖包打包到一个可移植的容器中,可发布到任意Linux发行版Docker引擎上。使用沙箱机制运行程序,
程序之间相互隔离;
Docker使用Go语言开发。

Docker架构与内部组件

Docker采用C/S架构,Dcoker daemon作为服务端接受来自客户端请求,并处理这些请求,比如创建、运行容器等。客户端为用
户提供一系列指令与Docker daemon交互。
在这里插入图片描述
LXC:Linux容器技术,共享内核,容器共享宿主机资源,使用namespace和cgroups对资源限制与隔离。
Cgroups(control groups):Linux内核提供的一种限制单进程或者多进程资源的机制;比如CPU、内存等资源的使用限制。
NameSpace:命名空间,也称名字空间,Linux内核提供的一种限制单进程或者多进程资源隔离机制;一个进程可以属于多个命
名空间。Linux内核提供了六种NameSpace:UTS、IPC、PID、Network、Mount和User。
AUFS(advanced multi layered unification filesystem):高级多层统一文件系统,是UFS的一种,每个branch可以指定readonly(ro
只读)、readwrite(读写)和whiteout-able(wo隐藏)权限;一般情况下,aufs只有最上层的branch才有读写权限,其他branch
均为只读权限。
UFS(UnionFS):联合文件系统,支持将不同位置的目录挂载到同一虚拟文件系统,形成一种分层的模型;成员目录称为虚拟
文件系统的一个分支(branch)。
在这里插入图片描述
在这里插入图片描述

docker有什么优点

1、持续集成
在项目快速迭代情况下,轻量级容器对项目快速构建、环境打包、发布等流程就能提高工作效率。
2、版本控制
每个镜像就是一个版本,在一个项目多个版本时可以很方便管理。
3、可移植性
容器可以移动到任意一台Docker主机上,而不需要过多关注底层系统。
4、标准化
应用程序环境及依赖、操作系统等问题,增加了生产环境故障率,容器保证了所有配置、依赖始终不变。
5、隔离性与安全
容器之间的进程是相互隔离的,一个容器出现问题不会影响其他容器。

虚拟机与容器区别

在这里插入图片描述
以KVM举例,与Docker对比
1、启动时间
Docker秒级,KVM分钟级。
2、轻量级
容器镜像大小通常以M为单位,虚拟机以G为单位。
容器资源占用小,要比虚拟机部署更快速。
3、性能
容器共享宿主机内核,系统级虚拟化,占用资源少,没有Hypervisor层开销,容器性能基本接近物理机;
虚拟机需要Hypervisor层支持,虚拟化一些设备,具有完整的GuestOS,虚拟化开销大,因而降低性能,没有容器性能好。
4、安全性
由于共享宿主机内核,只是进程级隔离,因此隔离性和稳定性不如虚拟机,容器具有一定权限访问宿主机内核,存在一定安全
隐患。
5、使用要求
KVM基于硬件的完全虚拟化,需要硬件CPU虚拟化技术支持;
容器共享宿主机内核,可运行在主流的Linux发行版,不用考虑CPU是否支持虚拟化技术。

应用场景

1、应用打包与部署自动化
构建标准化的运行环境;
现在大多方案是在物理机和虚拟机上部署运行环境,面临问题是环境杂乱、完整性迁移难度高等问题,容器即开即用。
2、自动化测试和持续集成/部署
自动化构建镜像和良好的REST API,能够很好的集成到持续集成/部署环境来。
3、部署与弹性扩展
由于容器是应用级的,资源占用小,弹性扩展部署速度要更快。
4、微服务
Docker这种容器华隔离技术,正式应对了微服务理念,将业务模块放到容器中运行,容器的可复用性大大增加了业务模块扩展性。

docker安装

EPEL扩展包安装

由于我使用的centos6.5,所以需要先安装EPEL扩展包。
1、 确认centos版本
$ cat /etc/redhat-release
2、 下载EPEL 的rpm 安装包
$ wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
3、 安装EPEL
通过以下命令安装EPEL 软件包
$ sudo rpm -ivh epel-release-6-8.noarch.rpm 或$ sudo rpm -ivh epel-release*
4、 检查EPEL 源
安装好EPEL 源后,用yum 命令来检查是否添加到源列表
# yum repolist

Docker安装

1、 安装yum源
yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
2、 安装docker
yum install docker-io
3、 启动docker
service docker start
4、 查看docker版本
docker version
在这里插入图片描述
说明docker已经启动成功。

CentOS7
# 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加Docker软件包源
yum-config-manager
–add-repo
https://download.docker.com/linux/centos/docker-ce.repo
# 更新yum包索引
yum makecache fast
# 安装Docker CE
yum install docker-ce
# 启动
systemctl start docker
# 测试
docker run hello-world
docker version
# 卸载
yum remove docker-ce
rm -rf /var/lib/docker

镜像管理

什么是镜像?

简单说,Docker镜像是一个不包含Linux内核而又精简的Linux操作系统。

镜像从哪里来?

Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容器镜像,Docker工具默认从这个公共镜像库下载镜像。
https://hub.docker.com/explore
默认是国外的源,下载会慢,可以国内的源提供下载速度:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://04be47cf.m.daocloud.io

镜像工作原理?

当我们启动一个新的容器时,Docker会加载只读镜像,并在其之上添加一个读写层,并将镜像中的目录复制一份到
/var/lib/docker/aufs/mnt/容器ID为目录下,我们可以使用chroot进入此目录。如果运行中的容器修改一个已经存在的文件,
那么会将该文件从下面的只读层复制到读写层,只读层的这个文件就会覆盖,但还存在,这就实现了文件系统隔离,当删除容器后,读写层的数据将会删除,只读镜像不变。

镜像文件存储结构?

docker相关文件存放在:/var/lib/docker目录下
/var/lib/docker/aufs/diff # 每层与其父层之间的文件差异
/var/lib/docker/aufs/layers/ # 每层一个文件,记录其父层一直到根层之间的ID,大部分文件的最后一行都已,表示继
承来自同一层
/var/lib/docker/aufs/mnt # 联合挂载点,从只读层复制到最上层可读写层的文件系统数据
在建立镜像时,每次写操作,都被视作一种增量操作,即在原有的数据层上添加一个新层;所以一个镜像会有若干个层组成。
每次commit提交就会对产生一个ID,就相当于在上一层有加了一层,可以通过这个ID对镜像回滚

镜像管理命令

search
pull
push
images
commit
build
rmi
export
import
save
load

容器管理

创建容器常用选项

创建容器命令格式:
Usage: docker create [OPTIONS] IMAGE [COMMAND] [ARG…] Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
OPTIONS(常用选项)
在这里插入图片描述

命令管理容器

容器基本操作:
ps
attach
rm
start
stop
kill
pause/unpause
rename
容器更多操作:
inspect
exec
top
port
cp
diff
logs
stats
update
events

数据持久化

  1. 数据卷
    将宿主机目录挂载到容器目录。
    数据卷特点:
    1)在容器启动初始化时,如果容器使用的宿主机挂载点有数据,这些数据就会拷贝到容器中。
    2)数据卷可以在容器直接共享和重用。
    3)可以直接对数据卷里的内容进行修改。
    4)数据卷的变化不会影响镜像的更新。
    5)卷会一直存在,即使挂载数据卷的容器已经删除。
    示例:
    docker run -itd --name web01 -v /container_data/web:/data Ubuntu
    注:/container_data/web为宿主机目录,/data是容器中目录,目录不存在会自动创建。
  2. 容器数据卷
    将一个运行的容器作为数据卷,让其他容器通过挂载这个容器实现数据共享。
    示例:
    docker run -itd -v /data --name dvdata ubuntu
    docker run -itd --name web01 --volumes-from dvdata ubuntu

构建Java环境镜像

1、 下载centos镜像
在这里插入图片描述
2、 上传jdk和tomcat安装包
上传路径/data/soft/,路径可自定义
在这里插入图片描述
3、 启动镜像
docker run -i -t -v /data/soft/:/data/soft/ ab9a80ab07d0 /bin/bash
● -i:表示以“交互模式”运行容器
● -t:表示容器启动后会进入其命令行
● -v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
在这里插入图片描述
初始命令表示一旦容器启动,需要运行的命令,此时使用“/bin/bash”,表示启动后直接进入bash shell。
进入容器后,ctrl+d 或者exit命令, 退出容器
4、 安装相关的JDK等程序,这里全部安装到/data/目录
tar -zxvf jdk-8u191-linux-x64.tar.gz -C /data/
mv jdk-8u191-linux-x64 jdk1.8
在这里插入图片描述
tar -zxvf apache-tomcat-8.0.53.tar.gz -C /data/
mv apache-tomcat-8.0.53 tomcat

5、 配置环境变量
vi /etc/profile

添加下面的配置:
export HISTTIMEFORMAT
JAVA_HOME=/data/jdk1.8
CLASSPATH= J A V A H O M E / l i b / P A T H = JAVA_HOME/lib/ PATH= JAVAHOME/lib/PATH=PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH

export CATALINA_HOME=/data/tomcat
export CATALINA_BASE=/data/tomcat

保存并退出,设置立即生效:

source /etc/profile
在这里插入图片描述
6、 编写启动tomcat脚本 start. sh
vi /data/start.sh

添加以下内容:

#!/bin/bash
#Export environment variable
source /etc/profile
#Start tomcat
bash /data/tomcat/bin/catalina.sh run

添加可执行权限:

chmod u+x /data/start.sh

#然后退出 容器
exit
7、 提交镜像
docker commit -m “创建说明” CONTAINER ID(容器id) REPOSITORY(镜像名):TAG(标签)
在这里插入图片描述
docker images 查看是否成功:
在这里插入图片描述
8、 启动容器中的tomcat,即执行start.sh
在这里插入图片描述
9、 验证是否启动成功
在这里插入图片描述
出现tomcat首页,说明docker容器制作成功

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值