linux安装docker及docker-compose 部署spring boot项目

  • Post author:
  • Post category:linux


linux系统环境:centos 5.14

安装docker和docker-compose

安装docker---------
运行命名等待安装完成 遇到选择直接输入y
yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce

安装完成后输入命令检查
docker --version

启动docker、
sudo systemctl start docker
设置开启开机启动
sudo systemctl enable docker


安装docker-compose-----------

安装docker-compose
sudo pip install docker-compose

查看版本
docker-compose version


如若报错:
Cannot uninstall ‘requests’. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
执行:

pip install docker-compose --ignore-installed requests 

执行后查看版本(执行这个命令可能会报错,但是查看版本没问题)


添加镜像加速器(不添加下载镜像会很慢)
mkdir -p /etc/docker
下面---内的直接全部复制回车-----
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"]
}
EOF
------

添加后运行下面命令
systemctl daemon-reload
systemctl restart docker

添加镜像加速器完成

安装好之后就是部署spring boot 项目,我现在使用两种方法部署spring boot 项目:


第一种是直接使用dockerfile部署项目。

首先,把自己的spring boot 项目先打包成jar包。

然后创建Dockerfile文件,没有文件类型,就是没有后缀.txt,然后把Dockerfile文件和jar包放在服务器同一目录。

接着我们编辑Dockerfile文件。

# 表示使用 Jdk8 环境 为基础镜像,如果镜像不是本地的会从 DockerHub 进行下载
FROM java:8
# 作者
MAINTAINER wt
# VOLUME 指向了一个/tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。
# 这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar,可以使用相对路径、绝对路径,这里相对路径(前面是上传jar包的名字,后面是重命名)
ADD demo-0.0.1-SNAPSHOT.jar app.jar
# 运行jar包
RUN bash -c 'touch /app.jar'
# 设置时区-不然比当前时间慢8小时
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
# 为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

编辑好Dockerfile文件后,再运行:

创建Dockerfile文件,没有文件类型,就是没有.txt,然后把Dockerfile文件和jar包放在服务器同一目录。
进入到Dockerfile文件和jar包的目录,运行
注意:后面末尾有一个空格和一个“.”,demo是创建的镜像的名字,“.”表示当前目录

docker build -t demo .

镜像就创建成功了,输入命令查看镜像
docker images
然后根据镜像创建容器

根据镜像demo:latest创建名称为dockerDemo的容器	8080:8080 外端口:内端口	把-d取消就会显示运行界面	--net=host 添加这个mysql才能正常访问
运行方式一:直接后台运行
docker run -p 8080:8080 --net=host --name dockerDemo  -d demo:latest

运行方式二:先前台运行
docker run -p 8080:8080 --name dockerDemo  demo:latest
没问题了在ctrl+c退出运行界面
再输入命令运行docker, 然后Dockerfile运行spring boot 项目就完成了
docker start dockerDemo

如果运行时遇到报错 library initialization failed - unable to allocate file descriptor table - out of memor
就删除容器,再删除镜像 然后加上启动参数 --ulimit nofile=1024:1024,上面运行没有报错就不用加
docker run --ulimit nofile=1024:1024 -p 8080:8080 --name dockerDemo  demo:latest
docker run -d --ulimit nofile=1024:1024 -p 8080:8080 --name dockerDemo  demo:latest


容器就运行就结束了

如果代码更新了,分别执行如下步骤即可

Docker 容器镜像删除
删除单个镜像:
1、停止容器 demoserver是容器名 也可以输入容器ID
docker stop demoserver
2、删除容器
docker rm demoserver
3、删除镜像 docker-demo_demoserver是镜像名
docker rmi docker-demo_demoserver 
4、删除id为<None>的镜像image
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

其他:
查询运行的容器:
docker ps
查询所有容器(运行的和没运行的容器)
docker ps -a
查询所有镜像
docker images


删除全部image:
1.先停止容器,2.删除全部容器,3.再删除全部镜像
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)




第二种是使用docker-compose部署项目

首先需要完成第一步的创建dockerfile文件,然后新建一个文件夹dockerfile存放Dockerfile文件和jar包。然后新建一个

docker-compose.yml文件内容。

version : '2'
services:   
  demoserver:
    container_name: demoserver
    build:
      context: ./dockerfile
      dockerfile: Dockerfile
    ports:
      - "8080:8081"
    networks:
      - net-spring-db
    volumes:
      - /data:/data
      - ./dockerfile/config:/config
    ulimits:
      core: 0
      nofile:
        soft: 1024
        hard: 1024
 
