Docker

Docker

1、docker

1)什么是docker?

  • Docker是一个容器化平台,它以容器的形式将应用程序及其所有依赖项打包在一起,以确保应用程序在开发,测试或生产的任何环境中无缝运行。
  • Docker容器,将一个软件包装在一个完整的文件系统中,该文件系统包含运行所需的一切:代码,运行时,系统工具,系统库等可以安装在服务器上的任何东西。
  • 这可以保证软件始终运行相同,无论其环境如何。

2)docker的优势?

  • 提供一致的运行环境,容易迁移
  • 使用分层和镜像的概念,容易维护、容易扩展
  • 虚拟机需要完整的操作系统,资源消耗大,docker只是一个进程


2、镜像

1)什么是docker镜像?

Docker镜像是Docker容器的源代码。换句话说,Docker镜像用于创建容器。使用build命令创建镜像,并且在使用run启动时它们将生成容器。镜像存储在Docker注册表registry.hub.docker.com中,因为它们可能变得非常大,镜像被设计为由其他镜像层组成,允许在通过网络传输镜像时发送最少量的数据。



3、容器

1) 什么是docker容器?

Docker容器包括应用程序及其所有依赖项,但与其他容器共享内核,作为主机操作系统上用户空间中的独立进程运行。Docker容器不依赖于任何特定的基础架构:它们可以在任何计算机,任何基础架构和任何云中运行。

2)容器的状态

  • 运行
  • 重启
  • 已退出
  • 已暂停


4、常用命令

1)镜像命令

# 查看所有本地的主机上的镜像
docker images

# 搜索镜像
docker search

# 下拉镜像
docker pull

# 删除镜像
docker rmi

2)容器命令

# 列出可运行的容器
docker ps

# 启动nginx容器,并挂载本地文件目录到容器html的命令是?
docker run -d -P --name nginx2 -v /home/nginx:/usr/share/nginx/html nginx

# 进入容器的方法
docker attach 容器id
docker exec -it 容器id /bin/bash


5、dockerfile

1)常见指令

FROM 			# 基础镜像,一切从这里开始构建
MAINTAINER		# 竟像是谁写的,姓名+邮箱
RUN				# 镜像构建的时候需要运行的命令
ADD 			# 添加内容
WORKDIR			# 镜像的工作目录
VOLUME			# 挂载的目录
EXPOSE			# 保留的端口配置
CMD				# 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT		# 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD			# 当构建一个被继承 DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令
COPY			# 类似ADD ,将我们文件拷贝到镜像中
ENV				# 构建的时候设置环境变量

2)使用dockerfile 打包 springboot 项目的流程

  • centos 服务器上安装docker
  • 将本地项目打成jar包,上传到服务器上的 test 文件夹下
  • 在test文件夹下创建dockerfile,并编写dockerfile
  • 执行docker构建镜像命令 (docker build)
  • 运行刚才构建成的镜像(docker run)
# dockerfile示例
FROM java:8
VOLUME /tmp
ADD thymeleaf-master-1.0-SNAPSHOT.jar /thymeleaf-master.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/thymeleaf-master.jar"]


6、docker-compose

1)compose 简介

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务

2)使用步骤

  • 使用 Dockerfile 定义应用程序的环境
  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行
  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序

3)yml指令

version

制定本yml依从的compose哪个版本制定的

build

指定为构建镜像上下文路径

container_name

指定自定义容器名称,而不是生成的默认名称

depends_on

设置依赖关系

ecpose

暴露端口

image

指定容器运行的镜像

restart

重启:

  • no
  • always
  • on-failure
  • unless-stopped

volumes

将主机的数据卷或者文件挂载到容器里

command

覆盖容器启动的默认命令



7、项目

采用jeecg框架,是一种前后端分离框架。

打包至少需要4个容器:

  • 前端
    • jeecg-boot-nginx
  • 后端
    • jeecg-boot-system
    • jeecg-boot-mysql
    • jeecg-boot-redis

框架写好的有:

  • Dockerfile
    • nignx
      • 基础镜像nginx
    • mysql
      • 基础镜像msyql 8.0.19
      • 将数据库 copy 到容器中
    • system
      • 基础镜像 java8_server-jre
      • 将jar包添加到容器中
      • 执行cmd命令java -jar
  • docker-compose
    • docker-compose.yml
      • system
      • mysql
      • redis
    • docker-compose-server.yml
      • system
      • mysql
      • redis
      • nginx

项目打包步骤:

1)修改mysql 的 url 和 redis 的 host 分别用 jeecg-boot-mysql、jeecg-boot-redis 代替localhost

2)采用dev编译项目并使用 maven 打成jar包

3)执行docker-compose.yml (docker-compose up -d)

4)前端项目通过build构建镜像 (docker build -t nginx:jeecgboot . )

5)准备好4个镜像后,登录docker hub ,将镜像上传到docker仓库中

6)修改docker-compose-server.yml 并上传到服务器

7)执行docker-compose-server.yml ( docker-compose -f ./docker-compose-server.yml up )

8)环境部署完成


参考链接:



posted @ 2021-07-24 16:11  随性0528  阅读(172)  评论(0)    收藏  举报