写点东西《边学边写docker》

5 篇文章 0 订阅
3 篇文章 0 订阅
本文介绍了Docker的基础知识,包括Docker的概念,如鲸鱼代表的平台,集装箱比喻的容器,以及货物象征的镜像。解释了镜像的分层结构,并展示了如何运行和构建镜像。此外,还讲解了如何使用docker-compose进行多服务部署,并给出了一个SpringBoot项目与MySQL链接的示例。最后,列举了一些常用的Docker和docker-compose命令。
摘要由CSDN通过智能技术生成

docker入门

什么是docker?

在这里插入图片描述

如上图↑
docker就是鲸鱼,也可以理解为一艘大船

  • 上面装满了集装箱(容器
  • 集装箱里装满了不同的货物(镜像
  • 货源(仓库

上面加粗的文字带出了docker三大概念:容器,镜像,仓库

如何理解镜像分层?

看下面两张图↓
在这里插入图片描述

在这里插入图片描述

  • 可以简单理解为:每个镜像都有相同的bootfs(用于维持系统的基本运行),每新增一个应用会往上叠加一层(这些层都是只读)。
  • 当运行容器时,会在最上层添加一层容器层,所有的修改都会在这一层,上层同名路径的修改会覆盖下层。
    在这里插入图片描述

怎么用?

如何运行一个镜像?(货物装箱)

  1. 货物清单:从远程库中查找指定镜像。
docker search mysql
  1. 卸货:从远程仓库拉取镜像(mysql)。
docker pull mysql
  1. 装箱(运行):将镜像装入容器(自动运行)
docker run mysql

如何构建一个镜像?(货物)

下面以创建一个springboot项目docker部署为例。

  1. 新建一个springboot项目
    在这里插入图片描述
  2. 在一个空的文件夹内创建dockerFile文件:
	#以jdk作为基础镜像,本地库没有会从远程库下载
	FROM openjdk
	#设置jdk环境变量
	ENV JAVA_HOME /usr/java/openjdk-18
	ENV PATH $PATH:$JAVA_HOME/bin
	#将本地目录./app下的文件拷贝到容器/app目录下
	#COPY ./app /app
	#容器cd /app
	WORKDIR /app
	#容器授权app.jar 777权限
	#CMD ["chmod","777","app.jar"]
	#启动命令:java -jar app.jar
	ENTRYPOINT ["java","-jar","app.jar"]

本地目录结构如下:
在这里插入图片描述
3. 执行mvn pacage 打包成app.jar,然后将app.jar copy到上图↑app路径下
4. 编译生成镜像:

	D:\>cd D:\dockerfile
	D:\dockerfile>docker build -t app_prod .
  1. 运行镜像(windows环境)
	D:\dockerfile>docker run -p 18081:8081 -v /D/lmapp/target:/app --name appCon  app_prod

就可以看到成功启动的画面了(如果起不来,请直接在cmd 下 java -jar app.jar测试是否可以成功启动)

  1. 代码更新需要做2步操作:
    • mvn package
    • docker restart appCon
    • 大功告成!!

什么是docker-compose?

compose翻译为组合的意思,可以理解为docker的批处理。
命令执行docker run …balabala可以单独运行一个docker镜像
docker-compose -f docker-compose.yml up 就可以批量运行yml文件中配置的多个docker镜像服务

下面以部署一个springboot项目,并且实现springboot项目链接mysql为例:

  1. 新建一个目录结构用于docker项目的发布,目录结构如下:
docker_project                               # 项目部署根目录
├── docker-compose                  		 # docker-compose目录
│   └── docker-compose.yml       			 # docker-compose.yml配置文件
├── mysql                                    # mysql数据保存目录
	├── config                               # mysql配置
		└── my.cnf
	├── data                                 # mysql数据
	└── init                                 # mysql初始化脚本
		└── init.sql
└── service                     			 # 后端服务目录
    ├── application-prod.yml    	 		 # springboot配置文件
    ├── app.jar          					 # springboot打包jar文件
    └── Dockerfile  	 					 # springboot代码的镜像
  1. docker-compose都干了什么?怎么干的?看docker-compose.yml如下:
version: "3"                           		# docker-compose版本
services:                              	    # docker-compose服务(要干啥?)
 springboot:						        # 创建个springboot服务
   build:								 
     context: ./						 	#上下文路径(.相当于docker-compose.yml所在位置)
     dockerfile: Dockerfile     			# Dockerfile文件名
   depends_on:								#依赖于下面的mysql运行后才会运行
     - mysql57
   ports:
     - "18081:8081"
   volumes:									#映射 本机地址:容器地址
     - "/D/lmJava/wsp/docker_project/service:/app"
   links:
     - mysql57                     		   #对外访问域名
 mysql57:
   image: mysql:5.7.26
   ports:
     - "3306:3306"
   volumes:
    - "/D/lmJava/wsp/docker_project/mysql/data:/var/lib/mysql"
     - "/D/lmJava/wsp/docker_project/mysql/init:/docker-entrypoint-initdb.d/"
     - "/D/lmJava/wsp/docker_project/mysql/config/my.cnf:/etc/my.cnf"
   environment:
     MYSQL_ROOT_PASSWORD: root
  1. 运行:
    docker-compose -f “D:/lmJava/wsp/docker_project/docker-compose/docker-compose.yml” up -d
  2. 相关配置文件
    my.cnf:
[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

init.sql

CREATE USER 'user'@'%' IDENTIFIED BY 'pwd';
GRANT All privileges ON *.* TO 'user'@'%';

docker常用命令

//查看本地镜像
docker images或docker image ls
//删除本地镜像(-f:强制删除)
docker rmi 镜像Id -f
//查看running中的容器
docker ps
//查看所有容器(包含exited)
docker ps -a 
//进入运行中的容器命令行(-it 命令行显示)
docker exec -it 容器id /bin/sh
//查看未运行的容器文件系统
docker export -o 导出文件名(.tar) 容器镜像id
//查看容器日志
docker logs 容器名称
//重启容器
docker restart 容器名称
//删除容器
docker rm 容器名称
//查看已有镜像的dokerfile
docker history 镜像名:标签

docker-compose常用命令

//运行(-d:后台运行)
docker-compose -f "docker-compose.yml文件路径" up -d
//查看
docker-compose -f "docker-compose.yml文件路径" ps
//停止
docker-compose -f "docker-compose.yml文件路径" down

未完待续,边学变更…

参考资料
Docker命令大全
Docker Dockerfile
Docker Compose
docker镜像的制作(超详细)、docker镜像结构原理、镜像的分享
docker快速部署java+nginx+mysql运行环境

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MR_Bone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值