Docker基础

docker基础

docker用来解决什么问题?

​ ​ 先描述这样一个场景:伴随着公司业务的扩展,不可避免的会产生很多软件、配置等问题,为了解决用户体验、公司运营等需求,要求软件更新频率很高,但是又要求系统稳定运行。每一次上一个新的需求,开发人员小王将本地环境正常运行的war包、jar包交给运维人员小张,但是小张在测试(回归)环境验证总是报错,考虑到开发人员小王的水平一般,于是去咨询小王:你这个模块代码有问题吧,我在测试(回归)环境上怎么跑不出来。经过一番探讨,结果是环境问题,小王、小张相互一笑,一种鄙夷的眼神很默契的交汇在一起…总之,天下苦“传统模式”久矣,为了解决环境问题,为了运维、开发的美好未来,docker应运而生。(嘿嘿,当然不仅仅如此)

docker简介

​ ​ 为什么是Docker?Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源(百度百科)。通过开源以后,被Google等大公司率先使用,发展壮大,渐渐的成为了行业规范,为开发运维提供了新架构、新思路。所以是Docker。

原理

参考官方文档:https://docs.docker.com/get-started/overview/

基本架构

在这里插入图片描述

​ ​ Docker使用客户端-服务器架构。Docker客户端与Docker守护进程进行对话,该守护进程完成了构建,运行和分发Docker容器的繁重工作。Docker客户端和守护程序可以在同一系统上运行,或者您可以将Docker客户端连接到远程Docker守护程序。Docker客户端和守护程序在UNIX套接字或网络接口上使用REST API进行通信。

# 重启服务器后,需要重启docker服务
systemctl start docker.service

# 当docker起来不来的时候,先reload,然后重启服务试下看,如果不行只能一步步分析处理了
systemctl daemon-reload
systemctl restart docker.service

看了官方文档后还发现了,The underlying technology(底层技术):

Namespaces(命名空间):

​ ​ Docker使用一种称为的技术namespaces来提供称为容器的隔离工作区。运行容器时,Docker会为该容器创建一组名称空间。这些名称空间提供了一层隔离。容器的每个方面都在单独的名称空间中运行,并且对其的访问仅限于该名称空间。

Docker Engine在Linux上使用以下名称空间:

  • pid命名空间:进程隔离(PID:进程ID)。
  • net命名空间:管理网络接口(NET:网络)。
  • ipc命名空间:管理访问IPC资源(IPC:进程间通信)。
  • mnt命名空间:管理文件系统挂载点(MNT:摩)。
  • uts命名空间:隔离内核和版本标识符。(unix时间共享系统)。
Control groups(控制组):

​ ​ Linux上的Docker引擎还依赖于另一种称为控制组cgroups)的技术。cgroup将应用程序限制为一组特定的资源。控制组允许Docker Engine将可用的硬件资源共享给容器,并有选择地实施限制和约束。例如,您可以限制特定容器可用的内存。

Union file systems(联合文件系统):

​ ​ 联合文件系统或UnionFS是通过创建图层进行操作的文件系统,使其非常轻便且快速。Docker Engine使用UnionFS为容器提供构建模块。Docker Engine可以使用多个UnionFS变体,包括AUFS,btrfs,vfs和DeviceMapper。

Container format(容器格式化技术):

​ ​ Docker Engine将名称空间,控制组和UnionFS组合到一个称为容器格式的包装器中。默认容器格式为libcontainer。将来,Docker可以通过与BSD Jails或Solaris Zones等技术集成来支持其他容器格式。

安装

参考官方文档:https://docs.docker.com/engine/install/centos/

下面是基于centos7,安装docker

# 1、卸载旧版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
# 2、安装yum工具包
sudo yum install -y yum-utils

# 3、更换yum源,以下任选其一
# 官方源
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
# 阿里云 
sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 清华大学
sudo yum-config-manager \
    --add-repo \
    https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
# 4、安装docker最新版引擎(推荐)
sudo yum install docker-ce docker-ce-cli containerd.io

# 有特殊需求可以选择其他版本
yum list docker-ce --showduplicates | sort -r   # 可以查出<VERSION_STRING>
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

# 5、启动docker
sudo systemctl start docker

# 6、通过运行hello-world 映像来验证是否正确安装了Docker Engine
[root@localhost /]# sudo docker run hello-world
[root@localhost /]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        10 months ago       13.3kB

docker初体验

参考官方文档:https://docs.docker.com/get-started/part2/

# 1、从github下载测试包
curl -LO https://github.com/dockersamples/node-bulletin-board/archive/master.zip
# 2、解压
unzip master.zip
# 3、进入到测试目录
cd node-bulletin-board-master/bulletin-board-app
# 4、通过Dockerfile构建镜像
docker build --tag bulletinboard:1.0 .
# 5、通过镜像启动容器
docker run --publish 8000:8080 --detach --name bb bulletinboard:1.0
# 6、通过浏览器访问测试页面
localhost:8000
# 7、测试完成删除测试容器、镜像
docker rm --force bb
docker rmi bulletinboard:1.0

测试成功,就是下面这个页面
在这里插入图片描述

Docker CLI(command-line interface)

参考官方命令行文档:https://docs.docker.com/engine/reference/commandline/image_prune/

帮助命令

docker version		# 显示docke
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值