docker:快速学习基础使用
通过一篇长篇文章来学习docker的基本概念和基本使用:什么是容器技术;什么是镜像、容器、仓库;如何操作镜像、容器;如何创建新的镜像;如何从云拉取镜像、推送镜像到云。
发布时间:2020年3月25日
发布者:progor
docker介绍
- 官网
- docker 是一个开源的应用容器引擎,docker 可以让开发者打包他们的应用以及应用的环境依赖到一个轻量级、可移植的容器中,然后发布到任何流行的 平台(linux,windows)上。
- docker基于Go语言。
- docker的相关技术有docker swarm ,kubernates,Compose,这些都是比较热门的容器技术,特别是k8s特别火。
docker是一种容器技术,为什么现在容器技术那么火?
容器能够打包应用和隔离运行环境,这是出发点。
容器打包应用快速而高效。
容器的资源使用效率比VM高。在理论上,他肯定要比原本无容器下更消耗资源,但他换来的是与环境的隔离,避免了不同环境的问题。而他与另一种环境隔离技术–虚拟机技术相比又更加节省资源,因为虚拟机是虚拟出一台完整的机器。容器使用宿主机硬件,不需要像虚拟机一样虚拟硬件。docker使用宿主机的操作系统内核,不需要像虚拟机那样重新创建一个内核(创建内核消耗时间较多)。相应的,容器的启动速度也要快于虚拟机。
容器可以部署在各种平台,只要这个平台能够安装docker,然后就可以在docker上部署容器。
容器的部署很快。如果你使用了一台物理机来部署你的应用,如果某天你的物理机挂了,那么你需要在另外一台机上安装各种环境,然后再部署应用。但容器的话就像一套环境的模板,部署很快。
【最重要的一点】容器的打包是把环境一起打包的,就保证了每个应用的运行环境都会是一模一样的。一次打包,多地运行。很多时候,BUG都是由于环境不同导致的,相同的环境可以避免一些BUG的产生。
现实使用意义:
docker由于其快速部署和一次构建多次部署的特性,使得根据服务器的压力动态快速部署服务端成为可能,比人工部署服务端快速得多。
安装与镜像源配置
CentOS7
安装
1.卸载可能存在的旧版的docker:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.安装所需的软件包:
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
3.设置下载docker的yum库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
4.安装最新版docker-ce
yum install -y docker-ce
5.启动docker
systemctl daemon-reload && systemctl start docker
6.查看docker信息,如果打印成功,那么就是安装成功了:
docker info
设置镜像源
docker创建一个容器需要对应的镜像,而镜像通常都是从docker hub上下载的,docker hub的功能有点像github,都是一种仓库,docker hub是存储镜像的仓库。
但是docker hub是一个国外的网站,他的访问速度不太行,github的不稳定大家应该也深有感受了。所以我们要修改docker 拉取镜像的镜像源,让他从国内的一些镜像网站来拉取镜像,这些国内的镜像都会依靠自己的稳定网络不断同步docker hub。
编辑/etc/docker/daemon.json
文件,把里面registry-mirrors
的值改成下面的:【还可以自行增加阿里云的源】vi /etc/docker/daemon.json
{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://registry.docker-cn.com"
]
}
阿里的镜像源还是比较稳定的,可以进入阿里云搜索容器镜像服务,然后按照下图来找到加速地址:
补充:
- 其他系统的安装方式,可以参考官方文档:Docker安装
简单使用例子
这是一个使用docker来创建一个包含了mysql的容器,我们借助这个例子来体验docker创建应用容器的快速。
1.安装之后,运行systemctl start docker
启动docker,然后执行以下命令:
docker pull mysql:5.7
当这样显示的时候就是代表成功了。
2.查看镜像:docker images
3.使用这个镜像创建一个容器(也可以称为镜像实例):
语法:
docker run --name 这个镜像实例的名字 -e MYSQL_ROOT_PASSWORD=mysql根用户的密码 -d -p 主机端口:容器内部的端口 mysql:标签
(MYSQL_ROOT_PASSWORD=123456 =号不要有空格间隔)
(-d代表后台运行,-p是为了把容器内部的mysql绑定到外部端口进行使用)
具体示例:
docker run --name testmysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7
4.查看容器运行状态:docker container ls
5.测试连接,由于我们使用了-p 3306:3306
,这是将容器内部的3306端口与主机的端口建立的连接,,所以可以直接通过连接主机Linux的端口来操作容器内部的mysql:
假设当前我的机器的IP是192.168.48.129
,那么我需要连接192.168.48.129:3306
来操作数据库,请使用你的mysql连接工具来测试吧