Docker安装、配置、mysql和Tomcat环境部署
一、什么是Docker
1、虚拟环境
(1)完整模拟硬件的虚拟环境:VMWare,Hyper-V,Virtual-Box,VMServer等。
(2)不模拟硬件,只把虚拟环境当成一个应用程序(进程)来对待:Docker,非常轻量级的虚拟环境。
(3)在VMWare中安装一个Linux,标配10G+、最小化安装近2G,而在Docker中,安装一个最小化CentOS或Ubuntu,大概只需要200M。
2、Docker的特性与虚拟机的异同
(1)安装虚拟机软件如:VMware,在此虚拟机软件上安装操作系统(下载),把操作系统的虚拟机文件备份,随时复制并启动该操作系统。
(2)在Linux上安装Docker软件,从镜像仓库拉取(Pull)操作系统或应用环境,基于该镜像文件创建一个容器(运行环境),备份容器以供下次使用(直接export容器,将容器提交(Commit)为本地镜像)。
(3)虚拟机环境直接完全模拟一套全新的硬件环境,Docker环境不虚拟硬件,直接使用宿主机资源(Docker默认下不限制CPU,内存资源),也可以直接指定分配某个容器的CPU或内存资源。
(4)虚拟机可以直接与宿主机或局域网连接,分配IP地址(Brige,NAT),Docker容器无法获取IP地址(跟随于宿主机的IP地址)。
(5)镜像相当于是容器的模板,通过镜像创建容器,容器修改后也可提交为镜像,删除容器并不会删除镜像,删除镜像则无法创建容器。

Docker与Docker之间可以互相通信:依赖于宿主机的网关。Docker与宿主机之间可以互相通信,外部设备无法直接访问Docker,必须把端口映射给宿主机,所以Docker的端口必须保持在宿主机上的唯一性。
3、容器使用注意事项:
(1)尽量让一个容器做一件事情,或启动一个服务。
(2)尽量使用挂载的方式将数据文件挂载到容器中,容器里面尽量不要保存数据。
(3)尽量让容器按照Docker化的要求来使用容器,而不是安装一个虚拟机。
(4)尽量不使用交互模式来直接操作容器,而是在宿主机上执行命令,或者使用Docker File。
(5)只要能解决问题,高效地解决问题,无论怎么用,都行。
二、安装过程
(一)基本安装过程
1、确保Linux内核3.X版本及以上,建议使用CentOs7.X,64位。

2、先安装一些必备工具包:
- 安装网络相关命令:yum install net-tools
- 安装实用工具:yum install -y yum-utils device-mapper-persistent-data lvm2
3、配置yum下载源:
- 添加yum镜像: yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 更新yum缓存:yum makecache fast
4、安装Docker社区版:
- 安装docker-ce: yum -y install docker-ce

5、关于Docker服务启停
- systemctl start/stop/restart/status docker

6、配置Docker的国内镜像
查看修改前的镜像:
[root@localhost docker]# docker info