networks:
  net-spring-db:
    driver: bridge

下面是docker-compose.yml文件的字段解释。

version:指定版本号,默认2,不用管
services:下面的就是要构建的镜像名称。
container_name: 就是运行的服务名称,可以和镜像名称一样
build:可以指定基础镜像,也可以指定dockerfile,还可以指定dockerfile所在的目录
	context: .为当前目录,当前目录下dockerfile文件夹内搜索
	dockerfile: 指定dockerfile文件名称

environment:环境变量,上面的Mysql就指定了root密码和初始化数据库;
这是一个数组,用 '-'来分割

ports:映射端口 主机端口:容器端口
volumes:映射文件目录 主机目录:容器目录

如果运行时遇到报错 library initialization failed - unable to allocate file descriptor table - out of memor
ulimits:
      core: 0
      nofile:
        soft: 1024
        hard: 1024


networks:加入指定的网络模式 
查询网络
docker network ls
创建网络,app_net 为网络名称
docker network create app_net

只是指定一个路径,Docker 会自动在创建一个数据卷(这个路径是容器内部的)。

depends_on:启动依赖服务。这里是先启动mysql,在启动这个服务


links:链接到其他服务中的容器,上面的springboot就要链接到mysql


创建好yml文件后,直接进入到存放yml的目录,运行命令:

#前台运行项目,可以实时查看项目的运行状态。
docker-compose up
#如果正常运行,就按ctrl+c结束运行,再运行下面命令后台运行
docker-compose up -d
#当项目运行后,如果后面修改了yml或者jar包或者dockerfile文件,则运行命令重构:
docker-compose up -d --build


springboot 使用外部配置文件

在docker-compose.yml文件配置了路径映射,按照springboot外部配置文件使用方法,只需要在jar包同目录下新建一个config文件存放application.properties配置文件即可。

docker容器jar文件默认存放在根目录,只需要把根目录下的/config配置文件夹映射出来就可以了

volumes:

– /data:/data

– ./dockerfile/config:/config


最后附上mysql的docker-compose.yml

version : '2'
services:

  my-mysql:
    container_name: my-mysql
    image: mysql:5.7.17
    environment:
      - "MYSQL_ROOT_PASSWORD=root"
      - "MYSQL_DATABASE=drmTrading"
      - "MYSQL_ROOT_HOST=%"
    ports:
      - "3306:3306"
    networks:
      - net-spring-db
    volumes:
      - /data/mysql/data:/var/lib/mysql
      - /data/mysql/logs:/logs
      - /data/mysql/conf:/etc/mysql
    command: [
          'mysqld',
          '--innodb-buffer-pool-size=20M',
          '--character-set-server=utf8',
          '--collation-server=utf8_general_ci',
          '--default-time-zone=+8:00',
          '--lower-case-table-names=1'
        ]

networks:
  net-spring-db:
    driver: bridge

除了上面的一些命令,再整理哥其他常用的docker命令:

#查询容器列表
docker ps
#查询所有容器列表
docker ps -a
#查询容器日志
docker logs 容器ID或者容器name
#关闭容器
docker stop 容器ID或者容器name
#开启容器
docker start 容器ID或者容器name
#进入容器
docker exec -it 容器ID或者容器name /bin/bash
查询所有镜像
docker images


Docker 容器镜像删除
删除单个镜像:
1、停止容器 demoserver是容器名 也可以输入容器ID
docker stop demoserver
2、删除容器
docker rm demoserver
3、删除镜像 docker-demo_demoserver是镜像名
docker rmi docker-demo_demoserver 
4、删除id为<None>的镜像image
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")


删除全部image:
1.先停止容器,2.删除全部容器,3.再删除全部镜像
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)

#操作docker-compose 必须进入到有docker-compose.yml的路径操作

#前台运行项目,可以实时查看项目的运行状态。
docker-compose up
#如果正常运行,就按ctrl+c结束运行,再运行下面命令后台运行
docker-compose up -d
#当项目运行后,如果后面修改了yml或者jar包或者dockerfile文件,则运行命令重构:
docker-compose up -d --build

书写粗糙,能用就行。

如果有什么问题,欢迎大佬指正。

最后如果对你有一点点帮助,麻烦支持一下。


全国寄快递5元起,电影票8.8折。更多优惠微信关注公众号:【折价寄件】

感谢阅读!!!!



版权声明:本文为w981912536原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。