Docker:Docker基础

Docker

Docker简介

在大型项目部署时,会出现依赖关系复杂容易出现兼容性等问题

同时开发,测试和生产的环境也存在差异

Docker解决依赖兼容问题

将应用的Libs函数库,Deps依赖,配置和应用一起打包
将每个应用放到一个隔离容器中去运行,避免互相干扰

Docker解决操作系统环境差异

将用户程序所需要的系统函数库一起打包

在不同操作系统运行时直接基于打包的函数库进行运行

Docker和虚拟机的区别

虚拟机:

在操作系统中模拟硬件设备,在这些硬件设备上运行另一个操作系统

体积大,启动速度满,性能差

Docker:

封装函数库,没有模拟完整的操作系统

是一种容器技术,在用户空间内以分离的进程运行

体积小,启动速度快,性能好

Docker架构

镜像(image)

Docker打包的应用程序及其依赖的函数库,环境,配置文件等

容器(container)

镜像运行后形成的进程,对外不可见

Docker:

一个CS架构的程序,由两部分组成

服务端(server):Docker守护进程,负责处理Docker指令,管理镜像,容器等.

DockerHub

装应用镜像的服务器,可以在这些平台上对Docker镜像进行下载

Docker的基本操作

镜像操作

镜像名称一般分为两个部分:repository:tag

未指定tag时,默认为latest,代表最新版本镜像

常见镜像操作命令
docker 复制代码
docker push
//推送镜像到服务器
docker pull
//从服务器拉取镜像
docker build
//构建镜像
docker images
//查看镜像
docker rmi
//删除镜像
docker save
//保存镜像为一个压缩包
docker load
//加载压缩包为镜像

容器操作

容器的三个状态

运行:进程正常运行

暂停:进程暂停,CPU不再运行,并不释放内存

停止:进程终止,回收进程占用的内存,CPU等资源

容器的常用命令
docker 复制代码
docker run
--name 给容器起名字
-p 将宿主机端口和容器端口做映射
-d 后台运行容器
-v 挂载文件或目录到容器中
挂载目录耦合度高但是容易查看
挂载数据卷耦合度低但是不容易查看
最后为镜像名称
//创建并运行一个容器,处于运行状态
docker pause
//让一个运行的容器暂停
docker unpause
//让一个容器从暂停状态恢复运行
docker stop
//停止一个容器
docker start
//让一个停止的容器再次运行
docker rm
//删除一个容器
docker ps -a 
//查看所有的容器
docker exec -it mn bash
-it 创建标准输入输出终端,允许我们与容器做交互
mn 进入容器的名称
bash 进入容器后执行的命令,bash是一个指令交互命令
//进入容器执行命令
docker logs
//查看容器运行日志
docker ps
-a 包括没有运行的容器
//查看所有运行的容器和状态
容器内修改文件

容器内没有vim/vi 命令,无法直接进行修改

使用sed命令工具进行修改

-i 在原始文件中进行修改

使用数据卷进行挂载

因为修改容器内部文件困难,所以我们需要使用数据卷挂载的方式进行文件修改

数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录
docker 复制代码
docker volume [command]
command:
create //创建一个volume
inspect //显示一个或多个volume的信息
ls //列出所有的volume
prune //删除未使用的volume
rm //删除一个或多个指定的volume

Dockerfile自定义镜像

将自己的代码制作为镜像文件

镜像的组成结构

入口(Entrypoint)

镜像运行入口,一般是程序启动的脚本和参数

层(layer)

在BaseImage基础上添加安装包,依赖,配置等,每次操作都形成新的一层

基础镜像(BaseImage)

应用依赖的系统函数库,环境,配置,文件等

镜像就是在系统函数库和运行环境的基础上添加应用程序,配置文件,依赖文件等组合编写脚本进行打包在一起形成的文件

构建镜像就是实现上述打包的过程

Dockerfile语法

docker 复制代码
docker build -t javaweb:1.0 .
	说明:
		1.docker build 表示构建
		2.-t:t的全称是tag表示版本
		3.javaweb:1.0 :镜像组成格式  repository:版本  javaweb表示repository,属于标识符,随便定义
		4. 在版本即1.0后面一定加空格然后书写点,点表示在当前目录执行Dockerfile文件