vi /etc/docker/daemon.json
{
"registry-mirrors":[
"https://registry.docker-cn.com"',
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
保存,重启Docker,查看docker info是否生效。

但是执行下面命令的时候报错
docker pull centos:7
重新配置
vi /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://hub-mirror.c.163.com"
],
"dns": ["223.5.5.5", "119.29.29.29"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"debug": true,
"experimental": false
}
再执行结果命令:
docker pull centos:7

查看当前有什么镜像?
docker images

[-it 进入容器内部]
[--name 指定容器名称,在一个宿主机上不能重复]
[-h 指定容器的机器名,不指定,则自动分配一个]
[-p 映射端口 3307:3306 3307表示容器中的MySQL,3306表示宿主机的MySQL,可以直接映射使用宿主机MySQL]
[centos:7 表示版本号,docker images可以查看]
docker create -it --name centos7 -h mycentos7 -p 3307:3306 centos:7
查看创建了哪些容器
docker container ls -a


启动容器,查看容器进程:

进入容器:


确定版本:

回到宿主机:
启动docker

三、重要的概念
1、镜像(Image):
Docker相关站点事先制作好的带有操作系统或应用程序的一个文件包,下载回来后便可以启动Docker运行环境,类似于VMWare中的一个预先安装好虚拟机的虚拟机文件。自己也可以在自己的私有环境中制作镜像,供别人使用。
只读模板,定义了容器的运行环境(如操作系统、软件配置等)。通过分层存储(Layer)优化空间和构建速度。
通常的两个用于下载Docker镜像的知名站点:https://hub.docker.com/(速度极慢,不推荐),https://hub.daocloud.io/(国内镜像,推荐)
docker pull daocloud.io/library/centos:8.2.2004
2、容器(Container):
轻量化的运行实例,包含应用代码、运行时环境和依赖库。基于镜像创建,与其他容器隔离,共享主机操作系统内核(比虚拟机更高效)。
镜像的具体可启动的实例:容器要有名称便于唯一区分,如果需要外部访问,则必须映射端口,如果要共享文件夹,还需要做文件映射夹,等等。。。。。
[-it 进入容器内部]
[--name 指定容器名称,在一个宿主机上不能重复]
[-h 指定容器的机器名,不指定,则自动分配一个]
[-p 映射端口 3307:3306 3307表示容器中的MySQL,3306表示宿主机的MySQL,可以直接映射使用宿主机MySQL]
[centos:7 表示版本号,docker images可以查看]
docker create -it --name centos7 -h mycentos7 -p 3307:3306 centos:7
docker container ls -a
3、实例:
正在运行的容器:docker ps

交互模式进入Docker容器内的命令行:docker exec -it centos7 /bin/bash
4、宿主机与容器之间交换文件
docker cp 宿主机文件 容器名:文件路径
5、利用run命令一次处理create+start:
创建并启动—个容器:docker run -it --name centos7 -h mycentos7 -p 3307:3306 centos:7
另外,可以使用docker run -rm来创建和启动容器,-rm参数表示:退出容器时不保存数据。

四、在Docker中安装配置woniusales
0、拉取镜像
docker pull centos:7
1、创建容器
docker run -it --name centos7 -h mycentos7 -p 3307:3306 -p 8081:8080 centos:7
2、启动容器
docker start centos7
3、将MySQL5.6的rpm源复制到容器中
下载MySQL5.7版本:
wget https://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm

将宿主机的MySQL的rpm文件复制到容器指定的目录
docker cp ./mysql57-community-release-el7-11.noarch.rpm centos7:/opt

4、进入容器
docker exec -it centos7 /bin/bash

5、安装MySQL
rpm -ivh mysql57-community-release-el7-11.noarch.rpm

编辑源,安装5.6的即可,不用专门去配置密码
vi /etc/yum.repos.d/mysql-community.repo

安装MySQL
yum install mysql-server

安装完成MySQL之后,查看服务的状态,出现下面的错误:
[root@mycentos7 opt]# systemctl status mysqld
Failed to get D-Bus connection: Operation not permitted
发现此时无法启动MySQL,主要是因为默认的配置下,Docker不具备一台独立主机的所有功能,需要使用特权模式解决。
删除已经安装好的容器,重新以特权模式安装
[root@localhost soft]# docker ps
先停止,才能删除
[root@localhost soft]# docker stop centos7
[root@localhost soft]# docker rm centos7
centos7
[root@localhost soft]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

6、使用特权模式创建Docker容器
创建容器
docker create -ti --name centos7 -h mycentos7 --privileged=true -p 3307:3306 -p 8081:8080 centos:7 /sbin/init

启动容器
docker start centos7

docker cp ./mysql57-community-release-el7-11.noarch.rpm centos7:/opt
进入容器交互模式,
docker exec -it centos7 /bin/bash
重新按照上述步骤安装MySQL。

建议:除非你有必须使用MySQL官方发行的理由,否则推荐直接安装MariaDB,这能最快、最简单地解决问题。事实上,CentOS官方论坛的管理员也建议用户直接使用
yum install mariadb-server
我没安装MySQL,而是选择了mariadb。
查看状态:
[root@mycentos7 opt]# systemctl start mysqld
[root@mycentos7 opt]# systemctl status mysqld

7、配置MySQL远程登录账号
mysql> CREATE USER 'yt'@'localhost' IDENTIFIED BY '123.com';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'yt'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'yt'@'localhost' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT User, Host FROM mysql.user WHERE User='yt';

远程登录配置成功。


执行SQL语句。

宿主机中的端口情况:

8、复制Tomcat、JDK到容器
[root@localhost woniusales]# ll
total 0
drwxr-xr-x. 9 root root 220 Nov 29 15:40 apache-tomcat-8.5.59
drwxr-xr-x. 8 10 143 255 Mar 15 2017 jdk1.8.0_131
[root@localhost woniusales]# docker cp ./apache-tomcat-8.5.59/ centos7:/opt
Successfully copied 26.9MB to centos7:/opt
[root@localhost woniusales]# docker cp ./jdk1.8.0_131/ centos7:/opt
Successfully copied 377MB to centos7:/opt
[root@localhost soft]# docker cp ./WoniuSales-20180508-V1.4-bin.war centos7:/opt
Successfully copied 4.9MB to centos7:/opt

进入docker

按照这篇博客进行后续配置:
Tomcat下配置woniusales-CSDN博客
9、映射成功


五、容器自启动和归档还原
关机之后要手动启动docker,Tomcat

上图提示环境变量没有配置,但是在配置程序时已经做了设置。验证如下图:

但是在容器中需要重新激活环境变量的配置,
宿主机中要有登录动作才会激活.bash_profile。
1、配置镜像的自启动脚本
在Linux中,哪些脚本可以实现自启动:
/etc/rc.d/rc.local:系统在启动时进行加载执行,/etc/rc.1oca1是本文件的软链接文件。
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。
~/.bash_profi1e:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。
~/.bashrc:该文件包含专用于你用户的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件·
上述脚本的执行前提:必须拥有可执行权限。或在特定的条件下触发执行。
按照以下指令设置启动容器时即启动Tomcat:
vi /etc/rc.d/rc.local
export JAVA_HOME=/opt/jdk1.8.0_131
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export PATH
/opt/apache-tomcat-8.5.59/bin/startup.sh
然后授予 /etc/rc.d/rc.local 可执行权限
chmod u+x /etc/rc.d/rc.local


2、将容器提交为镜像
docker commit -a "yt" -m "woniusales with centos 7" centos7 woniusales:1.4

3、将镜像进行归档压缩
docker save -o /usr/soft/woniusales-centos7.tar woniusales:1.4

压缩
gzip woniusales-centos7.tar
4、从归档或压缩文件还原镜像
docker load -i woniusales-centos7.tar.gz
5、创建并启动容器
docker run -it --name centos7 -h mycentos7 -p 3307:3306 -p 8081:8080 centos:7
docker start centos7
六、Docker化运行和部署环境
1、每一个Docker解决一个问题
针对WoniuSales的环境配置,分三步:
(1)下载一个包含MySQL5.6的Docker镜像,并映射端口3306,再启动即可。
(2)下载一个包含Tomcat8.0的Docker镜像,并映射端口8080,再启动即可。
(3)在Tomcat的Docker中,配置数据库连接信息并重启Docker,完成配置。

更多推荐
所有评论(0)