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的编排、管理和调度。

7