# docker

返回:server

# maven打包springboot生成docker镜像

为啥使用 docker 公司微服务需要启动太多,有两个优点吧! 1.方便管理,2.减少服务占用内存量

# 上手

back

  • 新建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
  • 修改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
  • 需要在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
  • 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

# 再见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
{"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

# 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

# 磁盘挂载(有未挂载的磁盘才执行)

#查看磁盘挂载情况
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

# 目录准备

#创建目录
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
#配置文件
复制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

# Mysql安装和初始化数据

cd /home/docker/fourfaith
docker-compose  up -d mysql
1
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

# 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

# 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

# 查看已有容器

docker ps -a
1

# 安装平台服务

cd /home/docker/fourfaith
docker-compose  up -d
#检查安装结果
docker ps
1
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

# 配置防火墙开放端口

#开启防火墙,解决控制台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

# 服务重新安装

#进入安装文件目录
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

# 服务日志

#日志路径
/home/docker/fourfaith/logs
1
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

# 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、查看防火墙所有开放的端口

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