您现在的位置是:首页 > 电脑学习教程 > 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

  1. 安装docker--------- 
  2. 运行命名等待安装完成 遇到选择直接输入y 
  3. yum install -y yum-utils device-mapper-persistent-data lvm2 
  4. sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
  5. yum install docker-ce 
  6.   
  7. 安装完成后输入命令检查 
  8. docker --version 
  9.   
  10. 启动docker、 
  11. sudo systemctl start docker 
  12. 设置开启开机启动 
  13. sudo systemctl enable docker 
  14.   
  15.   
  16. 安装docker-compose 
  17. sudo pip install docker-compose 
  18. 查看版本 
  19. docker-compose version 
  20.   
  21. 添加镜像加速器(不添加不能用) 
  22. mkdir -p /etc/docker 
  23.   
  24. 下面---内的直接全部复制回车----- 
  25. tee /etc/docker/daemon.json <<-'EOF' 
  26.   "registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"
  27. EOF 
  28. ------ 
  29.   
  30. 添加后运行下面命令 
  31. systemctl daemon-reload 
  32. systemctl restart docker 
  33.   
  34. 添加镜像加速器完成 

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

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

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

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

 

接着我们编辑Dockerfile文件。

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

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

  1. 创建Dockerfile文件,没有文件类型,就是没有.txt,然后把Dockerfile文件和jar包放在服务器同一目录。 
  2. 进入到Dockerfile文件和jar包的目录,运行 
  3. 注意:后面末尾有一个空格和一个“.”,demo是创建的镜像的名字,“.”表示当前目录 
  4.   
  5. docker build -t demo . 
  6.   
  7. 镜像就创建成功了,输入命令查看镜像 
  8. docker images 
  9. 然后根据镜像创建容器 
  10.   
  11. 根据镜像demo:latest创建名称为dockerDemo的容器   8080:8080 外端口:内端口   把-d取消就会显示运行界面   --net=host 添加这个mysql才能正常访问 
  12. 运行方式一:直接后台运行 
  13. docker run -p 8080:8080 --net=host --name dockerDemo  -d demo:latest 
  14.   
  15. 运行方式二:先前台运行 
  16. docker run -p 8080:8080 --name dockerDemo  demo:latest 
  17. 没问题了在ctrl+c退出运行界面 
  18. 再输入命令运行docker, 然后Dockerfile运行spring boot 项目就完成了 
  19. docker start dockerDemo 
  20.   
  21. 如果运行时遇到报错 library initialization failed - unable to allocate file descriptor table - out of memor 
  22. 就删除容器,再删除镜像 然后加上启动参数 --ulimit nofile=1024:1024,上面运行没有报错就不用加 
  23. docker run --ulimit nofile=1024:1024 -p 8080:8080 --name dockerDemo  demo:latest 
  24. docker run -d --ulimit nofile=1024:1024 -p 8080:8080 --name dockerDemo  demo:latest 
  25.   
  26.   
  27. 容器就运行就结束了 
  28.   
  29. 如果代码更新了,分别执行如下步骤即可 
  30.   
  31. Docker 容器镜像删除 
  32. 删除单个镜像: 
  33. 1、停止容器 demoserver是容器名 也可以输入容器ID 
  34. docker stop demoserver 
  35. 2、删除容器 
  36. docker rm demoserver 
  37. 3、删除镜像 docker-demo_demoserver是镜像名 
  38. docker rmi docker-demo_demoserver  
  39. 4、删除id为<None>的镜像image 
  40. docker rmi $(docker images | grep "^<none>" | awk "{print $3}"
  41.   
  42. 其他: 
  43. 查询运行的容器: 
  44. docker ps 
  45. 查询所有容器(运行的和没运行的容器) 
  46. docker ps -a 
  47. 查询所有镜像 
  48. docker images 
  49.   
  50.   
  51. 删除全部image: 
  52. 1.先停止容器,2.删除全部容器,3.再删除全部镜像 
  53. docker stop $(docker ps -a -q) 
  54. docker rm $(docker ps -a -q) 
  55. docker rmi $(docker images -q) 

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

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

docker-compose.yml文件内容。

  1. version : '2' 
  2. services:    
  3.   demoserver: 
  4.     container_name: demoserver 
  5.     build: 
  6.       context: ./dockerfile 
  7.       dockerfile: Dockerfile 
  8.     ports: 
  9.       - "8080:8081" 
  10.     networks: 
  11.       - net-spring-db 
  12.     volumes: 
  13.       - /data:/data 
  14.       - ./dockerfile/config:/config 
  15.     ulimits: 
  16.       core: 0 
  17.       nofile: 
  18.         soft: 1024 
  19.         hard: 1024 
  20.   
  21. networks: 
  22.   net-spring-db: 
  23.     driver: bridge 

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

  1. version:指定版本号,默认2,不用管 
  2. services:下面的就是要构建的镜像名称。 
  3. container_name: 就是运行的服务名称,可以和镜像名称一样 
  4. build:可以指定基础镜像,也可以指定dockerfile,还可以指定dockerfile所在的目录 
  5.     context: .为当前目录,当前目录下dockerfile文件夹内搜索 
  6.     dockerfile: 指定dockerfile文件名称 
  7.  
  8. environment:环境变量,上面的Mysql就指定了root密码和初始化数据库; 
  9. 这是一个数组,用 '-'来分割 
  10.  
  11. ports:映射端口 主机端口:容器端口 
  12. volumes:映射文件目录 主机目录:容器目录 
  13.  
  14. 如果运行时遇到报错 library initialization failed - unable to allocate file descriptor table - out of memor 
  15. ulimits: 
  16.       core: 0 
  17.       nofile: 
  18.         soft: 1024 
  19.         hard: 1024 
  20.  
  21.  
  22. networks:加入指定的网络模式  
  23. 查询网络 
  24. docker network ls 
  25. 创建网络,app_net 为网络名称 
  26. docker network create app_net 
  27.  
  28. 只是指定一个路径,Docker 会自动在创建一个数据卷(这个路径是容器内部的)。 
  29.  
  30. depends_on:启动依赖服务。这里是先启动mysql,在启动这个服务 
  31.  
  32.  
  33. links:链接到其他服务中的容器,上面的springboot就要链接到mysql 

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

  1. #前台运行项目,可以实时查看项目的运行状态。 
  2. docker-compose up 
  3. #如果正常运行,就按ctrl+c结束运行,再运行下面命令后台运行 
  4. docker-compose up -d 
  5. #当项目运行后,如果后面修改了yml或者jar包或者dockerfile文件,则运行命令重构: 
  6. 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

  1. version : '2' 
  2. services: 
  3.  
  4.   my-mysql: 
  5.     container_name: my-mysql 
  6.     image: mysql:5.7.17 
  7.     environment: 
  8.       - "MYSQL_ROOT_PASSWORD=root" 
  9.       - "MYSQL_DATABASE=drmTrading" 
  10.       - "MYSQL_ROOT_HOST=%" 
  11.     ports: 
  12.       - "3306:3306" 
  13.     networks: 
  14.       - net-spring-db 
  15.     volumes: 
  16.       - /data/mysql/data:/var/lib/mysql 
  17.       - /data/mysql/logs:/logs 
  18.       - /data/mysql/conf:/etc/mysql 
  19.     command: [ 
  20.           'mysqld'
  21.           '--innodb-buffer-pool-size=20M'
  22.           '--character-set-server=utf8'
  23.           '--collation-server=utf8_general_ci'
  24.           '--default-time-zone=+8:00'
  25.           '--lower-case-table-names=1' 
  26.         ] 
  27.  
  28. networks: 
  29.   net-spring-db: 
  30.     driver: bridge 

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

  1. #查询容器列表 
  2. docker ps 
  3. #查询所有容器列表 
  4. docker ps -a 
  5. #查询容器日志 
  6. docker logs 容器ID或者容器name 
  7. #关闭容器 
  8. docker stop 容器ID或者容器name 
  9. #开启容器 
  10. docker start 容器ID或者容器name 
  11. #进入容器 
  12. docker exec -it 容器ID或者容器name /bin/bash 
  13. 查询所有镜像 
  14. docker images 
  15.  
  16.  
  17. Docker 容器镜像删除 
  18. 删除单个镜像: 
  19. 1、停止容器 demoserver是容器名 也可以输入容器ID 
  20. docker stop demoserver 
  21. 2、删除容器 
  22. docker rm demoserver 
  23. 3、删除镜像 docker-demo_demoserver是镜像名 
  24. docker rmi docker-demo_demoserver  
  25. 4、删除id为<None>的镜像image 
  26. docker rmi $(docker images | grep "^<none>" | awk "{print $3}"
  27.  
  28.  
  29. 删除全部image: 
  30. 1.先停止容器,2.删除全部容器,3.再删除全部镜像 
  31. docker stop $(docker ps -a -q) 
  32. docker rm $(docker ps -a -q) 
  33. docker rmi $(docker images -q) 
  34.  
  35. #操作docker-compose 必须进入到有docker-compose.yml的路径操作 
  36.  
  37. #前台运行项目,可以实时查看项目的运行状态。 
  38. docker-compose up 
  39. #如果正常运行,就按ctrl+c结束运行,再运行下面命令后台运行 
  40. docker-compose up -d 
  41. #当项目运行后,如果后面修改了yml或者jar包或者dockerfile文件,则运行命令重构: 
  42. docker-compose up -d --build 

书写粗糙,能用就行。

相关文章

站点信息