作者主页:编程指南针

作者简介: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智能应用

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