//生成镜像文件


FROM
FROM centos:6
//指定基础镜像
ENV
ENV key value
//设置环境变量
COPY
COPY ./mysql-5.7.rpm/tmp
//拷贝本地文件到镜像的指定目录
RUN
RUN yum install gcc
//执行Linux的shell命令,一般是安装过程的命令
EXPOSE
EXPOSE 8080
//指定容器运行时监听的端口
ENTRYPOINT
ENTRYPOINT java -jar aa.jar
//镜像中应用的启动命令,容器运行时调用

Docker-Compose

基于compose文件帮我们快速部署分布式应用

无需手动一个个创建容器

Compose文件
docker-compose 复制代码
version: "3.8"
 services:
  mysql:
    image: mysql:5.7.25
    environment:
     MYSQL_ROOT_PASSWORD: 123 
    volumes:
     - "/tmp/mysql/data:/var/lib/mysql"
  web:
    build: .
    ports:
     - "8090:8090"

描述了一个包含两个容器

mysql:5.7.25

web临时容器,映射端口8090

的项目

Docker镜像仓库

公共仓库

Docker官方的Docker Hub

网易云镜像服务

DaoCloud镜像服务

阿里云镜像服务等等

私有仓库

用户在本地搭建私有Docker Registry

采用私有Docker Registry在实际开发中比较常见,安全性比较高

命令总结

docker 复制代码
docker服务相关命令
systemctl start docker
systemctl stop docker
systemctl enable docker
systemctl disable docker

镜像相关的命令
docker pull xxx   #拉取镜像
docker images   #查看本地的镜像
docker rmi xxx  #删除镜像
docker save -o [保存的目标文件名称] [镜像名称] #把镜像打包
docker load -i xxx #加载tar包中的镜像
dokcer build -t xxx:[tag] .  #构建自定义镜像

容器相关的命令
docker ps  #查看当前运行的容器
docker ps -a  #查看所有的容器,包括以停止的容器
docker run  #创建并启动容器
docker start xxx #启动容器
docker stop xxx #停止容器
docker rm xxx  #删除停止的容器
docker rm -f xxx  #强制删除容器,删除运行中的容器
docker logs -f xxx #查看启动日志

数据卷相关的命令
docker volume list  #查看数据卷列表
docker volume create xxx  #创建新的数据卷
docker volume rm xxx  #删除数据卷
docker volume prune  #清除一些没有用到的数据卷


#创建容器
docker run --name #容器名称# -p #宿主机端口#:#容器内端口# -v #数据卷#:#容器内部位置# -d -e #容器内的环境变量# --restart=always(开机自启) #镜像名称#:#tag# #设置一些参数#
相关推荐
是小崔啊1 小时前
开源轮子 - EasyExcel02(深入实践)
java·开源·excel
myNameGL2 小时前
linux安装idea
java·ide·intellij-idea
青春男大2 小时前
java栈--数据结构
java·开发语言·数据结构·学习·eclipse
HaiFan.2 小时前
SpringBoot 事务
java·数据库·spring boot·sql·mysql
我要学编程(ಥ_ಥ)2 小时前
一文详解“二叉树中的深搜“在算法中的应用
java·数据结构·算法·leetcode·深度优先
music0ant3 小时前
Idea 添加tomcat 并发布到tomcat
java·tomcat·intellij-idea
cdg==吃蛋糕3 小时前
docker代理配置
docker·容器·eureka
计算机徐师兄3 小时前
Java基于SSM框架的无中介租房系统小程序【附源码、文档】
java·微信小程序·小程序·无中介租房系统小程序·java无中介租房系统小程序·无中介租房微信小程序
源码哥_博纳软云3 小时前
JAVA智慧养老养老护理帮忙代办陪诊陪护小程序APP源码
java·开发语言·微信小程序·小程序·微信公众平台
web135085886353 小时前
使用docker compose安装gitlab
docker·容器·gitlab