# docker
# maven打包springboot生成docker镜像
为啥使用 docker 公司微服务需要启动太多,有两个优点吧!
1.方便管理,2.减少服务占用内存量
# 上手
- 新建Dockerfile文件如下目录(src目录下新建
Dockerfile文件) - Dockerfile文件内容
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
ps:
FROM: 第一条指令必须是FROM指令 (环境依赖 jdk 版本等)
VOLUME: 作用是创建在本地主机或其他容器可以挂载的数据卷,用来存放数据。
ARG: 定义一个变量
JAR_FILE: 为pom文件中项目定义的路径地址
COPY: 复制本地主机src目录或文件到容器的desc目录,desc不存在时会自动创建。
ENTRYPOINT: 每个Dockerfile中只能有一个ENTRYPOINT,当有多个时最后一个生效。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
- 修改pom
<properties>
<docker.image.prefix>springio</docker.image.prefix>
</properties>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<repository>${docker.image.prefix}/${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- 需要在maven中添加配置(不加入可能会导致 docker:build 不识别) 否则会报
No plugin found for prefix 'docker' in the current project and in the plugin groups...
即在maven的setting.xml中添加配置
<pluginGroups>
<!-- pluginGroup
| Specifies a further group identifier to use for plugin lookup.-->
<pluginGroup>com.spotify</pluginGroup>
</pluginGroups>
1
2
3
4
5
2
3
4
5
- docker 配置需要更改(勾选)否则会报 localhost:2375 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect
Expose daemon on...(此项打勾)
1
- 最后命令
a.mvn package dockerfile:build(项目路径下)
b.docker 查看镜像 docker images
c.运行项目 docker run -d -p 8099:8099 springio/xlw_demo
1
2
3
2
3
# 再见Docker
再见Docker
Podman,Skopeo和Buildah
这三个工具都是符合OCI计划下的工具(github/containers)。主要是由RedHat推动的,他们配合可以完成Docker所有的功能,而且不需要守护程序或访问有root权限的组,更加安全可靠,是下一代容器容器工具。
# docker在工作中的实践
# 安装
yum install -y docker
1
# 修改镜像源地址
sudo vi /etc/docker/daemon.json
# 按 i 编辑,然后 输入:wq 保存退出
1
2
2
{"registry-mirrors":["https://pee6w651.mirror.aliyuncs.com","https://dockerhub.azk8s.cn","https://reg-mirror.qiniu.com","https://registry.docker-cn.com"]}
1
# 重启docker
sudo systemctl restart docker.service
1
# 设置开机启动docker
sudo systemctl is-enabled docker.service
# 检查服务是否开机启动
sudo systemctl enable docker.service
# 将服务配置成开机启动
sudo systemctl disable docker.service
# 禁止开机启动
sudo systemctl stop docker.service
# 停止
sudo systemctl restart docker.service
# 重启
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# Docker Compose安装
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
#添加执行权限,需要root登录执行
sudo chmod +x /usr/local/bin/docker-compose
#查看是否安装成功
docker-compose -v
1
2
3
4
5
6
2
3
4
5
6
# 磁盘挂载(有未挂载的磁盘才执行)
#查看磁盘挂载情况
df -hl
#查看未挂载的磁盘 这里/dev/vdb未挂载
fdisk -l
#格式化磁盘
mkfs.ext4 -E lazy_itable_init=1,lazy_journal_init=1 /dev/vdb
#挂载,这里的挂载点为 /home/docker
sudo mkdir /home/docker
mount /dev/vdb /home/docker
#设置开机自动挂载 在/etc/fstab增加一行挂载
vi /etc/fstab
/dev/vdb /home/docker ext4 defaults 0 0
#重启 后再查看磁盘是否挂载成功
reboot
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 目录准备
#创建目录
sudo mkdir /home/docker/fourfaith
sudo mkdir /home/docker/ffmysql
sudo mkdir /home/docker/redis
sudo mkdir /home/docker/rocketmq
sudo mkdir /home/docker/nginx
sudo mkdir /home/docker/nginx/dist
sudo mkdir /home/docker/ftp
sudo mkdir /home/docker/ftp/conf/
sudo mkdir /home/docker/ftp/data
sudo chmod -R 777 /home/docker/ftp
sudo chmod +x /home/docker/ftp
sudo chmod -R 777 /home/docker/ftp/data
sudochmod +x /home/docker/ftp/data
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
#配置文件
复制my.cnf到/home/docker/ffmysql/
复制redis.conf到/home/docker/redis/
复制broker.conf到/home/docker/rocketmq/;注意broker.conf中的ip配置见常见问题RocketMQ目录及配置
复制nginx.conf到/home/docker/nginx/
解压dist.zip复制web包到/home/docker/nginx/dist/
复制Dockerfile、jar、docker-compose.yml到/home/docker/fourfaith/
1
2
3
4
5
6
7
2
3
4
5
6
7
# Mysql安装和初始化数据
cd /home/docker/fourfaith
docker-compose up -d mysql
1
2
2
# 初始化数据
- 1、进入容器
docker exec -it ffmysql /bin/bash
1
- 2、登录mysql
mysql -uroot -pfourfaith
1
- 3、执行以下脚本
CREATE USER 'fourfaith'@'%' IDENTIFIED BY 'fourfaith';
grant all PRIVILEGES on *.* to fourfaith@'%';
CREATE DATABASE `ff_user`;
CREATE DATABASE `ff_device`;
CREATE DATABASE `ff_duty`;
CREATE DATABASE `ff_wb`;
1
2
3
4
5
6
2
3
4
5
6
# MongoDB安装及初始化数据
# mongodb安装
mkdir /home/docker/mongodb
mkdir /home/docker/mongodb/data
mkdir /home/docker/mongodb/data/db
mkdir /home/docker/mongodb/data/configdb
cd /home/docker/fourfaith
docker-compose up -d mongodb
1
2
3
4
5
6
2
3
4
5
6
# mongodb初始化数据
- 1、登录admin数据库 创建root账号,创建faithmsg数据库并创建账号
docker exec -it ffmongo mongo admin
db.createUser({ user: 'root', pwd: 'fourfaith', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
db.auth("root","fourfaith");
use faithmsg;
db.createUser({ user: 'faithmsg', pwd: 'faithmsg', roles: [ { role: "dbOwner", db: "faithmsg" } ] });
db.auth("faithmsg","faithmsg");
db.mytest.insert({"name":"hello"});
1
2
3
4
5
6
7
2
3
4
5
6
7
# 查看已有容器
docker ps -a
1
# 安装平台服务
cd /home/docker/fourfaith
docker-compose up -d
#检查安装结果
docker ps
1
2
3
4
2
3
4
cd /home/docker/fourfaith
docker stop ffvideo
docker rm ffvideo
docker rmi fourfaith/ffvideo:1.0.0
docker-compose up -d ffvideo
1
2
3
4
5
2
3
4
5
# 配置防火墙开放端口
#开启防火墙,解决控制台connect to 10911 faild的问题
sudo firewall-cmd --zone=public --add-port=10911/tcp --permanent
sudo firewall-cmd --zone=public --add-port=10909/tcp --permanent
#其他需要开发的端口 如各种服务端口:8000,21,10000,10001,10002等
sudo firewall-cmd --zone=public --add-port=8848/tcp --permanent
sudo firewall-cmd --zone=public --add-port=8848/tcp --permanent
sudo firewall-cmd --zone=public --add-port=7701/tcp --permanent
sudo firewall-cmd --zone=public --add-port=8000/tcp --permanent
sudo firewall-cmd --zone=public --add-port=21/tcp --permanent
sudo firewall-cmd --zone=public --add-port=10000/tcp --permanent
sudo firewall-cmd --zone=public --add-port=10001/tcp --permanent
sudo firewall-cmd --zone=public --add-port=10002/tcp --permanent
sudo firewall-cmd --reload
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 服务重新安装
#进入安装文件目录
cd /home/docker/fourfaith
#要重装哪个服务 直接复制命令到命令行工具,回车即可
#用户中心
docker stop ffuser
docker rm ffuser
docker rmi fourfaith/ffuser:1.0.0
docker-compose up -d ffuser
#mysql
docker stop ffmysql
docker rm ffmysql
docker-compose up -d mysql
#nacos
docker stop ffnacos
docker rm ffnacos
docker-compose up -d nacos
#nginx
docker stop nginx
docker rm nginx
docker-compose up -d nginx
#ftp
docker stop ftp
docker rm ftp
docker-compose up -d ftp
#mqserver
docker stop mqserver
docker rm mqserver
docker-compose up -d mqserver
#mqbroker
docker stop mqbroker
docker rm mqbroker
docker-compose up -d mqbroker
#mqconsole
docker stop mqconsole
docker rm mqconsole
docker-compose up -d mqconsole
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 服务日志
#日志路径
/home/docker/fourfaith/logs
1
2
2
# 常用命令
#docker命令集
docker --help
#查看本地镜像(需先停止并删除其对应的容器)
docker rmi IMAGE ID
#强制删除镜像
docker rmi -f IMAGE ID
#删除容器
docker rm ffmonitor
#查看doker运行的容器服务
docker ps -a
#容器服务启停
docker stop/start/restart 服务名
如:docker restart mysql
#查看日志
docker logs -f --tail=1000 mysql
#进入容器,蓝色部分改成容器名
docker exec -it ffmysql bash
#查找镜像
docker search rocketmq
#显示镜像的所有版本,可替换蓝色部分
curl https://registry.hub.docker.com/v1/repositories/nacos/nacos-server/tags\
| tr -d '[\[\]" ]' | tr '}' '\n'\
| awk -F: -v image='nacos/nacos-server' '{if(NR!=NF && $3 != ""){printf("%s:%s\n",image,$3)}}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 1、开放端口
firewall-cmd --zone=public --add-port=5672/tcp --permanent # 开放5672端口
firewall-cmd --zone=public --remove-port=5672/tcp --permanent #关闭5672端口
firewall-cmd --reload # 配置立即生效
1
2
3
2
3
# 2、查看防火墙所有开放的端口
firewall-cmd --zone=public --list-ports
1
# 3、关闭防火墙
如果要开放的端口太多,嫌麻烦,可以关闭防火墙,安全性自行评估
systemctl stop firewalld.service
1
# 4、查看防火墙状态
firewall-cmd --state
1
# 5、查看监听的端口
netstat -lnpt
1
# 6、检查端口被哪个进程占用
netstat -lnpt |grep 5672
1
# 7、查看进程的详细信息
ps 6832
1
# 8、中止进程
kill -9 6832
1
# 9、查看容器的环境变量
docker inspect ffuser
1