docker很久没看了,这篇用于本人的回顾,如果有不好的地方,欢迎大佬指出来
准备工作
1.服务器
【备注:可以自己去买华为、阿里的,很多都有学生价】
我这里用的是虚拟机
怎么创建应该都会吧,注意配置网络,ping一下主机ip或者百度试试有没有配置好
2. docker
要安装好docker,不然也没办法继续
开始部署
我们需要mysql镜像和dockerfile创建的jar包的项目镜像
Mysql镜像
1.拉取镜像
docker pull mysql:版本号
我是直接拉最新版
2.启动Mysql镜像
docker run -d -p 13306:3306 --name mysql -v /usr/local/mysql/log:/var/log/mysql -v /usr/local/mysql/data:/var/lib/mysql -v /usr/local/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 mysql:latest
解释一下哈====》从左往右看
-d:后台运行
-p 13306:3306:端口映射,访问宿主机(虚拟机)的13306端口会映射到3306端口
--name mysql:定义运行出来的容器名称为mysql,可以自定义
-------------------------------------------------------------------------------------------------------------------------
-v:指定路径挂载
-v /usr/local/mysql/log:/var/log/mysql:把容器的/var/log/mysql目录挂载到宿主机/usr/local/mysql/log下,进行保存mysql的日志
so
-v /usr/local/mysql/data:/var/lib/mysql -v /usr/local/mysql/conf:/etc/mysql/conf.d也是一样挂载
-------------------------------------------------------------------------------------------------------------------------
-e MYSQL_ROOT_PASSWORD=123456:设置密码
mysql:latest:镜像名和版本
3.检查
3.1用docker ps查看一下是否运行起来了容器,下面是成功的
3.2用navicat(也可以是其他的数据库管理工具)
例如我这样的
可以直接把需要的sql文件运行进去,管理数据库
项目镜像
1.创建dockerfile文件夹
在/usr/local下创建一个dockerfile文件夹(也可以在/home下面,看自己,没什么特定的)
centos7创建文件夹命令是mkdir 文件夹名称
【名字可以自己自定义,那这个文件夹我们需要放点什么东西???】
2.生成项目jar包
3.编写dockerfile文件
在dockefile文件夹内编写
3.1 运行下面这个代码
vim dockerfile
3.2 编写
这个是我写的,当然啦,dockerfile里面很多参数的【注意:基础镜像要拉取一下】
我先解释一下我的这个
FROM darecosystem/alpine-jdk8:latest
darecosystem/alpine-jdk8是使用的基础镜像,这里需要去拉取自己要的基础镜这里面包含了openjdk:8所以我就直接用了。latest是版本
COPY *.jar /app.jar
COPY jar包路径 容器内jar包
*.jar表示同一目录下的任意.jar文件
/app.jar是容器内的jar包
CMD ["--server.port=8082"]
CMD:指定这个容器启动的时候要运行的命令"--server.port=8082":设置的是启动jar包项目应用并指定端口号为 8082
EXPOSE 8082
需要暴露端口8082配置
ENTRYPOINT ["java","-jar","app.jar"]
ENTRYPOINT:指定这个容器启动的时候要运行的命令,可以追加命令
这里表示使用java运行app.jar文件
还有很多指令,我这里贴一个
FROM # from:基础镜像,一切从这里开始构建
MAINTAINER # maintainer:镜像是谁写的
RUN # run:镜像构建的时候需要运行的命令
ADD # add:步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录
VOLUME # volume:挂载的目录
EXPOSE # expose:需要暴露端口配置
CMD # cmd:指定这个容器启动的时候要运行的命令,当cmd和ENTRYPOINT同时存在是,cmd将会被当做参数传递给ENTRYPOINT
ENTRYPOINT # entrypoint:指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # onbuild:当构建一个被继承DockerFile这个时候就会运行onbuild的指令,触发指令
COPY # copy:类似ADD,将我们文件拷贝到镜像中
ENV # env:构建的时候设置环境变量!
4.整合
把东西丢到dockerfile文件夹
把jar包和dockerfile都放同一文件夹,我是这样习惯,你们可以看自己喜好
5.dockerfile构建项目镜像
执行
docker build -f /usr/local/dockerfile/dockerfile -t mydemo:1.0 .
解释:
build:构建指令
-f:指定dockerfile文件路径
-t:指定名称
6.构建OK了
展示一下需要的三个镜像
7.启动
执行
docker run -d -p 1111:8082 --name=mydemoserve mydemo:1.0
-d:后台运行
-p :端口映射 宿主机1111映射到容器的8082端口
--name:容器名
8.检查
用docker ps检查一下
那这样就OK了
注意:
可以用curl测试一下
curl http://宿主机IP:项目端口(这里是1111)/地址
如:curl http://192.168.2.204:1111/shop
BUG解决
【我在其中的过程也遇到过bug,当然这样也要记录一下】
1.我的java代码内的数据库配置怎么写呢???
我开始写的是localhost和127.0.0.1,但是其实是有问题的,因为这是一个容器在访问另外一个容器,会发送跨容器的问题
可以用nginx试试
这里也有一个取巧的办法,就是直接把宿主机ip写进去,端口也是这个端口