一、Docker介绍
1、Docker是什么?
Docker ,翻译过来就是码头工人.
虚拟化容器技术。Docker基于镜像,可以秒级启动各种容器。每一种容器都是一个完整的运行
环境,容器之间互相隔离。
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器完全使用沙盒机制,相互之间不会存在任何接口。几乎没有性能开销,可以很容易的在机器和数据中心运行。最重要的是,他们不依赖于任何语言、框架或者包装系统。
2、Docker容器技术与虚拟机的区别
相同点 :docker和容器技术和虚拟机技术,都是虚拟化技术。
不同点 :
虚拟机技术:
容器技术:
通过图片,我们很明显的看到容器少了一层Guest OS,也就是少了虚拟机操作系统这一层,所以docker效率比虚拟机效率高。达到了秒级启动的地步。
docker相较于VM的优点:
1、比VM小、快,Docker容器的尺寸减小相比于整个虚拟机大大简化了分布
到云和分发时间的开销。Docker启动一个容器实例时间仅仅需要几秒钟。
2、Docker是一个开放的平台,构建、发布和运行分布式应用程序。
3、开发人员不需要关系具体是哪个Linux操作系统
4、Google、微软(azure)、亚马逊、IBM等都支持docker。
5、Docker支持Unix/Linux操作系统,也支持Windows和Mac。
Docker局限性:
Docker用于应用程序时是最有用的,但并不包含数据。日志、数据库等通常放在Docker容器外。一个容器的镜像通常都很小,不用和存储大量数据,存储可以通过外部挂载等方式使用,比如:NFS、ipsan、MFS等 ,或者docker命令 ,-v映射磁盘分区。
总之,docker只用于计算,存储交给别人。
3、通过docker架构图初步了解docker
这里简单给大家介绍一下docker的工作流程。
工作流程:
1、启动docker
2、下载镜像到本地
3、启动docker容器实例
Docker核心技术:
1、Namespace —> 实现Container的进程、网络、消息、文件系统和主机名的隔离。
2、Cgroup —> 实现对资源的配额和调度。
注意:Cgroup的配额,可以指定实例使用的CPU个数,内存大小等。
二、Docker安装
我这里在虚拟机VMware的linux上安装,参考官方文档
1、安装过程
先卸载之前安装的Docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
这里由于我没有安装任何的Docker,所以显示如下:
在安装Docker之前需要先安装一些工具包
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
会显示加载了几个插件
后面就利用下面开始安装Docker
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
出现下列显示
一路y,知道安装完成。
开启Docker
sudo systemctl start docker
测试Docker
sudo docker run hello-world
此命令下载测试图像并在容器中运行它。当容器运行时,它会打印一条消息并退出。
2、Docker加速器
为了加快从Dockerhub里面加快下载一些镜像,这里我们用一下阿里云的镜像加速器,来加快从Dockerhub里面下载镜像的速度,以减少下载的等待时间。
步骤:
登录自己的阿里云账户,找到控制台(左上角)->容器镜像服务->镜像工具(镜像加速器)->拉到下面,找到对应操作系统的操作文档,按照操作执行一下。我这里用的CentOS作为例子:
3、Docker安装MySQL
下载镜像文件
sudo docker pull mysql:5.7
如果mysql不加版本号,会下载最新的。
相对应的版本号(TAG),可以看dockerhub-mysql,如下图:
创建实例并启动:
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
参数说明:
- -p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口
- -v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂载到主机
- -v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
- -v /mydata/mysql/data:/var/lib/mysql/:将配置文件夹挂载到主机
- -e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码
如何看自己的images里面已经成功加入,可以利用命令:
sudo docker ps
成功截图:
docker容器文件挂载与端口映射
上面创建了MySQL容器在linux主机里面,但是由于一些信息需要进入到linux系统里面的MySQL容器里面更改,例如相关配置信息或者查询日志信息,就比较麻烦。所以将linux里面建立一些文件和MySQL里面的文件进行挂载,例如图中在linux系统里面建立 /mydata/mysql/log 和 MySQL容器里面 /var/log/mysql 文件建立联系,并且也和linux的端口3306和MySQL的3306建立联系,访问linux的3306端口就是在访问MySQL的3306端口。
如上图,我们可以在linux的系统里面去修改mysql的配置信息。
我们开始配置MySQL的配置信息:
vi /mydata/mysql/conf/f/my.cnf
#下面为MySQL的字符码配置信息
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
然后重启MySQL
sudo docker restart mysql
之后我们可以去查看我们在MySQL容器内部修改的文件内容:
我们修改的文件在linux内部是:/mydata/mysql/conf/f/my.cnf
MySQL相对应的是:/etc/mysql/my.cnf
可以发现里面的内容和上面自己修改的内容一致。
证明Docker文件挂载成功!!!
4、Docker安装Redis
按照上述办法进行同样的Redis安装。
下载Redis
docker pull redis
默认为下载最新的,如果需要其他相对应的版本,参考Dockerhub-redis文档
进行创建实例并启动,开始文件挂载
docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf`在这里插入代码片`
但是这里面有个小bug,由于redis里面只有/tec/redis,并没有redis.conf,所以没有办法将Linux
的/mydata/redis/conf/f/redis.conf 和redis容器里面的redis.conf进行挂载,所以需要先创建redis.conf,命令:
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
由于现在redis只是链接内存,没有持久化,所以利用命令:
docker exec -it redis redis-cli
进入redis之后,输入
set aa bb
get aa
然后重启redis,会出现之前set aa的值消失,因此需要进行redis aop持久化,那么就需要修改redis的配置信息。
命令:
vi /mydata/redis/conf/redis.conf
插入:appendonly yes
保存即可。
参考文章:
docker入门,这一篇就够了。
docker入门(利用docker部署web应用)
Docker删除镜像和容器