docker和项目部署

一、docker介绍

·docker可以帮助项目部署,同样比较常见的K8S是容器编排技术。
·不同操作系统下其安装包、运行环境是都不相同的!如果是手动安装,必须手动解决安装包不同、环境不同的、配置不同的问题!而使用Docker,这些完全不用考虑,因为Docker会自动搜索并下载镜像(不是安装包)。镜像中不仅包含了服务本身,还包含了其运行所需要的环境、配置、系统级函数库。因此它在运行时就有自己独立的环境,就可以跨系统运行,也不需要手动再次配置环境了。这套独立运行的隔离环境我们称为容器。因此,Docker安装软件的过程,就是自动搜索下载镜像,然后创建并运行容器的过程。
·镜像英文是image,容器英文是container。容器会隔离各个进程的运行环境,互不干扰。
Docker官方提供了一个专门管理、存储镜像的网站,并对外开放了镜像上传、下载的权利。
·每个容器有自己的独立的内存空间,独立的文件系统,甚至有独立的网络空间,有自己的IP地址(不同于宿主的IP地址,对宿主外部屏蔽),所以只能连接宿主的端口,让宿主映射到容器的端口)。
·镜像有两种创建方式:去官网拉取,自己制作(后面我的项目部署就是基于这个方式)
·例子,docker创建并运行mysql容器:

在这里插入图片描述

二、docker常见命令

在这里插入图片描述

docker pull拉取镜像
docker push推送镜像到DockerRegistry
docker images查看本地镜像
docker rmi删除本地镜像
docker run创建并运行容器(不能重复创建)
docker stop停止指定容器
docker start启动指定容器
docker restart重新启动容器
docker rm删除指定容器
docker ps查看容器
docker logs查看容器运行日志
docker exec进入容器,因为本来容器是隔离的
docker save保存镜像到本地压缩文件
docker load加载本地压缩文件到镜像
docker inspect查看容器详细信息
注意区分:run创建并运行容器,start运行容器;镜像和容器间的区别;
·测试发现,容器确实准备了系统函数库,但是只配备了应用运行必备的函数。就算宿主安装了vim等库,容器中仍然需要重新安装。
·在docker里启动的mysql服务不能通过mysql -v来查看版本,而需要在前面加上docker变成 docker mysql -v

三、数据卷

在这里插入图片描述

还可以自己指定数据卷挂载的位置。

四、自定义镜像制作

自定义镜像本质就是依次准备好程序运行的基础环境、依赖、应用本身、运行配置等文件,并且打包而成。部署java应用需要4步,如果要让别人拿到我们的镜像直接就能用,我们需要在镜像内部替代这4步骤。镜像文件不是随意堆放的,而是按照操作的步骤分层叠加而成。这样,如果我们构建时用到的某些层其他人已经制作过,就可以直接拷贝使用这些层,而不用重复制作。
在这里插入图片描述
在这里插入图片描述

制作镜像对于我来说还是太难,好在Docker提供了自动打包镜像的功能。只需要将打包的过程,每一层要做的事情用固定的语法写下来,交给Docker去执行即可,而这种记录镜像结构的文件被称为Dockerfile。常用指令:
在这里插入图片描述

有人提供了基础的系统+JDK环境,可以此基础上制作java镜像:

# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区东8区,方便查看日志
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

五、docker网络

查看mysql容器的详细信息,发现IP为172.17.0.2,网关为172.17.0.1
查看nginx容器的详细信息,发现IP为172.17.0.3,网关为172.17.0.1
查看dd容器的详细信息,发现IP为172.17.0.4,网关为172.17.0.1
我们发现前面启动的容器的ip地址在同一个网段内,且有相同的网关,也就是可以相互访问,怎么做到的呢?查阅资料发现,docker安装的时候会创建一个172.17.0.1/16的网卡充当网桥,所有和它连上的容器都会依次分配一个IP。
于是就产生了一个问题,容器重新启动,ip地址就会变动,后面我部署项目的时候,怎么填写连接的套接字呢?
答:可以自定义网络代替之前的172.17.0.1/16,这样就可以通过容器名字相互访问,即便重启,容器名也不会变动。以下是常见命令:

docker network connect hmall mysql --alias db  #起别名
docker network connect hmall dd

–在自定义网络中,可以给容器起多个别名,默认的别名是容器名本身;
–在同一个自定义网络中的容器,可以通过别名互相访问;
–也可以在创建容器的时候加上–network 自定义网络名来连接到自定义网络;
–默认网络没有别名功能;
–现在无需记住IP地址也可以实现容器互联了。

六、使用docker进行项目部署

方法一
  • 后端部署:
    先将项目打包得到jar包,并编写dockerfile文件
    将前面两个文件导入Linux 通过docker
    bulid命令构建项目镜像 通过docker
    run利用镜像创建并启动容器
  • 前端nginx部署:
    准备好静态资源和配置文件
    将前面两个文件导入Linux
    下载ngnix镜像
    创建容器并完成挂载
  • mysql部署:
    准备好初始sql语句和配置文件
    将前面两个文件导入Linux
    下载mysql镜像
    创建容器并完成挂载
  • 中间件部署…

注意:各个容器需要连接同一个自定义网络,相互之间使用别名访问。
怎么挂载的?创建容器的时候通过参数 -v 宿主挂载目录:容器资源目录来挂载,这样就不用进入容器内部来配置资源和文件了。

项目部署方法二

后面我发现还有更简便的方式:DockerCompose能实现多个相互关联的Docker容器的快速部署。只需编写docker-compose.yml文件就能定义一组相关联的应用容器。编写这个文件过后,我发现基本就是把docker run命令的参数换了个地方合并到了一起。DockerCompose官方文档
编写docker-compose.yml文件如下

version: "3.8"
services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 114514
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/init:/docker-entrypoint-initdb.d"
    networks:
      - hm-net
  hmall:
    build: 
      context: .
      dockerfile: Dockerfile
    container_name: hmall
    ports:
      - "8080:8080"
    networks:
      - hm-net
    depends_on:
      - mysql
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "18080:18080"
      - "18081:18081"
    volumes:
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"
      - "./nginx/html:/usr/share/nginx/html"
    depends_on:
      - hmall
    networks:
      - hm-net
networks:
  hm-net:
    name: wnl

命令行启动:

docker compose up -d

打开浏览器访问:
在这里插入图片描述

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Docker项目部署是指使用Docker容器技术将应用程序和依赖项打包成可移植的容器,并在不同的环境中进行部署和运行。通过使用Docker,可以实现应用程序在不同的操作系统和硬件平台上的一致性,并提供更高的灵活性和可扩展性。 首先,为了进行Docker项目部署,我们需要了解Docker的概念和原理。Docker是一种开源的容器化平台,它可以将应用程序及其依赖项打包在一个独立的容器中,与宿主机隔离,并提供一致的运行环境。这使得应用程序的部署和管理更加简单和高效。 在部署Docker项目之前,我们需要安装Docker CE,即Docker社区版。在CentOS 7上安装Docker CE的步骤如下: 1. 安装Docker的依赖库: ``` yum install -y yum-utils device-mapper-persistent-data lvm2 ``` 2. 添加Docker CE的软件源信息: ``` sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo ``` 安装完成后,可以使用Docker命令行工具来构建、运行和管理Docker容器。通过编写Dockerfile文件,可以定义容器的配置和依赖项,并使用Docker构建命令来构建镜像。然后,可以使用Docker run命令来启动容器并运行应用程序。 除了在单个主机上部署Docker项目,还可以使用Docker Swarm或Kubernetes等容器编排工具,将多个Docker容器组织成一个集群,并实现负载均衡和高可用性。 总结来说,Docker项目部署是通过将应用程序和依赖项打包成容器,并使用Docker工具来进行部署和管理。这种方式可以提供一致的运行环境、高效的部署过程和更好的可扩展性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [docker项目部署](https://blog.csdn.net/m0_49556309/article/details/117093002)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [使用Docker部署前端项目实战教程,该踩的坑我都帮你踩了!](https://blog.csdn.net/qq_32442973/article/details/119963691)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值