1.1 docker
1.1.1 概述
官网( Docker: Accelerated, Containerized Application Development)是这样介绍docker的:
Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications…
我们可以把他想象成是一个用了一种新颖方式实现的超轻量虚拟机或者说平台。当然在实现的原理和应用上还是和VM有巨大差别的,并且专业的叫法是应用容器(Application Container),是可以为应用提供可运行容器的一个平台。
比如现在想用MySQL,那就找个装好并配置好的MySQL的容器(可以认为是特殊的,轻量级的虚拟机),运行起来,那么就可以使用 MySQL了。
安装MySql过程并不简单,要配置安装源,安装依赖包,对mysql进行配置…如果要在多台主机上安装,每台主机都要进行这些繁琐的操作,万一服务器挂了,这一系列操作还要再重来一遍,但有了docker,一个安装配置好的mysql容器,可以直接拿到另一台主机上启动,而不必重新安装mysql。另外,docker还有一重要的用处,就是可以保证开发,测试和生产环境的一致.
1.2 docker安装
1.2.1 卸载旧版(没安装过不需要执行)
sudo yum remove docker-ce \
docker-ce-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
其中,sudo是linux系统管理指令,是让普通用户具体系统管理员的权限执行操作。
Yum(全称为 Yellow dog Updater, Modified)是一个RedHat以及CentOS中的Shell软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
1.2.2设置安装docker镜像
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
1.2.3 安装docker-ce
sudo yum install docker-ce docker-ce-cli containerd.io
- 启动docker
sudo systemctl start docker
- 设置docker自启动
sudo systemctl enable docker
- 检查docker版本
docker -v
1.2.4 配置镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://027k4ht9.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
daemon-reload 重新加载配置文件
1.3 安装mysql数据库
在hub.docker.com上搜索mysql镜像
Docker Hubhttps://hub.docker.com/
第一步:拉取mysql镜像
docker pull mysql:5.7
:后面的5.7指定的是版本号 例如sudo docker pull mysql:8.0.23(根据企业规定我这里使用的是mysql5.7)
第二步: 查看镜像是否有
docker images
第三步:启动运行mysql镜像 (docker run 用于启动一个容器)
sudo docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
参数说明:
-p 3306:3306 将容器的3306端口映射到宿主机(就是我们linux的主机)的3306端口
-v /usr/local/docker/mysql/conf:/etc/mysql 将配置文件挂载到宿主机上
-v /usr/local/docker/mysql/log/:/var/log/mysql 将日志文件挂载到宿主机上
-v /usr/local/docker/mysql/data:/var/lib/mysql 将mysql储存文件夹挂载到主机
-e MYSQL-ROOT_PASSWORD=root 初始化root用户的密码
-d 后台运行
mysql:5.7 使用的镜像
第四步:查看容器是否运行
docker ps
第五步:修改mysql my.conf 文件
## 进入宿主机挂载的目录
cd/usr/local/docker/mysql/conf
## 创建文件
vi my.conf
## 粘贴你所需要修改的内容例如
[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
## 保存后,重新启动容器
docker restart mysql
第六步:使用Navicat连接数据库
如果出现连接失败,进入mysql容器中执行mysql -u账号 -p密码
select user,host from user
如果不是%号则将用户的host更改为%,或者创建用户
## 修改root用户
update user set user ='root' where host='%';
## 创建用户
create user 'wangwu'@'%' identified by '123456';
1.4 安装redis容器
第一步:创建redis实例并启动
## 创建redis配置文件
mkdir -p /usr/local/docker/redis01/conf
##在配置文件录下创建redis.conf配置文件
##(因为redis镜像中这个redis.conf是一个目录所以要先创建一个这个配置文件,
## 否则我们本地挂载点也会变成一个目录)
touch /usr/local/docker/redis01/conf/redis.conf
## 构建redis容器
sudo docker run -p 6379:6379 --name redis \
-v /usr/local/docker/redis/data:/data \
-v /usr/local/docker/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
## -v /usr/local/docker/redis01/data:/data 挂载存储文件
## -v /usr/local/docker/redis01/conf/redis.conf 挂载配置文件
第二步:查看正在运行的进程
docker ps
第三步:使用控制台连接redis
## 方法一
docker exec -it redis bash
## 查看版本号
redis-server -v
## 进入redis
redis-cli
## 方法二 快速进入redis客户端
docker exec -it redis redis-cli
分析:
- 如何停止redis服务?
docker stop redis
- 如何启动redis服务?
docker start redis
- 如何重启 redis 服务?
docker restart redis
- 如何查看 redis 服务版本?
docker exec -it redis redis-server -v
- 如何关闭防火墙?
systemctl stop firewalld
1.5 安装nginx
第一步:拉取ngnix镜像 (从这里hub.docker.com去查找)
docker pull nginx
第二步:查看images镜像
docker images
第三步:简单启动(这个目的是为了拿到nginx的默认资源文件,默认会释放到/etc/nginx目录)
docker run --name nginx –d nginx
检测安装的内容docker exec nginx ls -l /etc/nginx
第四步:拷贝安装好的配置文件(将nginx容器服务中的文件拷贝宿主机指定目录)
docker cp -a nginx:/etc/nginx /usr/local/docker/nginx
第五步:强制卸载刚刚安装的nginx
docker rm -f nginx
第六步:启动nginx容器,运行nginx镜像
sudo docker run -p 80:80 --restart always --name nginx \
-v /usr/local/docker/nginx/:/etc/nginx/ \
-v /usr/local/docker/nginx/conf.d:/etc/nginx/conf.d \
-d nginx
第七步:进行访问检测,如图所示:
- nginx 启动后,如何检测是否启动成功? (查日志docker container logs 进程)
- 启动运行容器时候你了解常用哪些参数?(-i(交互),-t(终端),-d(后台),-v(挂载),--name(给容器起名字),….)
- 如何理解挂载?(让容器运行时读写宿主机指定目录,防止容器被删除时,容器中的数据丢失。这个挂载相当于宿主机的一个目录在启动的容器中创建一个访问的快捷方式。)
- 基于一个nginx镜像(image)是否可以启动多个容器?(可以,要指定不同端口映射)