CentOS7安装Docker搭建开发环境

本次介绍下用Docker来搭建开发环境,以前本地开发为了省事一些诸如MySql、Redis、Nginx之类的就直接安装了,有时配置不对功能用不了,卸载又不彻底把电脑弄得乱七八糟,反正是挺烦心的。

后来装了虚拟机里面再乱也不怕了,但是作为一个认真的程序员(强迫症)里面乱糟糟也忍不了,为了虚拟机内部应用的隔离、方便扩展、往生产环境的迁移等问题选择使用Docker,它的安装比较简单直接参照官方文档即可。

废话不多说了直接上干货~

一、Docker 安装

我的操作系统是CentOS 7.6,装的Docker 18.03.1.ce 为了避坑安装之前我在网上找些资料进行对比,最后选定参照官方文档进行安装,事实上在网上有些大神博客写的还是不错的~

1. 前提条件

  • 选择一个 CentOS 7 的稳定版本

  • 启用 yum 的 centos-extras 库

    # 默认 yum 的 centos-extras 库是启用的,可通过修改CentOS-Base.repo文件进行设置
    vi /etc/yum.repos.d/CentOS-Base.repo
    
    [extras]
    name=CentOS-$releasever - Extras
    mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
    #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
    gpgcheck=1
    enabled=1  # 该项存在请将値从0改为1,该项不存在默认为1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    
    # 可通过下面命令进行启用库的查看(可将enabled=0查看区别)
    yum repolist enabled
    
    
  • 推荐使用 overlay2 存储驱动(重中之重,好多资料都不提或者一笔带过,但这个地方着实是一个超级大坑)
    我习惯以官方文档为主,用其他资料来辅助理解及避坑。在这一步骤上官方半句话略过,其他安装博客要不机翻,要不干脆就不写,但是在一些BUG及问题解决帖上发现此处乃是超级大坑。可参照参考资料[1] [2] [4] [5] [6]
    我将信息总结为以下几点:

    • Docker v17.06 之前版本 CentOS 和 RHEL 生产环境必须使用 devicemapper 驱动的 direct-lvm 模式
    • Docker v17.06 及以后版本推荐使用 overlay2 驱动
    • 使用 overlay2 驱动要求 Linux 系统内核(kernel 版本 4.0 以上)
    • overlayoverlay2 底层为 overlayfs 文件系统需要用到 d_type 特性
    • CentOS7 发行版默认 Kernel 版本为 3.10,可以使用 overlay 但不建议(Kernel 版本 3.10 支持 overlay
    • xfs 格式文件系统必须指定 ftype=1 来开启 d_type 特性
    • overlaydevicemapper 存储驱动已在 Docker Engine-Enterprise 18.09中弃用

    得出的结论:

    • 生产环境 Linux 系统内核版本我不能决定,具体根据实际情况而定,可以不升级内核选择Docker 18.09 之前版本,使用 devicemapper 驱动的 direct-lvm 模式
    • 本地开发环境越省心越好,内核不升级了保持 Kernel 版本 3.10,指定 ftype=1 开启 d_type 特性
    # 可通过 xfs_info 命令查看 ftype 属性
    xfs_info /
    
    # Docker 安装完成可通过 docker info 命令验证是否支持 d_type 特性
    docker info
    

    CentOS7安装Docker搭建开发环境_第1张图片
    CentOS7安装Docker搭建开发环境_第2张图片

  • 卸载旧版本

    旧版 Docker 称为dockerdocker-engine。如果已安装这些程序,请卸载它们以及相关的依赖项。

    # 卸载旧版本程序及相关依赖,然而这代码其实并没有什么鸟用,当然保险起见还是运行一下
    yum remove docker \
               docker-client \
               docker-client-latest \
               docker-common \
               docker-latest \
               docker-latest-logrotate \
               docker-logrotate \
               docker-engine
    
    # 我之前安装过了,想卸载还是下面命令好使
    # 卸载Docker Engine,CLI和Containerd软件包
    yum remove docker-ce \
               docker-ce-cli \
               containerd.io
    
    # 主机上的镜像、容器、卷和自定义配置文件不会自动删除,需要手动删除所有图像、容器、卷及所有已编辑的配置文件
    rm -rf /var/lib/docker
    
    

2. 使用 Docker 仓库进行安装

  • 配置 Docker 仓库

    # 安装 yum-util 软件包(提供yum-config-manager 功能),另外两个是 devicemapper 的驱动依赖(如果需要的话)
    yum install -y yum-utils device-mapper-persistent-data lvm2
    
    # 设置 Docker 仓库(当然也可以选择阿里云仓库,跳过此步到下一步)
    yum-config-manager \
    	--add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
        
    # 设置阿里云仓库
    yum-config-manager \
    	--add-repo \
        http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    
  • 选择特定 Docker 版本安装

    # 可以查看仓库中所有 docker 版本,并选择特定版本安装
    # 按版本号(从高到低)进行排序,特定 CentOS 版本以 .el7 后缀显示(EL7 适用 Red Hat 7.x, CentOS 7.x 安装)
    yum list docker-ce --showduplicates | sort -r
    
    

    CentOS7安装Docker搭建开发环境_第3张图片

    # 通过特定格式包名安装指定版本,包名格式为(docker-ce)加上版本字符串(上图第2列),从第1个冒号(:)到第1个连字符(从:到-之间的内容,没有:就从开头到-),以连字符(-)分隔。例如,docker-ce-18.03.1.ce。
    # 通过命令 yum install docker-ce- docker-ce-cli- containerd.io 安装
    # 阿里云仓库好像没有 docker-ce-cli-18.03.1.ce,可能集成了吧,这块没有进行测试,但不影响使用
    yum install docker-ce-18.03.1.ce docker-ce-cli-18.03.1.ce containerd.io
    
    # 启动docker服务
    systemctl start docker
    
    # 查看docker服务状态
    systemctl status docker
    # 停止docker服务
    systemctl stop docker
    # 重新启动docker服务
    systemctl restart docker
    # 配置docker开机自动启动
    systemctl enable docker
    # 配置docker开机不自动启动
    systemctl disable docker
    
    

二、开发环境搭建

1. 配置阿里云镜像加速器

# 先阿里云注册个账号,容器镜像服务-镜像中心-镜像加速器
# 直达地址 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
# 可获得加速器地址 https://xxxxxxxx.mirror.aliyuncs.com
# 使用加速器可以提升获取Docker官方镜像的速度

# 创建配置文件夹,docker 安装完默认存在
mkdir -p /etc/docker

# 添加镜像加速配置文件
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
}
EOF

