大家好,我是脚丫先生 (o^^o)
最近有小伙伴问我,脚丫,你写了这么几篇Docker的文章,大多数都是讲理论知识,没有实践。毛爷爷说过,“实践是检验真理的唯一标准”。为了听毛爷爷的话,我决定把Docker拉出来遛一遛。我们先来docker run方式部署,之后在感受docker-compose的闪亮。
文章图片
文章目录
- Docker应用部署
-
- 一、nginx部署
-
- 1、Docker hub上查找nginx镜像
- 2、从docker hub上(阿里云加速器)拉取nginx镜像到本地
- 3、查看镜像
- 4、根据镜像创建nginx容器
- 5、打开浏览器访问
- 6、容器数据卷
- 二、mysql部署
- 三、redis部署
- 四、tomcat部署
- 五、mongodb部署
- 六、postgresql部署
申明
部分内容来源于网上资源,如若侵犯到您的权益,请联系作者第一时间删除Docker应用部署 总体流程步骤:
- 搜索镜像
- 拉取镜像
- 查看镜像
- 通过镜像启动容器
- 停止容器
- 移除容器
一、nginx部署 1、Docker hub上查找nginx镜像
docker search nginx
文章图片
2、从docker hub上(阿里云加速器)拉取nginx镜像到本地
docker pull nginx
注意: 我这里是选择第一个nginx镜像,当然你也可以拉取其他的nginx镜像。
文章图片
3、查看镜像
文章图片
4、根据镜像创建nginx容器
docker run -d --name=mynginx -p 80:80 nginx
- -it 交互
- -d 后台
- –name 容器名
- -p 宿主机端口:容器端口 ( 端口进行映射,将宿主机 80 端口映射到容器内部的 80 端口)
最后我们可以通过浏览器可以直接访问 80端口的 nginx 服务:
文章图片
到此,我们已经把nginx容器启动起来了,完结撒花!!! 那是不可能的…也许你会问,脚丫,我光光学会了nginx容器,那我要显示我自己的前端咋搞?资源怎么放入容器呢?如果容器凉了,那是不是所有的数据全没了? 带着问题我们接着往下说
这里就要讲解的是容器数据卷。
6、容器数据卷
如上诉问题,比如nginx容器,我们想到一个解决办法,就是如果能把容器的数据映射到宿主机,那么是不是就能持久化数据,即使容器凉了,也无关紧要(映射:就好比你照镜子,你做鬼脸,镜子里的你也跟着做鬼脸)。当然,官方也想到了,于是就有了数据卷。卷就是目录或者文件,它的设计就是持久化数据,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。
就好比。镜子完全的显示你自己,如果你把镜子打碎了,镜子里的你,支离破碎,凉了。但是现实中的你依然坚挺。
接下来我们创建一个带有数据卷的nginx容器。
docker run -d --name=mynginx -p 80:80 -v /html:/usr/share/nginx/html nginx
- -v 数据卷,宿主机绝对路径目录:容器内目录。
docker search mysql
文章图片
2、从docker hub上(阿里云加速器)拉取mysql镜像到本地标签为5.7
docker pull centos/mysql-57-centos7
3、查看mysql镜像
文章图片
4、根据镜像创建mysql容器
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 centos/mysql-57-centos7
- –name指定容器名字
- -v 目录挂载(这里挂载的是日志、数据、配置)
- -p指定端口映射
- -e设置mysql参数
- -d后台运行
docker search redis:4.0
文章图片
2、从docker hub上(阿里云加速器)拉取redis镜像到本地
docker pull redis:4.0
文章图片
3、查看redis镜像
文章图片
4、根据镜像创建redis容器
针对配置文件如果直接挂载的话docker会以为挂载的是一个目录,所以我们先创建一个文件然后再挂载,在虚拟机中。
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis:4.0 redis-server /etc/redis/redis.conf
直接进去redis客户端。
docker exec -it redis redis-cli
默认数据是不持久化的。在配置文件中输入appendonly yes,就可以持久化了。进行配置文件的修改
vim /mydata/redis/conf/redis.conf
# 插入下面内容
appendonly yes保存
【Docker|Docker【5】 | Docker常用应用部署】修改完后进行redis容器的重新启动
docker restart redis
docker -it redis redis-cli
四、tomcat部署 1、Docker hub上查找tomcat镜像
文章图片
2、从docker hub上(阿里云加速器)拉取tomcat镜像到本地
文章图片
3、查看tomcat镜像
文章图片
4、根据镜像创建tomcat容器
docker run -d -p 3305:8080 --name mytomcat tomcat
我们进行公网的一个访问,发现测试访问没有问题,但为什么 tomcat 没有显示出来呢?
文章图片
实际上官方提供的 tomcat 镜像是不完整的,如何解决这个问题,我们可以执行下面的操作:
# 根据容器名称进入tomcat容器
[root@spark3 /]# docker exec -it mytomcat /bin/bash
root@3475b4167b5b:/usr/local/tomcat# ls
BUILDING.txtNOTICERUNNING.txtlibtempwork
CONTRIBUTING.mdREADME.mdbinlogswebapps
LICENSERELEASE-NOTESconfnative-jni-libwebapps.dist
# 缺少ll命令
root@3475b4167b5b:/usr/local/tomcat# ll
bash: ll: command not found
# 进入webapps目录
root@3475b4167b5b:/usr/local/tomcat# cd webapps
root@3475b4167b5b:/usr/local/tomcat/webapps# ll
bash: ll: command not found
# 目录下文件为空
root@3475b4167b5b:/usr/local/tomcat/webapps# ls
root@3475b4167b5b:/usr/local/tomcat/webapps# 发现问题:1、linux命令少了。 2.webapps目录为空
# 解决方案:
# 将webapps.dist下的文件都拷贝到webapps下即可root@3475b4167b5b:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@3475b4167b5b:/usr/local/tomcat# cd webapps
root@3475b4167b5b:/usr/local/tomcat/webapps# ls
ROOTdocsexampleshost-managermanager
当我们把webapps.dist目录下的内容拷贝到webapp目录下时,重新刷新浏览器页面,可以惊喜地发现“tomcat”出现了,说明我们把项目通过docker成功部署到tomcat上去了。当我们想把自己的项目部署上去时,操作也是一模一样的。
文章图片
我们以后要部署项目,如果每次都要进入容器是不是十分麻烦?那么我们可以用第一节部署nginx容器那儿学到数据卷的知识,就可以在容器外部提供一个映射路径,比如webapps,我们在外部放置项目,就自动同步内部就好了!五、mongodb部署 1、Docker hub上查找mongodb镜像
文章图片
2、从docker hub上(阿里云加速器)拉取mongodb镜像到本地
docker pull mongo
文章图片
3、查看mongo镜像
文章图片
4、根据镜像创建mongo容器
docker run -d --name mongo -p 27017:27017 mongo --auth
- –auth:需要密码才能访问容器服务。
[root@spark3 ~]# docker exec -it mongo mongo admin
# 创建一个名为 admin,密码为 123456 的用户。
>db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
# 尝试使用上面创建的用户信息进行连接。
> db.auth('admin', '123456')
六、postgresql部署 1、Docker hub上查找postgresql镜像
docker search postgresql
文章图片
2、从docker hub上(阿里云加速器)拉取postgresql镜像到本地
文章图片
3、查看postgresql镜像
docker images | grep postgres
文章图片
4、根据镜像创建postgresql容器
docker run --name my_postgres -v /home/data:/var/lib/postgresql -e POSTGRES_PASSWORD=****** -d -p ****:5432 postgres
- –name : 自定义容器名称
- -v :进行映射,本地目录:容器内路径
- POSTGRES_PASSWORD:数据库密码
- -p:映射端口,宿主机端口:容器端口
文章图片
博客主页:https://blog.csdn.net/shujuelin
欢迎点赞 收藏 ?留言 如有错误敬请指正!
推荐阅读
- Docker|Docker【6】| 让Docker炫起来
- kubernetes|Kubernetes(k8s)---(1)集群部署
- docker|docker简介
- 分布式|基于Docker搭建 ELK分布式日志管理解决方案
- Docker|自己动手写Docker系列 -- 3.1构造实现run命令版本的容器
- docker|Docker镜像的仓库(Harbor)
- Spark|Spark 进程模型与分布式部署(什么是分布式计算())
- Spark|Spark 数据依赖图是啥()
- 数据库开发|DM 中 relay log 性能优化实践丨TiDB 工具分享