总体步骤
- 搜索镜像
- 拉取镜像
- 查看镜像
- 启动镜像
- 服务端口映射
- 停止容器
- 移除容器
安装tomcat
1. docker hub上面查找tomcat镜像
docker search tomcat
2. 从docker hub上拉取tomcat镜像到本地
docker pull tomcat
3. docker images查看是否有拉取到该tomcat
docker images
4. 使用tomcat镜像创建容器实例(也叫运行镜像)
docker run -it -p 8080:8080 tomcat
-p 小写,主机端口:docker容器端口
-P 大写,随机分配端口
i:交互
t:终端
d:后台
5. 访问tomcat首页
localhost:8080
遇到的问题:
解决
可能一:
没有映射端口或者没有关闭防火墙
可能二:
把webapps.dist目录换成webapps:先将webapps这个空文件夹删除,再将webapp.dist重命名为webapps
重命名之后,再次访问localhost:8080
6. 免修改版说明
使用tomcat8这个特定版本:
docker pull billygoo/tomcat8-jdk8
docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
安装mysql
- docker hub上面查找mysql镜像
docker search mysql
2. 从docker hub上(阿里云加速器)拉取mysql镜像到本地标签为5.7
docker pull mysql:5.7
3. 使用mysql5.7镜像创建容器(也叫运行镜像)
简单版
使用mysql镜像
第一步:运行mysql:5.7镜像
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
注意:建议先使用ps -f | grep mysql命令先看一下宿主机是否有正在运行的mysql且端口3306是否被占用,如果占用,需要将映射端口换掉。
第二步:查看正在运行的容器
dockers ps
第三步:进入该mysql容器内
docker exec -it 容器ID /bin/bash
mysql -uroot -p
第四步:在该容器内建库建表插入数据
外部Win10使用小海豚软件连接运行在dokcer上的mysql容器实例服务,如下图所示:
客户端软件可以成功连接mysql容器。
问题
问题一:插入中文数据试试
为什么报错?
因为使用docker的mysql容器有中文乱码的问题。
在docker里面的mysql容器实例输输入以下命令,内容如下:
SHOW VARIABLES LIKE 'character%'
注意:不要在连接mysql的软件中输入上面的命令,否则显示的还是utf-8编码,但这不是真正的编码方式。
解决:详见下面的实战版。
问题二:删除容器后,里面的mysql数据如何办
容器实例一删除,你还有什么? 删容器到跑路。。。。。?
实战版
- 新建mysql容器实例
docker run -d -p 3306:3306 --privileged=true \
-v /docker/mysql/log:/var/log/mysql \
-v /docker/mysql/data:/var/lib/mysql \
-v /docker/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql \
mysql:5.7
注:实战版运行mysql镜像的命令与简单版运行的命令差不多,只是多了三个挂载数据卷的命令。
2. 新建my.cnf --> 通过容器卷同步给mysql容器实例 (使用此步骤的目的是解决中文乱码的问题)
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
3. 重新启动mysql容器实例再重新进入并查看字符编码
再新建库新建表再插入中文测试
以上成功解决中文乱码的问题。
结论
之前的DB 无效
修改字符集操作+重启mysql容器实例
之后的DB 有效,需要新建
结论:docker安装完MySQL并run出容器后,建议请先修改完字符集编码后再新建mysql库-表-插数据
假如将当前容器实例删除,再重新来一次,之前建的db01实例还有吗?
答案是还有,所以日常工作中建议挂载数据容器卷,这样即使删除了容器实例,当重新启动了该容器后,宿主机上对应的容器卷中的数据还会自动传递给该容器,保证了数据的不丢失。
安装redis
- 从docker hub上(阿里云加速器)拉取redis镜像到本地标签为6.0.8
docker pull redis:6.0.8
- 入门命令
docker run -d -p 6379:6379 redis;6.0.8
- 命令提醒:容器卷记得加入--privileged=true
Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied解决办法:在挂载目录后多加一个--privileged=true参数即可
- 在CentOS宿主机下新建目录/app/redis
- 建目录
mkdir -p /app/redis
2. 将一个redis.conf文件模板拷贝进/app/redis目录下
3. /app/redis目录下修改redis.conf文件
3.1 开启redis验证 可选 requirepass 123
3.2 允许redis外地连接 必须 注释掉 # bind 127.0.0.1
3.3 daemonize no
将daemonize yes注释起来或者 daemonize no设置,因为该配置和docker run中-d参数冲突,会导致容器一直启动失败
3.4 开启redis数据持久化 appendonly yes 可选 - 默认出厂的原始redis.conf
4. 使用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
测试redis-cli连接上来
docker exec -it 运行着Redis服务的容器ID redis-cli
请证明docker启动使用了我们自己指定的配置文件
修改前 我们用的配置文件,数据库默认是16个
修改后
宿主机的修改会同步给docker容器里面的配置。 - 记得重启服务
安装Nginx
- 见高级篇Portainer