您现在的位置是:首页 > 电脑学习教程 > Docker教程 > 文章正文 Docker教程
linux安装docker及docker-compose部署springboot项目
2022-12-12 11:00:52 Docker教程
简介linux系统环境:centos 5.14安装docker和docker-compose安装docker---------运行命名等待安装完成遇到选择直接输入yyuminstall-yyum-utils...
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
- sudo pip install docker-compose
- 查看版本
- docker-compose version
- 添加镜像加速器(不添加不能用)
- 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
书写粗糙,能用就行。