序言

  • 我们在项目开发过程中,往往会依赖于很多中间件,如:MySQL,Redis,Zookeeper,MQ等等,而很多时候项目启动会强依赖于他们,当我们想自己学习一些技术或者脱离公司网络去运行项目时,就很有必要在本地搭建一套运行环境,但是往往会因为繁琐的安装和配置过程被劝退,即使全部安装好了,其高昂的内存消耗也会拖慢我们的电脑,如何优雅快速的在本地安装一套完整的开发环境呢?Docker则是最好的解决方案。
  • 如果各位还不知道什么是Docker,可以暂停先去百度花十几分钟分钟查一查,我相信有过计算机和开发经验的人,基本都能看懂,我这里就不做过多介绍了,我只讲Docker的安装以及如何用Docker搭建一套完整的开发环境,和期间我遇到的坑,避免大家走冤枉路,作为一个开发人员,我不建议大家花太多时间在Docker的原理学习上,我们并不是专业运维人员,Docker我们可以熟练使用和操作就可以了。

1、Docker安装

目前Docker已经可以全平台安装,包括Linux,Windows,Mac系统,如果你用的是Windows,我建议通过虚拟机安装Linux,在Linux系统上安装Docker,这样更有利于我们学习,兼容性也会更好。如果用的是Mac,其底层本身就是基于Linux开发的,可以直接安装Docker,这里我建议有条件的程序员最好还是选择mac作为开发平台, 我在毕业入行的前5年都是用的windows,自从我用了 mac作为主力开发平台之后,就再也换不回Windows了,这就好比我的青春,再也回不去了。

1.1、Linux安装

  1. windows用户推荐使用虚拟机 VirtualBox 安装 Centos7
  2. Centos安装docker:查看版本:cat /etc/redhat-release 参考网址
1
2
3
1.先安装gcc:yum -y install gcc  
2.查看版本:gcc -v
3.安装需要的软件包:yum install -y yum-utils device-mapper-persistent-data lvm2

1.2、Windows/Mac安装

2、Centos操作docker常用命令

  • 查看配置: vi /etc/yum.repos.d/docker-ce.repo
  • 更新软件包: yum makecache fast
  • 安装docker: yum install docker-ce docker-ce-cli containerd.io
  • 配置文件位置: /etc/sysconfig/docker
  • 启动docker: systemctl start docker
  • 设置开机启动: systemctl enable docker
  • 查看docker启动进程: ps -ef|grep docker
  • 查看docker版本: docker version
  • 查看docker信息docker info

2.1、权限问题解决

docker守护进程启动的时候,会默认赋予名字为docker的用户组读写Unix socket的权限,因此只要创建docker用户组,并将当前用户加入到docker用户组中,那么当前用户就有权限访问Unix socket了,进而也就可以执行docker相关命令

  1. 添加docker用户组 sudo groupadd docker
  2. 将登陆用户加入到docker用户组中 sudo gpasswd -a $USER docker
  3. 更新用户组 newgrp docker
  4. 测试docker命令是否可以使用sudo正常使用 docker ps

3、镜像

首先简单介绍一下镜像的概念,如果把Docker比作一台电脑,那么镜像就好比软件的安装包,想要安装什么软件,取决于你下载的安装包,下面就是镜像的下载地址以及阿里云的加速地址。

  1. 镜像搜索地址
  2. 镜像加速地址
1
2
3
4
docker pull mysql:5.7  
docker pull rabbitmq:management (带管理台的MQ)
docker pull zookeeper:latest
docker pull redis:rc-buster

3.1、镜像操作

  • 查看镜像:docker images
  • 展示所有所有镜像(包含中间镜像层):docker images -a
  • 查询镜像:docker search 镜像名字
  • 删除镜像:docker rmi 镜像id

4、容器操作

如果我们把镜像比作下载到电脑上的软件安装包,那么容器就是安装包经过安装之后的样子,启动容器的过程就好比软件安装的过程,不同的是,一个镜像可以启动多个容器,往往我们自己本地一个镜像启动一个容器就可以了,除非在本地搭建集群,否则没必要启动多个容器。

4.1、启动容器

  • 启动mysql: docker run -p 3306:3306 --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
  • 启动rabitmq: docker run -d -p 5672:5672 -p 15672:15672 --name myrabitmq 镜像id
  • 启动redis: docker run -d -p 6379:6379 --name myredis 镜像id
  • 启动zookeeper: docker run --name zk01 -p 2181:2181 --restart always -d 镜像id
  • 启动nacos: docker run --name nacos-2.0.1 -e MODE=standalone -p 8849:8848 -d nacos/nacos-server:2.0.1
  • 启动kibana: docker run -d --name kibana7.7.1 --net mynet -p 5601:5601 kibana:7.7.1

4.2、容器其他操作

Kibana 在Doker中启动相关配置

1
2
3
docker exec -it kibana7.7.1 bash
cd config
vi kibana.yml
  • 查看日志: docker logs -f -t –tail 100 kibana7.7.1
  • 更新启动参数: docker update –restart=always xxx
  • 查看所有容器: docker ps -a
  • 查看启动容器: docker ps
  • 启动已停止的容器: docker start 容器id或名字
  • 关闭容器 : docker stop 容器id
  • 取消容器开机启动: docker update --restart=no 容器ID
  • 强制关闭: docker kill 容器id
  • 删除已停止容器 : docker rm 容器id
  • 删除没有停止容器: docker rm -f 容器id
  • 进入容器内部: docker exec -it 程序id /bin/bash
  • exit 关闭容器退出(自测不会退出): ctrl+p+q
  • 查看日志: docker logs -f (追加) -t (加入时间戳) --tail 3 (显示最后3行) 容器id
  • 查看容器结构细节: docker inspect 容器id
  • 拷贝容器中的文件: docker cp 容器id:文件路径 要拷贝到的路径
  • 提交自己的docker镜像: docker commit -a="lgd" -m="mysql-lgd" 243baa0ea2a7 ligoudan/lgd-mysql:1.0