Docker,开发人员必会的工具之一
在日常开发中,很多公司的微服务应用或一些常见的中间件都采用通过docker来部署的,今天我们来聊聊docker的那些事。
1、认识docker
docker可以理解成它是一艘大轮船,它可以往我们的的电脑里面部署应用,docker这艘船上的每个集装箱都是一个独立的应用。
如果我们自己安装某些应用可能需要大量繁琐的配置,但是docker直接提供了镜像让我们一键轻松的安装。
docker轮船上的集装箱我们通常称为容器,通过容器我们可以快速的安装Redis、Mysql等常见的中间件服务,并且可以共享给其他的开发者,这就是我们为什么下载镜像后就可以运行的原因。
容器我们如何理解呢?其实一个容器理解成一台虚拟机,但是和虚拟机相比容器的体积更小,因为它不需要安装完整的操作系统。
docker容器相比虚拟机来讲它更加的轻盈,由于docker容器不需要安装完整的操作系统,所以在docker容器中一些Linux中的命令可能无法执行的原因就在此。
创建容器有两种方式,一种是可以从云端拉去镜像(如通用的中间件服务Mysql、Redis、MQ等等),另一种是通过Dockerfile构建Java项目成镜像后运行,如下是典型的Java项目中的Dockerfile文件:
2、安装和使用docker
2.1 安装docker
(1)安装docker环境依赖
yum -y install gcc
yum -y install gcc-c++
(2)安装docker
yum install -y docker
(3)配置docker
vi /etc/docker/daemon.json
----------------------添加内容------------------------
{
"registry-mirrors": ["https://9cpnqwer.mirror.aliyuncs.com"]
}
配置Docker镜像加速器的目的是为提高docker pull的速度,不然我们在拉取镜像的时候速度会比较慢。
(4)启动和停止docker
# 启动/重启动/停止docker
systemctl start docker
systemctl restart docker
systemctl stop docker
# 开机启动设置
systemctl enable docker
(5)测试docker是否启动成功
至此docker就已经安装成功了。
2.2 实操docker安装Mysql
(1)拉取镜像
# 指定拉取mysql的版本 当然也可以不指定
docker pull mysql:5.7
(2)启动Mysql
docker run -p 3306:3306 --name mysql --restart=always --privileged=true
-v /usr/local/mysql/log:/var/log/mysql
-v /usr/local/mysql/data:/var/lib/mysql
-v /usr/local/mysql/conf:/etc/mysql
-v /etc/localtime:/etc/localtime:ro
-e MYSQL_ROOT_PASSWORD=longxiabiancheng
-d mysql:5.7
-p表示docker容器的端口和虚拟机的端口的映射;
–name是给启动的docker容器取个名字;
–restart表示容器跟随docker启动;
-v表示磁盘文件的映射,目的是可以在容器中访问宿主机中的文件或目录,实现数据的共享和持久化;
-d表示后台启动;
-e表示为创建的容器传递环境变量;
–privileged表示获取宿主机的root权限
(3)查询mysql容器的启动
通过docker ps 命令可以查询正在运行的容器的情况。
3、docker的常见命令整理
(1)查看已经运行的容器
docker ps
(2)查看所有的容器
docker ps -a
(3)停止容器
docker stop <容器id或者容器name>
(4)启动容器
docker start <容器id或者容器name>
(5)删除已经停止的容器
docker rm <容器id或者容器name>
(6)强制删除容器,包含没有停止的容器
docker rm -f <容器id或者容器name>
(7)进入容器
docker exec -it <容器id或者容器name> /bin/bash
(8)对应目录下运行docker-compose文件
docker-compose up -d
(9)停用移除所有容器以及网络相关
docker-compose down
(10)删除本地一个或多少镜像
docker rmi -f 镜像id //带-f表示强制删除
总结:
(1)docker可以很方便帮我们安装一些常见的应用服务,如Mysql、Redis等等。
(2)如果有有许多的服务要启动的时候,我们一个个使用docker run的方式来启动比较麻烦,我们可以使用docker-compose来管理部署,当然目前很多的公司多使用k8s来完成对docker的编排、管理和调度。