什么是Docker?
-
定义:是一个与打包软件及软件相关环境的一个容器工具
-
作用:
-
解决软件在不同操作系统中的兼容性问题
-
-
与虚拟机的区别
-
docker启动快
-
docker体积小
-
docker共享机器资源,能合理利用资源
-
-
Docker 架构:是CS架构
-
镜像:是软件及软件环境的压缩包
-
容器:是软件运行后的一个进程
-
Server:服务端
-
Client:客户端
-
{ "builder": { "gc": { "defaultKeepStorage": "20GB", "enabled": true } }, "debug": false, "experimental": false, "features": { "buildkit": true }, "insecure-registries": [ "localhost:5000" ], "registry-mirrors": [ "https://registry.docker-cn.com", "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn" ] }
守护进程相关命令
-
systemctl stop docker
-
systemctl start docker
-
systemctl restart docker
-
systemctl enable docker 开启自起
-
systemctl disable docker 开启不自起
镜像与容器的区别:
-
镜像是一个软件运行前的状态,容器是运行后的状态
-
镜像是只读不可以写,容器可以读可以写
镜像相关的操作命令【精通】
-
docker images 查看本地有那些镜像
-
docker pull 下载一个远程镜像到本地
-
docker search 搜索镜像
-
docker rmi 删除镜像
-
docker rmi 镜像名称:版本
-
docker rmi 镜像ID
-
docker rmi 镜像ID缩写
-
-
docker save 把镜像打成一个压缩包
docker save java:8 -o java.zip
-
docker load 导入一个压缩包成镜像
docker load -i java.zip
-
docker build 构建一个镜像
docker build -f HelloDockerFile -t heima42:1.0 .
docker 容器相关的命令【精通】
-
docker ps 查看运行中的容器列表
-
docker ps -a 查看所有状态的容器列表
-
docker rm 删除
-
docker rm 容器名称
-
docker rm 容器ID
-
docker rm 容器ID缩写
-
-
docker rm -f 强制删除,能删除运行中的容器
-
docker stop 停止容器
-
docker start 启动容器
-
docker logs -f 实时查看日志
-
docker exec -it 容器名称 bash 退出直接输入 exit
docker run 常用参数【精通】
-
--name 设置名称
-
-p 设置端口映射
-p 808:80 -p 809:443 nginx 映射多个端口
-
-d 后台运行
-
-v 给容器添加一个数据卷
-
-e 设置容器内部的环境变量
常用软件的docker run【精通】
-
nginx
docker run -d --name nginx42 -p 808:80 -p 809:443 nginx docker run -d --name nginx42 -p 808:80 -p 809:443 -v d:/html:/usr/share/nginx/html nginx
-
redis
docker run -d --name redis42 -p 6379:6379 redis
-
mysql
docker run -d --name mysql42 -p 3307:3306 -v E:\教学资料\2022-最新\06-服务框架+实战\01-服务框架\day03-Docker\资料\42\data:/var/lib/mysql -v E:\教学资料\2022-最新\06-服务框架+实战\01-服务框架\day03-Docker\资料\42\conf\hmy.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.25
常用Linux指令
-
查找文件中的文本并替换
sed -i 's#Welcome to nginx#欢迎您#g' index.html sed -i 's#<head>#<head><meta charset="utf-8">#g' index.html
什么是数据卷
-
定义:就是宿主机上的一个特殊文件夹
-
种类:
-
内置目录数据卷 ,使用docker volume 操作的就是内置
-
自定义目录数据卷 -v 直接指定的绝对路径是自定方式
-
-
作用
-
数据存储到宿主机上,防止丢失
-
用于容器之间进行数据共享
-
-
常用命令
-
create 创建一个volume
inspect 显示一个或多个volume的信息
ls 列出所有的volume
prune 清理本地未使用的数据卷
rm 删除一个或多个指定的volume
-
-
案例:
-
挂载nginx容器的html文件到宿主机的d:/html
-
什么是Dockerfile【精通】
-
定义:用于制作一个新镜像文件的脚本语言
-
镜像文件的结构:镜像是有多层的文件叠加而成,一个镜像文件必定有有一个最底层的基础镜像和最顶层的入口
-
基础镜像:提供系统级的函数库和配置,一般是有docker官网提供,我们直接用
-
顶层入口:镜像中包含软件的启动命令
-
-
dockerfile的常用关键字
指令 说明 示例 FROM 指定基础镜像 FROM centos:7 ENV 设置环境变量,可在后面指令使用 ENV key value COPY 拷贝本地文件到镜像的指定目录 COPY ./mysql-5.7.rpm /tmp RUN 执行Linux的shell命令,一般是安装过程的命令 RUN yum install vi EXPOSE 指定容器运行时监听的端口,是给镜像使用者看的 EXPOSE 8080 ENTRYPOINT 镜像中应用的顶层入口启动命令,容器运行时调用 ENTRYPOINT java -jar xx.jar -
dockerfile相关语法
-
dockerfile使用文本文件来进行源码的存储,文本文件一般不写后缀名
-
文件格式:
-
每行只写一条镜像命令
-
每行必须使用dockerfile关键字开头
-
dockerfile的关键字必须全部大写
-
dockerfile文件中的第一行必须指定基础镜像,既第一行必须是FROM
-
dockerfile文件中最后一行必须是指定程序的启动入口,既必须是ENTRYPOINT
-
-
SpringBoot项目的jar制作一个镜像【精通】
-
指定基础镜像
-
安装jdk
-
拷贝jdk
-
解压jdk
-
配置环境变量
-
JAVA_HOME
-
PATH
-
-
-
拷贝部署的程序
-
指定启动入口
FROM centos:7 RUN mkdir /heima42 COPY ./jdk8.tar.gz /heima42 RUN cd /heima42 && mkdir jdk8 RUN cd /heima42 && tar -xf ./jdk8.tar.gz && mv ./jdk1.8.0_144 ./java8 ENV JAVA_HOME=/heima42/java8 ENV PATH=$PATH:$JAVA_HOME/bin COPY ./docker-demo.jar /heima42 ENTRYPOINT java -jar /heima42/docker-demo.jar
docker build -f HelloDockerFile -t heima42:1.0 .
什么是Docker Compose【精通】
-
定义:就是用于批量创建容器、停止容器、删除容器等批量操作容器的软件,是一个容器编排工具
-
作用:简化对大量容器的操作成本
-
Docker Compose实际就是一个yml文件,格式如下:
-
第一行始终是version
-
第一行始终是services
-
-
常用命令
-
docker-compose up -d 创建容器并运行
-
docker-compose start 运行容器
-
docker-compose stop 停止容器
-
docker-compose down 停止并删除容器
-
新需求
新项目需要大家一些环境,mysql ngxin redis
version: "3.0" services: heima42-nginx: container_name: "heima42-nginx" ports: - 808:80 - 809:443 volumes: - d:/html:/usr/share/nginx/html image: nginx heima42-redis: container_name: "heima42-redis" ports: - 6379:6379 image: redis heima42-mysql: container_name: "heima42-mysql" ports: - 3307:3306 volumes: - E:\教学资料\2022-最新\06-服务框架+实战\01-服务框架\day03-Docker\资料\42\data:/var/lib/mysql - E:\教学资料\2022-最新\06-服务框架+实战\01-服务框架\day03-Docker\资料\42\conf\hmy.cnf:/etc/mysql/my.cnf environment: - MYSQL_ROOT_PASSWORD=123456 image: mysql:5.7.25
如何搭建私服【熟练】
-
拉取 registry镜像
-
运行
docker run -d -p 5000:5000 registry
-
配置docker的私服地址
"insecure-registries": [ "localhost:5000" ]
-
上传
-
声明镜像上传的私服地址
docker tag redis localhost:5000/r1:1.0
-
上传
docker push localhost:5000/r1:1.0
-
-
下载
docker pull localhost:5000/r1:1.0