1、了解docker
1.1、docker是什么
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)。
官方地址:docker地址
1.2、docker历史
2010年,几个搞IT的年轻人,就在美国成立了一家公司dotcloud做一些pass的云计算服务!
LXC有关的容器技术!他们将自己的技术(容器化技术)命名就是Docker!
Docker刚刚诞生的时候,没有引起行业的注意!(dotCloud就活不下去)
开源(开放源代码)
2013年,Docker开源!
Docker越来越多的人发现了docker的优点!就火了,Docker每个月都会更新一个版本!
2014年4月9日,Docker1.0发布!
Docker为什么这么火?十分的轻巧
在容器技术出来之前,我们都是使用虚拟机技术!
虚拟机:在window中装一个Vmware,通过这个软件我们可以虚拟出来一台或者多台电脑!(很笨重)
虚拟机也是属于虚拟化技术,Docker容器技术,也是一种虚拟化技术!
2.docker的基本操作
2.1基本准备
这篇文章中我的运行环境都是在CentOS7中运行。
所以各位需要首先准备VMware Workstation Pro软件
1、去官网下载:VM官网
2、在官网下载可能会下载速度非常的慢, 所以这里给大家分享一个网盘(不是作者的网盘)
网盘地址
提取码:fmp2
下载安装后,还需要安装一台虚拟机,具体操作如下:
2.1.1 创建CentOS
这里可以选择你适合的大小,推荐至少2GB
这里内存根据自己电脑适合的大小来选择,推荐至少20G
最后确定是不是刚刚选择的信息
进入这个页面表示成功创建,现在进行下一步操作
这边选择《 简体中文 》
这一步一定需要选择,要不然进去后就看不到虚拟机的视图化,只有纯指令的页面,对于我们开发非常不便
选择完成后,就可以开始安装了
密码随意设置,我这里设置的是123456
出现这个页面,就代表我们的CentOS已经正在安装了,只需要等着结束即可
等进来之后,就是这个页面
这个时候,电脑是没有网络的,我们需要为他配置网络,可以查看以下博主的作品,质量非常高
CentOs配置网络
网络配置成功之后,就可以对虚拟机开始操作了
2.2、安装docker容器
2.2.1、docker基本组成
镜像(Image):
docker镜像就好比一个模板,我们可以通过这个模板来创建容器服务,tomcat镜像===>run==>tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。
容器(container):
docker利用容器技术,独立运行一个或者一组应用 通过镜像来创建
启动,停止,删除,基本命令!
目前就可以把这个容器理解为就是一个简易的linux系统
仓库(repository):
仓库就是存放 镜像(image)的地方!
仓库又可以分为 公有仓库和私有仓库
2.2.2、创建yum
首先安装一个yum工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
安装成功后,执行命令,配置Docker的yum源(已更新为阿里云源):
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
更新yum,建立缓存
sudo yum makecache fast
2.2.3、创建docker
如果项目中有旧的docker,请先删除
yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine \docker-selinux
如果从来没安装过docker,可以省略这一步,直接进行下一步安装docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
启动和校验
# 启动Docker
systemctl start docker# 停止Docker
systemctl stop docker# 重启
systemctl restart docker# 设置开机自启
systemctl enable docker# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
镜像地址可能会变更,如果失效可以百度找最新的docker镜像。
配置镜像步骤如下:
# 创建目录
mkdir -p /etc/docker# 复制内容
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["http://hub-mirror.c.163.com","https://mirrors.tuna.tsinghua.edu.cn","http://mirrors.sohu.com","https://ustc-edu-cn.mirror.aliyuncs.com","https://ccr.ccs.tencentyun.com","https://docker.m.daocloud.io","https://docker.awsl9527.cn"]
}
EOF# 重新加载配置
systemctl daemon-reload# 重启Docker
systemctl restart docker
此镜像可能不太好用,速度有点慢,可以去下方链接中查找最新的镜像
国内镜像链接
推荐镜像:
#复制粘贴即可
echo '{"registry-mirrors": ["https://docker.1ms.run"]}' | sudo tee /etc/docker/daemon.json > /dev/null#刷新
systemctl daemon-reload#重启docker
systemctl restart docker
至此,整个docker的安装就完成了
2.3、docker快速入门
现在可以先安装一个MySQL,试一下我们的docker容器到底安装好了没
如果按传统的方式的话,分为以下几个步骤
(1):网站搜索MySQL的安装包并下载
(2):上传到linux环境中
(3):编译和配置环境
(4):安装并使用
而使用Docker安装,仅仅需要一步即可,在命令行输入下面的命令:
docker run -d \--name mysql \-p 3307:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=root \-v /mysql/data:/var/lib/mysql \-v /mysql/conf:/etc/mysql/conf.d \-v /mysql/init:/docker-entrypoint-initdb.d \mysql:8.0.26
这样可以直接去网站上找到对应的MySQL版本进行下载
(--name):MySQL容器的名称(可改)
(-p):前面的3307指的是安装的MySQL端口(可改),后面的3306指的是默认端口(不可改)
(-e):第一个指时区,设置后可以防止我们时间与本地时间对不上(可改,但建议不改)
(-e):第二个指MySQL容器的密码,可以根据自己的需求更改(可改)
后面三个无需管,直接粘贴即可
最后的MySQL如果未写版本,那么默认就是下载最新的版本,所以可以根据需求进行更改
如果出现上面这种情况,表示我们的MySQL容器正常安装成功了,如果不是这种情况很可能是出现了问题
大家可以发现,当我们执行命令后,Docker做的第一件事情,是去自动搜索并下载了MySQL,然后会自动运行MySQL,我们完全不用插手,是不是非常方便。
而且,这种安装方式你完全不用考虑运行的操作系统环境,它不仅仅在CentOS系统是这样,在Ubuntu系统、macOS系统、甚至是装了WSL的Windows下,都可以使用这条命令来安装MySQL。
要知道,不同操作系统下其安装包、运行环境是都不相同的!如果是手动安装,必须手动解决安装包不同、环境不同的、配置不同的问题!
而使用Docker,这些完全不用考虑。就是因为Docker会自动搜索并下载MySQL。注意:这里下载的不是安装包,而是镜像。镜像中不仅包含了MySQL本身,还包含了其运行所需要的环境、配置、系统级函数库。因此它在运行时就有自己独立的环境,就可以跨系统运行,也不需要手动再次配置环境了。这套独立运行的隔离环境我们称为容器。
说明:
-
镜像:英文是image
-
容器:英文是container
那么,docker到底是从哪里去下载镜像的呢?
docker官网
点击这里就可以进入docker的官网了
2.3、常用指令
docker的指令是非常多的,所以是非常难记的,那么我们就可以查看官方文档来提高我们开发的效率
dockcer指令
2.3.1、命令介绍
其中,比较常见的命令有:
命令 | 说明 |
---|---|
docker images | 查看本地镜像 |
docker rmi | 删除本地镜像 |
docker run | 创建并运行容器(不能重复创建) |
docker stop | 停止指定容器 |
docker start | 启动指定容器 |
docker restart | 重新启动容器 |
docker rm | 删除指定容器 |
docker ps | 查看容器 |
docker logs | 查看容器运行日志 |
docker exec | 进入容器 |
docker save | 保存镜像到本地压缩文件 |
docker load | 加载本地压缩文件到镜像 |
docker inspect | 查看容器详细信息 |
为了防止每次打开虚拟机都需要重启docker容器,所以我们在这里直接为它设置开机自启动
systemctl enable docker
这样下次启动虚拟机后就无需再次打开docker了,非常方便
并且docker里面的容器也同样可以进行自启动,根据需求制定即可
docker update --restart=always [容器名/容器id]
2.3.2、操作MySQL
刚刚我们安装了一个MySQL容器,现在查看它是否存在
使用命令:docker images,即可查看所有下载的镜像
docker images
由于我的之前下载过其他的镜像,所以显示比较多,如果是第一次下载那么就只有一个MySQL镜像,不会有其他的
现在我们查看MySQL的容器是否存在
使用命令docker ps即可查看所有下载的容器,这里为什么一个也没有呢?
因为docker ps只是显示所有正在运行的容器,而我们没有对MySQL设置自启动,所以说他现在是未启动的状态,所以我们可以使用另一个指令,将启动和没启动的全查出来
docker ps -a
(-a)指的是-all的简写,意思是所有都查出来
显而易见,所有的容器都查出来了
那么我们现在将MySQL的容器启动,用来后面的操作
docker start 【名字/ID】
执行这段命令就可以启动了,名字或者ID自己可以选择
启动完成后,我们可以在这里对数据库进行操作,也可以从Windows系统中对它进行操作
我这边使用的软件是navicat,软件可以自己选择,如果没有MySQL软件可以安装一个
Navicat2024最新版下载 (belacad.cn)
这边可以从官网进行下载
进软件后,点击连接后,选择MySQL,然后就可以进行连接了
后面的用户名密码也是根据安装来,可以看之前的设置
然后《主机》就是根据虚拟机的ip地址来决定的
使用 ifconfig 命令可以查看ip地址
需要找到ens33,下面的inet就是ip地址,所以我的ip地址就是(192.168.87.99)
双击连接,就可以看到很多的库,这样就表示我们的数据库就外部连接成功了
如果出现这种问题,可能是因为docker中的数据库容器未启动或者是信息填错了导致的
再根据上面检查一遍即可
想删除容器也很简单,使用docker rm 【名字/ID】就可以了
但是如果容器正在使用,那么就不可删除,这个时候就需要强制删除
docker rm -f 【名字/ID】
2.4、命令别名
在使用docker的过程中,有的命令执行很频繁,并且很长,所以我们就可以使用别名,减少代码
# 修改/root/.bashrc文件
vi /root/.bashrc
内容如下:
# .bashrc# User specific aliases and functionsalias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'# Source global definitions
if [ -f /etc/bashrc ]; then. /etc/bashrc
fi
首先使用vi 命令进入.bashrc文件进行修改
这边我举了几个例子,比如说:
《dis》就是《docker images》的简写
《rm》就是《rm -i》的简写
《dps》就是《docker ps》的简写
这样我们只需要执行简写后的命令,就可以以原命令的方式输出结果
这样减少了很多的代码,非常便利
注意:
执行完毕后需要执行《source /root/.bashrc》命令,让别名生效
2.5、数据卷
数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。
以Nginx为例,我们知道Nginx中有两个关键的目录:
-
html
:放置一些静态资源 -
conf
:放置配置文件
如果我们要让Nginx代理我们的静态资源,最好是放到html
目录;如果我们要修改Nginx的配置,最好是找到conf
下的nginx.conf
文件。
为了部署SSM的工程,需要使用到cp的命令将宿主机内的ssm.war文件复制到容器内部。
数据卷:将宿主机的一个目录映射到容器的一个目录中。
可以在宿主机中操作目录中的内容,那么容器内部映射的文件,也会跟着一起改变。
# 1. 创建数据卷
docker volume create 数据卷名称
# 创建数据卷之后默认会存放在一个目录下 /var/lib/docker/volumes/数据卷名称/_data
# 2. 查看数据卷的详细信息
docker volume inspect 数据卷名称
# 3. 查看全部数据卷
docker volume ls
# 4. 删除数据卷
docker volume rm 数据卷名称
# 5. 应用数据卷
# 当你映射数据卷时,如果数据卷不存在。Docker会帮你自动创建
docker run -v 数据卷名称:容器内部路径 镜像id
# 直接指定一个路径作为数据卷的存放位置。这个路径下是空的。
docker run -v 路径:容器内部的路径 镜像id
也就是说在创建容器的时候,就将数据卷配置好了,所以说如果想给已经安装的的容器再配置数据卷,最好的方法建议是重新再次安装一遍,安装时就配置好数据卷