文章目录
1 什么是Docker
百度百科:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
那什么是容器呢,我们通过与虚拟机对比来理解容器:
虚拟机是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行应用程序进程,而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟,容器共享宿主机的操作系统。容器是计算机上的沙盒进程,与主机上的所有其他进程隔离。
2 使用Docker的优点
- 更高效的利用系统资源
虚拟机是一个完整的操作系统,需要占用大量的磁盘、内存和 CPU 资源,一台机器只能开启几十个的虚拟机。而 Docker只是一个进程,只需要将应用以及相关的组件打包,在运行时占用很少的资源,一台机器可以开启成千上万个 Docker。
- 更快速的启动时间
启动虚拟机需要先启动虚拟机的操作系统,再启动应用,这个过程非常慢。而启动 Docker 相当于启动宿主操作系统上的一个进程。
- 一致的运行环境
通过容器技术将开发环境和测试环境以及生产环境保持版本和依赖上的统一,保证代码在一个高度统一的环境上执行,从而不会再出现 “这段代码在我机器上没问题啊” 这类问题。
- 持续支付和部署
使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。
- 更轻松的迁移
可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
- 更轻松的维护和拓展
Docker 的可移植性和轻量级特性还使得能够近乎实时地动态管理工作负载、根据业务需求扩展或拆除应用程序和服务变得容易。
- 能够快速回滚
容器技术天生带有回滚属性,因为每个历史容器或者镜像都会有保存,而替换一个容器或者某个历史镜像是非常快速和简单的。
- 成本低
在容器出现之前,我们往往构筑一个应用就需要一台新的服务器或者虚拟机。服务器的购置成本和运维成本都很高,而虚拟机需要占用很多不必要的资源。相比之下,容器技术就小巧轻便的多。
3 Docker的应用场景
- web应用的自动化打包和发布
- 自动化测试和持续集成、发布
- 在服务型环境中部署和调整数据库或其他的后台应用
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境
4 Docker 架构
Docker 使用客户端-服务器(C/S)体系结构。
Docker 客户端与 Docker 守护程序进行通信,后者负责构建、运行和分发Docker 容器的繁重工作。
Docker 客户端和守护程序可以在同一系统上运行,也可以将 Docker 客户端连接到远程 Docker守护程序。大部分情况下,Docker服务端和客户端运行在一台机器上。Docker客户端和守护进程通过UNIX套接字或网络接口使用REST API进行通信。
- Docker 守护程序(Docker daemon)
Docker 守护进程运行在一台主机上,用户并不直接和守护进程进行交互,而是通过 Docker 客户端间接和其通信。
- Docker 客户端(Docker client)
Docker 客户端是主要的用户与 Docker 交互方式,它接收用户指令并且与背后的 Docker 守护进程通信。
- Docker 注册表(Docker registries)
Docker 注册表存储 Docker 镜像(image)。Docker Hub 是任何人都可以使用的公共注册表,默认情况下,Docker配置为在 Docker Hub 上查找镜像,也可以运行自己的私有注册表。
5 Docker中的基本概念
镜像(Image)
Docker镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数。
镜像不包含任何动态数据,其内容在构建之后也不会被改变。
容器(Container)
容器是镜像的可运行实例
,容器的实质是进程,但与直接在宿主执行的进程不同,运行容器时,Docker 会为该容器创建一组命名空间(namespace),这些命名空间提供了一个隔离层。容器的每个方面都在单独的命名空间中运行,其访问权限仅限于该命名空间
。
仓库(Repository)
镜像仓库是 Docker 用来集中存放镜像文件的地方
类似于代码仓库(github、gitee等)。有时候会把仓库(Repository)和注册表(Registry)混为一谈,并不严格区分。 实际上,一个Docker 注册表(Registry)中可以包含多个仓库(Repository),每个仓库可以包含多个标签(tag) ,每个标签对应着一个镜像(image)
。
6 在Centos中安装Docker
参照Docker官网在Centos中安装Docker
方式一 :存储库安装(推荐)
- 1 卸载旧版本docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 2 设置仓库
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
- 3 安装Docker引擎
sudo yum install docker-ce docker-ce-cli containerd.io
- 4 启动Docker
sudo systemctl start docker
- 5 建议设置Docker开机自启动
systemctl enable docker
- 6 通过运行hello world映像,验证Docker引擎是否已正确安装
sudo docker run hello-world
方式二:使用便捷脚本安装
不建议将便捷脚本安装方式用于生产环境,但可以用作示例来创建根据您的需求量身定制的预配脚本。
curl -fsSL https://test.docker.com -o test-docker.sh
sudo sh test-docker.sh
7 Docker使用示例(Docker安装mysql5.7)
- 配置容器镜像加速
为解决国内下载镜像缓慢的问题,在 /etc/docker/daemon.json 中写入如下内容,如果该文件不存在请新建该文件
vim daemon.json
{"registry-mirrors":["https://registry.docker-cn.com"]}
也可以选择其它Docker 国内镜像
阿里云:https://help.aliyun.com/document_detail/60750.html
网易:http://hub-mirror.c.163.com
Docker官方中国加速器:https://registry.docker-cn.com
ustc :https://docker.mirrors.ustc.edu.cn
sudo systemctl daemon-reload
sudo systemctl restart docker
- 在Docker Hub上查找自己想要的mysql版本
在左上角的搜索框中输入mysql并回车:
可以搜索到非常多的镜像,Official lmage表示为官方镜像
这里我们选择第一个作为演示,点击Tag查看我们需要的版本及拉取该镜像的命令
- 拉取镜像
docker pull mysql:5.7.37-oracle
- 查看 Docker 中当前拥有的镜像
docker images
- REPOSITORY为镜像名
- TAG为版本标志
- IMAGE ID为镜像id(唯一)
- CREATED为创建时间,注意这个时间并不是我们将镜像下载到 Docker中的时间,而是镜像创建者创建的时间
- SIZE为镜像大小。
- 运行刚刚拉取的镜像(image)
docker run --name mysql-test -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 -d mysql:5.7.37-oracle
- –name mysql-test 设置容器名称为mysql-test
- -e 设置环境变量,环境变量有哪些可以在官网查看mysql Offical Image –>Description–>Environment Variables
- MYSQL_ROOT_PASSWORD=123456 设置root用户密码为123456
- -p 3307:3306 容器端口映射,将容器内3306端口号映射到宿主机3307端口号
- -d 开启后台启动
- mysql:5.7.37-oracle 镜像名:版本号(REPOSITORY:TAG),该项可以替换为镜像id(IMAGE ID)
- 查看已运行容器
docker ps
- 进入刚刚运行起来的容器(container)内
docker exec -it 830710e474d0 /bin/bash
- -it 表示连写的 -i -t
- -i: 允许你对容器内的标准输入 (STDIN) 进行交互
- -t: 在新容器内指定一个伪终端或终端
- 830710e474d0为容器id(CONTAINER ID)
- 登录容器中的mysql
mysql -uroot -p123456
123456为刚刚运行时设置的密码
- 使用exit退出mysql,再使用exit命令退出容器
exit
- 使用Navicat 连接容器中的mysql
- 主机:宿主机ip
- 端口:容器映射到宿主机的端口
- 密码:运行时设置的密码
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/71481.html