# 重新加载配置
systemctl daemon-reload
# 重新启动 docker
systemctl restart docker

2. MySQL 搭建

# 拉取mysql 5.7镜像
docker pull mysql:5.7

# 运行mysql镜像,-p:指定端口映射,主机(宿主)端口:容器端口;--name:为容器指定别名;-v:指定目录映射,主机(宿主)目录:容器目录,你可以理解为Windows目录的快捷方式,容器内目录的文件实际存储在主机目录中;-e:设置环境变量,此处为mysql设置密码,-d:后台运行容器,并返回容器ID
docker run -p 3306:3306 --name mysql5.7 \
-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=abcd1234 \
-d mysql:5.7

3. Redis 搭建

# 拉取redis 5.0.5镜像
docker pull redis:5.0.5

# 运行redis镜像,-dit:-d、-i、-t的结合,-d之前说了,-i-t通常联合使用,用来以交互方式启动容器并为容器重新分配一个伪输入终端,可使用docker exec进行交互
docker run -dit --name redis -p 6379:6379 redis:5.0.5

# 通过 docker exec 连接使用 redis 服务,exit 命令退回到宿主机
docker exec -it redis /bin/bash

# 上面命令可进入 docker 容器内部,运行 redis-cli 可使用 redis 服务
redis-cli

4. Tomcat 搭建

# 拉取tomcat 8.5带jre8的镜像
docker pull tomcat:8.5-jre8

# 运行tomcat镜像,并指定端口映射、指定目录映射
# 项目往宿主机 /usr/local/docker/tomcat/webapps 放就可以发布
# -v 目录映射已将容器内 webapps文件夹替换为宿主机文件夹,所以访问 tomcat 不会显示小猫界面只会显示404
docker run -dit --name tomcat -p 8888:8080 \
-v /usr/local/docker/tomcat/webapps:/usr/local/tomcat/webapps \
tomcat:8.5-jre8

5. Nginx 搭建

# 拉取 nginx 镜像
docker pull nginx

# 运行 nginx 镜像,并指定端口映射
docker run --name nginx -p 88:80 -d nginx

6. 配置防火墙

# 前几步配置的MySql、Redis、Tomcat、Nginx等要想通过网络访问,需要防火墙打开端口

# 查看防火墙状态
systemctl status firewalld
# 开启防火墙
systemctl start firewalld
# 关闭防火墙
systemctl stop firewalld
# 查看3306端口状态
firewall-cmd --zone=public --query-port=3306/tcp
# 打开3306端口,--permanent 永久生效(无此参数重启后失效)
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 删除3306端口
firewall-cmd --zone=public --remove-port=3306/tcp --permanent
# 重新加载防火墙
firewall-cmd --reload

7. 常用 Docker 命令

# 拉取 docker 远程仓库镜像到本地
docker pull <IMAGE>
# 查看 docker 本地镜像
docker images
# 删除 docker 本地镜像
docker rmi <IMAGE>
# 使用 Dockerfile 创建镜像
docker build -t <NAME>
# 从容器创建一个新的镜像
docker commit <IMAGE> <NAME>
# 打包镜像成tar文件,-o:输出到的文件
docker save -o <NAME>.tar <IMAGE>
# 导入tar文件到镜像
docker load -i <NAME>.tar
# 创建一个新的容器并运行一个命令
docker run --name <NAME> -d <IMAGE>

# 查看 docker 正在运行的容器
docker ps
# 查看 docker 所有容器(包括停止的)
docker ps -a
# 启动 docker 容器
docker start <CONTAINER>
# 停止 docker 容器
docker stop <CONTAINER>
# 删除 docker 容器
docker rm <CONTAINER>

# 在容器中开启一个交互模式的终端
docker exec -it <CONTAINER> /bin/bash

总结: Docker还有很多拓展玩法,比如容器间的通讯、Compose、Swarm,后续K8S还在研究中,等我腾出时间整理好了再发出来分享给大家~

参考资料

[1] CentOS安装Docker官方文档

[2] Docker存储驱动官方文档

[3] Docker命令官方文档

[4] 一个奇葩的docker启动服务故常排查

[5] 基于XFS文件系统的overlayfs下使用docker,为何要使用d_type=1

[6] CentOS7.x系统中使用Docker时,在存储方面需要注意的问题

你可能感兴趣的:(Linux)