作者主页:编程指南针

作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互助

收藏点赞不迷路  关注作者有好处

文末获取源码 

一、Docker的起源

Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)。

Docker 自开源后受到广泛的关注和讨论,至今其 GitHub 项目 已经超过 5 万 7 千个星标和一万多个 fork。甚至由于 Docker 项目的火爆,在 2013 年底,dotCloud 公司决定改名为 Docker。Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中广泛应用 Docker。

Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。

二、Docker和虚拟机区别

关于Docker与虚拟机的区别,我在网上找到的一张图,非常直观形象地展示出来,话不多说,直接上图。

比较上面两张图,我们发现虚拟机是携带操作系统,本身很小的应用程序却因为携带了操作系统而变得非常大,很笨重。Docker是不携带操作系统的,所以Docker的应用就非常的轻巧。另外在调用宿主机的CPU、磁盘等等这些资源的时候,拿内存举例,虚拟机是利用Hypervisor去虚拟化内存,整个调用过程是虚拟内存->虚拟物理内存->真正物理内存,但是Docker是利用Docker Engine去调用宿主的的资源,这时候过程是虚拟内存->真正物理内存。

传统虚拟机Docker容器
磁盘占用几个GB到几十个GB左右几十MB到几百MB左右
CPU内存占用虚拟操作系统非常占用CPU和内存Docker引擎占用极低
启动速度(从开机到运行项目)几分钟(从开启容器到运行项目)几秒
安装管理需要专门的运维技术安装、管理方便
应用部署每次部署都费时费力从第二次部署开始轻松简捷
耦合性多个应用服务安装到一起,容易互相影响每个应用服务一个容器,达成隔离
系统依赖需求相同或相似的内核,目前推荐是Linux

三、Docker安装

参考 :一文搞定Linux安装常用软件再也不用到处找了!!!【一】

四、Docker安装常用服务

4.1 安装mysql

4.1.1 拉取mysql镜像到本地
docker pull mysql:5.7 (tag不加默认最新版本)

-- 启动mysql
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD='root' --name mysql5.7 mysql:5.7
4.1.2 docker启动mysql
sudo docker run -p 3306:3306 --name mysql \
-v /usr/local/mydata/mysql/log:/var/log/mysql \
-v /usr/local//mydata/mysql/data:/var/lib/mysql \
-v /usr/local//mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

参数解析:

  • -p 3306:3306:将容器的3306端口映射到主机的3306端口

  • --name:给容器命名

  • -v /mydata/mysql/log:/var/log/mysql:将配置文件挂载到主机/mydata/..

  • -e MYSQL_ROOT_PASSWORD=root:初始化root用户的密码为root

4.1.3 配置mysql
  • 进入挂载的mysql配置目录

    cd /mydata/mysql/conf

  • 创建配置文件 my.cnf

    vim my.cnf

  • 拷贝以下内容到my.cnf文件中

    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    [mysqld]
    init_connect='SET collation_connection = utf8_unicode_ci'
    init_connect='SET NAMES utf8'
    character-set-server=utf8
    collation-server=utf8_unicode_ci
    skip-character-set-cli
    ent-handshake
    skip-name-resolve
  • docker重启mysql使配置生效

    docker restart mysql

  • 容器随docker启动自动运行

    docker update mysql --restart=always

  • 将mysql数据库备份为sql文件【可选】

    docker exec mysql|容器id sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql  --导出全部数据
        docker exec mysql sh -c 'exec mysqldump --databases 库表 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql  --导出指定库数据
        docker exec mysql sh -c 'exec mysqldump --no-data --databases 库表 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql  --导出指定库数据不要数据

  • 关闭防火墙

     systemctl stop firewalld.service

4.2 安装Tomcat

4.2.1 在docker hub搜索tomcat
docker search tomcat
4.2.2 下载tomcat镜像
 docker pull tomcat:8.5.93
4.2.3 将webapps目录挂载在外部
docker run -p 8082:8080 -v /usr/local/mydata/tomcat3/webapps:/usr/local/tomcat/webapps -d --name mytomcat3 tomcat:8.5.93
​
​
还可以外加一个conf目录,就是一个配置目录
-v /usr/local/mydata/tomcat/conf:/usr/local/tomcat/conf
4.2.4 webapps目录配置

将本地的tomcat中的webapps目录下的文件上传到tomcat的挂载目录中

4.2.5 测试访问

4.3 安装Redis服务

  • 在docker hub搜索redis镜像

    docker search redis
  • 拉取redis镜像到本地

    docker pull redis
  • 启动redis服务运行容器

    docker run --name redis -d redis:tag (没有暴露外部端口)
    docker run --name redis -p 6379:6379 -d redis:tag (暴露外部宿主机端口为6379进行连接)
  • 开启redis持久化

    docker run -d -p 6379:6379 --name redis -v redisdata:/data redis:5.0.10 redis-server --apendonly yes

    注意:一但开启持久化之后,持久化生成aof文件会被放入容器中/data目录中

  • 查看启动日志

    docker logs -t -f 容器id|容器名称
  • 进入容器内部查看

    docker exec -it 容器id|名称 bash  
  • 加载外部自定义配置启动redis容器

    默认情况下redis官方镜像中没有redis.conf配置文件 需要去官网下载指定版本的配置文件

    1. wget http://download.redis.io/releases/redis-5.0.8.tar.gz  下载官方安装包
    2. 将官方安装包中配置文件进行复制到宿主机指定目录中如 /root/redis/redis.conf文件
    3. 修改需要自定义的配置
        bind 0.0.0.0 开启远程权限
        appenonly yes 开启aof持久化
    4. 加载配置启动
        docker run --name myredis -v /root/redisconf:/usr/local/etc/redis -p 6380:6379 -d redis:5.0.10 redis-server /usr/local/etc/redis/redis.conf  
  • 将数据目录挂在到本地保证数据安全

    docker run --name redis -v /root/redis/data:/data -v /root/redis/redis.conf:/usr/local/etc/redis/redis.conf -p 6379:6379 -d redis redis-server                  /usr/local/etc/redis/redis.conf  

4.4 安装Nginx

4.4.1.在docker hub搜索nginx
  
  docker search nginx
 4.4.2.拉取nginx镜像到本地
 
   [root@localhost ~]# docker pull nginx
    Using default tag: latest
    latest: Pulling from library/nginx
    afb6ec6fdc1c: Pull complete 
    b90c53a0b692: Pull complete 
    11fa52a0fdc0: Pull complete 
    Digest: sha256:30dfa439718a17baafefadf16c5e7c9d0a1cde97b4fd84f63b69e13513be7097
    Status: Downloaded newer image for nginx:latest
    docker.io/library/nginx:latest
 4.4.3.启动nginx容器
      
 docker run -p 80:80 --name nginx01 -d nginx
 4.4.4.进入容器
docker exec -it nginx01 /bin/bash
查找目录:  whereis nginx
 配置文件:  /etc/nginx/nginx.conf
   
 4.4.5.复制配置文件到宿主机
  docker cp nginx(容器id|容器名称):/etc/nginx/nginx.conf 宿主机名录
4.4.6.挂在nginx配置以及html到宿主机外部
        
docker run --name nginx02 -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/html:/usr/share/nginx/html -p 80:80 -d nginx        

五,相关作品展示

基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目

基于Nodejs、Vue等前端技术开发的前端实战项目

基于微信小程序和安卓APP应用开发的相关作品

基于51单片机等嵌入式物联网开发应用

基于各类算法实现的AI智能应用

基于大数据实现的各类数据管理和推荐系统

 

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