一、安装docker
1、安装命令
yum -y install docker
2、查看安装
docker -v
3、启动docker
systemctl start docker
4、查看docker状态
systemctl status docker
5、使用阿里云镜像加速,登录https://cr.console.aliyun.com/cn-shanghai/instances/mirrors,拿到地址https://****.mirror.aliyuncs.com"(自己的地址)。不用vi,直接写文件,也可以。
vim /etc/docker/daemon.json
添加以下内容,esc到命令行 :wq,保存退出
{
"registry-mirrors": ["https://****.mirror.aliyuncs.com"]
}
6、重启服务
systemctl daemon-reload
systemctl restart docker
systemctl enable docker.service //设置开机自启
docker info //查看配置信息
7、安装docker图形界面(可以不用,直接使用命令行)
docker search ui
docker pull docker.io/uifd/ui-for-docker
8、启动图形镜像
docker run -d -p 9000:9000 --privileged -v /var/run/docker.sock:/var/run/docker.sock uifd/ui-for-docker
命令说明:
docker run 【参数】 镜像名 “ 为运行镜像的最基本命令
-d : 即-detach =true , 后台运行
-p : 即 -publish 指定发布的端口 ,映射本机端口到docker容器端口,前面的端口(9000)是本机的端口,后一个端口是docker 运行容器的端口(9000)。(外部访问本机端口,即等于访问docker容器端口)
-privileged: 赋予这个容器一些权限可以执行别的操作
-v :挂载,前面的是本机目录,后面的是容器执行创建的虚拟目录
浏览器访问:http://xxx.xxx.xxx.xxx:9000
二、部署环境(看项目所需)
1、安装mysql
(1)拉取指定版本
docker pull mysql:5.7.27
(2)创建容器实例
docker run -d --name mysiteDB -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.20
命令说明: -d 后台运行,–name 设置容器名称mysiteDB 是用户自定义的容器名称;-p 设置端口映射,第一个3306是当前主机的端口,第二个3306指容器中的端口;-e 设置root用户密码为123456;最后的mysql:5.7.27 可以用imageID代替,代表用于创建容器的镜像。
(3)数据库操作
- 进入容器
docker exec -it mysiteDB bash
- 进入数据库
mysql -uroot -p
- 授权
grant all privileges on *.* to root@"%" identified by "密码" with grant option;
flush privileges;
exit //退出
- 使用数据库连接工具连接,navicat。
2、安装elasticsearch
(1)拉取镜像(注意适配自己项目的版本,否则项目会出错)
docker pull elasticsearch:6.8.3
(2)运行容器
建议使用(在运行时就设置jvm,不然服务器内存太小,会卡死):
docker run -d -e ES_JAVA_OPTS="-Xms128m -Xmx256m" -p 9200:920 0 -p 9300:9300 --name myes 446946b24cdd
-------
docker run -d --name mysiteES -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.8.3
命令说明:
–name mysiteES:将容器命名为 mysiteES
-p 9200:9200:将本机的9200端口映射到容器9200端口
-p 9300:9300:将本机的9300端口映射到容器9300端口,目的是集群互相通信
-e “discovery.type=single-node”:单例模式
elasticsearch:6.8.3 镜像名称,可用代替。
(3)配置跨域
- 进入容器
docker exec -it mysiteES /bin/bash
- 进行配置
ls //查看目录文件
cd config //进入配置
vi elasticsearch.yml
- 添加配置,保存退出
http.cors.enabled: true
http.cors.allow-origin: "*"
(4)修改内存(阿里云内存不足,默认4G。初始化Xms,最大Xmx)
cd config
vi jvm.options
修改,保存退出
-Xms512m
-Xmx512m
(4) 安装ik分词器
-
进入容器
docker exec -it mysiteES /bin/bash -
在线下载安装(注意版本,与elasticsearch一致,修改版本号)
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.3/elasticsearch-analysis-ik-6.8.3.zip
若在线下载出错,则网址https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.3/elasticsearch-analysis-ik-6.8.3.zip下载后解压,更改为ik,上传到服务器,再复制到容器内。
docker cp 服务器文件路径 docker容器名字:容器路径
docker cp ik mysiteES:/usr/share/elasticsearch/plugins
- 退出重启镜像
exit
docker restart mysiteES
3、注意: 设置开机自动启动:避免重启计算机后,要去重新启动容器。
- 设置docker自动启动
systemctl enable docker.service
- 设置容器自动启动
创建实例时添加参数
docker run --restart=always
若已有容器,且已经启动,则使用以下命令,设置重启。
docker update --restart=always 容器ID
4、如果出错,可以查看日志(elasticsearch):
docker logs -f 容器名
并找到修改出错的文件,vi修改
find / -name 文件名.后缀
三、部署后端
1、maven打包。然后进入包目录,用java -jar 包,运行试一下,是否会出错,一定要先试一下。
2、linux新建目录,编写Dockerfile文件,把Dockerfile和jar包放在目录下。
Dockerfile内容:
FROM java:8
VOLUME /tmp
COPY mysiteapi.jar api.jar
RUN bash -c "touch /api.jar"
EXPOSE 9090
ENTRYPOINT ["java", "-jar", "api.jar", "--spring.profiles.active=prod", "--server.port=9090", "> /log/mysiteapi.log"]
说明:
FROM java:8 ,基础依赖为JDK1.8镜像;
VOLUME /tmp指向了一个/tmp的目录,由于Spring Boot使用内置的Tomcat容器,Tomcat默认使用/tmp作为工作目录,效果就是在主机的/var/lib/docker目录下创建了一个临时文件,并连接到容器的/tmp;
COPY api.jar api.jar,将api.jar 复制到docker中并命名为api.jar
RUN bash -c “touch /api.jar” ,项目中有html页面时需要。
EXPOSE 9090 ,容器暴露的端口号;
ENTRYPOINT [“java”, “-jar”, “api.jar”, “–spring.profiles.active=prod”, “–server.port=9090”, “> /log/mysiteapi.log”],相当于前面的 java -jar xxx.jar 也就是运行这个项目,并自定义一些参数,运行的配置文件为生产环境。
3、制作镜像
cd到上一步建立存放文件的文件夹,执行制作镜像命令(注意后面的点)
cd SpringbootDocker
docker build -t mysiteapi .
4、创建并启动容器(设置开机自启参数)
docker run -d -p 9090:9090 mysiteapi --restart=always
四、部署前端
1、打包
vs控制台执行打包命令:
npm run build
完成后,多出dist目录
2、在liunx创建目录,放在三个文件
(1)创建Dockerfile:
FROM nginx
COPY dist/ /usr/share/nginx/html/
COPY nginx/default.conf /etc/nginx/conf.d/default.conf
说明:
FROM nginx 使用nginx基础镜像;
COPY dist/ /usr/share/nginx/html/ 放置静态资源到此目录下;
COPY nginx/default.conf /etc/nginx/conf.d/default.conf 替换默认的配置文件
(2)创建Nginx文件夹,其下添加default.conf文件:
server {
listen 8080;
server_name 47.102.212.xxx;
#charset koi8-r;
access_log /var/log/nginx/host.access.log main;
error_log /var/log/nginx/error.log error;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}}
说明:
listen 8080对应vue配置项目端口;
server_name 47.102.212.xxx; 对应linux的ip地址
(3)上传打包好的dist
3、进入目录构建镜像文件
cd VueNginx
docker build -t mysitevue .
4、生成容器,运行
docker run -p 80:8080 -d --name mysitefront mysitevue
项目Git地址:https://github.com/zhuyanxue/mysite_back(后端),https://github.com/zhuyanxue/mysite_front(前端)。
5、出现
五、docker常用命令
docker run -d --name //新建容器,自定义容器名 镜像ID或镜像名 d后台运行
docker ps // 查看所有正在运行容器
docker stop containerId // containerId 是容器的ID
docker ps -a // 查看所有容器
docker ps -a -q // 查看所有容器ID
docker stop $(docker ps -a -q) // stop停止所有容器
docker rm $(docker ps -a -q) // remove删除所有容器
docker images //展示所有本地镜像
docker start 容器名或容器ID //运行容器
docker stop 容器名或容器ID //停止运行容器
docker rm -f 容器名或容器ID //删除容器
docker exec -it 容器名或容器ID bash //进入容器内容bash
exit //退出容器命令:
service stop docker //关闭docker服务
docker logs -t 容器id //查看容器运行日志
systemctl restart docker //重启docker
参考文章:
https://blog.csdn.net/qq_38634213/article/details/103988584,
https://blog.csdn.net/qq_38634213/article/details/103989006,
https://blog.csdn.net/qq_38634213/article/details/103989348,
https://blog.csdn.net/funtaster/article/details/83274727,
https://www.cnblogs.com/powerbear/p/11298135.html