8.1.安装步骤
a.安装说明:
- 1.Docker使安装步骤变得统一,命令相似:
b.安装步骤
- 1.搜索镜像
- 2.拉取镜像
- 3.查看镜像
- 4.
启动镜像 + 服务端口映射
- 5.停止容器
- 6.移除容器
c.端口映射
容器内的网络服务和外部机器不能直接通信
外部机器和宿主机可以直接通信
宿主机和容器可以直接通信
当容器中的网络服务需要被外部机器访问时,可以将容器中提供服务的端口映射到宿主机的端口上。外部机器访问宿主机的该端口,从而间接访问容器的服务。
这种操作称为:`端口映射`
d.挂载举例说明:
- 1.创建容器以及文件挂载和端口映射
docker run -p 3306:3306 \
--name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
参数说明
-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口
-v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂载到主机
-v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
-v /mydata/mysql/data:/var/lib/mysql/:将配置文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码
`-p 3306:3306`:将Linux的端口与docker容器的3306端口对应
`–name`:给容器取名
`-v`:目录挂载,创建一个Linux文件与:后面的容器内部文件夹挂载
- 文件:将日志文件挂载到主机
- 将运行期间的数据(备份等作用)与MySQL配置信息挂载到主机
`-e`:改变MySQL参数 :初始化root用户的密码
`-d`:以mysql 5.7来启动容器
8.2.Docker安装tomcat:
- 1.
docker hub
上面查找tomcat镜像:
- 2.从docker hub上拉取tomcat镜像到本地:
docker pull tomcat
- 3.
docker images
:查看是否有拉取到的tomcat
- 4.使用tomcat镜像创建容器实例(也叫运行镜像):
docker run -it -p 8080:8080 tomcat
-p
小写,主机端口:docker容器端口
-P
大写,随机分配端口
i
:交互
t
:终端
d
:后台
- 5.容器启动后,去访问Tomcat首页,如果发现有404的报错,可以去查看webapps 文件夹查看为空
- 6.解决:
可能没有映射端口或者没有关闭防火墙
;
- 7.删除原来的webapps目录,把webapps.dist目录换成webapps:
- 8.对于上述问题的出现,免修改版说明:
docker pull billygoo/tomcat8-jdk8
docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
8.3.Docker安装mysql:
a.MySQL镜像查询网站:
- 1.可以在docker hub中查询任何镜像的版本,这里我们是找到mysql相关版本
b.简单安装mysql版:
- 1.下载镜像:
- 2.使用mysql5.7镜像创建容器(也叫运行镜像)
c.两个问题说明:
-
问题1:外部Win10可以使用Navicat来连接运行在dokcer上的mysql容器实例服务,会发现插入中文数据的时候,出现乱码问题,这个是因为docker上默认字符集编码隐患(
服务器上的字符编码问题
); -
问题2:同时上述问题再启动容器的时候,也没有添加容器数据卷,这就导致数据库数据在容器删除后,所有的数据就都损失了。
d.实战版安装MySQL:
- 1.新建mysql容器实例:
docker run -d -p 3306:3306 --privileged=true \
-v /zzyyuse/mysql/log:/var/log/mysql \
-v /zzyyuse/mysql/data:/var/lib/mysql \
-v /zzyyuse/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql mysql:5.7
- 2.在宿主机上的
/zzyyuse/mysql/conf
目录下新建my.cnf,写入如下内容,通过容器卷同步给mysql容器实例
:
[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-client-handshake
skip-name-resolve
注意:解决 MySQL 连接慢的问题
在配置文件中加入如下,并重启 mysql
[mysqld]
skip-name-resolve
解释:
skip-name-resolve:跳过域名解析
- 3.重新启动mysql容器实例,再重新进入并查看字符编码
- 4.再新建库新建表再插入中文测试,发现乱码已经没了;
- 5.结论:docker安装完MySQL并run出容器后,
建议先修改完字符集编码后再新建mysql库-表-插数据
,改变完字符集后需要重启下容器;
- 6.假如将当前容器实例删除,再重新来一次,之前建的db01实例在宿主机中还存在;
8.4.Docker安装redis:
- 1.从docker hub上(阿里云加速器)拉取redis镜像到本地标签为6.0.8
- 2.命令注意点:
Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied解决办法:在挂载目录后多加一个--privileged=true参数即可
- 3.在CentOS宿主机下新建目录/app/redis:
mkdir -p /app/redis
;将一个redis.conf文件模板拷贝进/app/redis目录下
- 4.在
/app/redis目录
下修改redis.conf文件
- 5.使用redis6.0.8镜像创建容器(也叫运行镜像)同时实现目录的挂载:
docker run -p 6379:6379 --name myr3 --privileged=true -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf
- 6.测试redis-cli连接上来:
docker exec -it redis redis-cli