Docker基础【windows环境】

课程内容来自尚硅谷3小时速通Docker教程

1. Docker简介

Docker 通过 Docker Hub 实现一行命令安装应用(镜像)【Nginx,Mysql等】,避免繁琐的部署操作。同时通过轻量级(相对于虚拟机)的容器化的思想(容器共享内核),将每个应用所需的环境进行隔离,使得同一台服务器上部署管理多个环境变得更为简便。

简单来说,可以把 Docker 是一个大容器,里边可以根据需求下载各类镜像,再根据需要自定义镜像并创建出一个个小容器,容器环境是最终暴露给外部的环境。

image-20241129100322967

2. Windows环境部署docker

  1. 确保Windows为专业版(否则无 Hyper-V 选项)且做如下设置

    image-20241114160341845 image-20241114160435595 image-20241114160519278 image-20241114160550647 image-20241114160614875
  2. docker安装

    docker下载地址【Windows的x86架构对应AMD64】

    第一次启动时要使用管理员身份!

3. 入门案例

拉取nginx镜像,自定义带有 nginx 镜像的容器名为 mynginx ,启动 nginx 服务,并成功访问欢迎界面

# 拉取 nginx 镜像
docker pull nginx 
# 后台启动服务,自定义镜像名为mynginx,完成容器内部端口80到实际端口88的映射
docker run -d --name mynginx -p 80:88 nginx
image-20241129142619651 image-20241129142503305

4. 镜像相关命令

  • 查询是否有 nginx 镜像

    docker search nginx 
    
    image-20241129102153929
  • 下载 nginx 镜像

    无法科学上网的需要配置国内下载仓库,具体看其他帖子

    docker pull nginx 
    
    image-20241129102539380

    如果需要下载指定版本的镜像,需要去 Docker Hub 查询

    image-20241129103150433

    找到需要版本后,可以用框框处语句进行下载

    image-20241129103249967
  • 查询当前所拥有的镜像

    docker images
    
    image-20241129102642927
  • 删除 nginx 镜像

    # 需要输入镜像完整名(也可以使用Image ID删除)
    docker rmi nginx:latest 
    
  • 保存镜像

    保存的镜像可像正常文件一样传输,用户只需要拿到镜像加载即可复刻镜像环境

    # 将指定容器环境(此处是mynginx)保存为镜像(mynginx:1.0 ,1.0是标签)
    docker commit -m "update xxx" mynginx mynginx:1.0 
    # 将mynginx:1.0镜像保存为压缩包
    docker save -o mynginx.tar mynginx:1.0 
    
  • 加载镜像

    用于复刻封装好的镜像环境

    # 加载mynginx.tar封装的镜像
    docker load -i mynginx.tar
    

    加载完毕后使用 run 语句即可将其复刻为容器实例

5. 镜像推送社区

image-20241129150709437
  1. 准备好 Docker Hub 账号并在终端登录

    image-20241129152327720
    docker login
    
    image-20241129152534333
  2. 复制镜像并使用指定名称,格式为:用户名/镜像名

    docker tag mynginx:1.0 excellentlong/mynginx:v1.0
    

    image-20241129153002648

  3. 推送镜像到指定仓库

    # 确保账号为excellentlong且存在mynginx仓库
    docker push excellentlong/mynginx:v1.0
    
    image-20241129155310058 image-20241129155550613

    后续别人需要使用只需要搜索使用 pull 命令即可拉取到本地

6. 容器相关命令

  • 运行 nginx:latest 镜像

    # 创建并启用一个新的容器实例
    docker run nginx:latest
    # 后台启动服务,自定义镜像名为mynginx,完成容器内部端口80到实际端口88的映射
    docker run -d --name mynginx -p 88:80 nginx
    

    容器内部的端口是独立的(此处的80),暴露在外的端口是唯一的(此处的88)

    image-20241129141407555
  • 查看应用

    # 查看运行中的容器
    docker ps 
    # 查看所有容器
    docker ps -a
    
    image-20241129112828575
  • 启动

    # 启用一个已经存在的容器(容器ID可以不写全,只要足够区分即可)
    docker start 容器ID/容器NAMES
    
  • 停止

    docker stop 容器ID/容器NAMES
    
  • 重启

    docker restart 容器ID/容器NAMES
    
  • 状态

    docker stats 容器ID/容器NAMES
    
  • 日志

    docker logs 容器ID/容器NAMES
    
  • 删除

    # f参数是强制删除,即不关闭容器的情况下也能删除
    docker rm [-f] 容器ID/容器NAMES
    
  • 进入某个容器的bash环境

    # 进入app01容器的bash环境
    docker exec -it app01 bash
    

7. 文件挂载

由于docker内部容器非常轻量级,因此管理编辑容器内部文件并不方便,为此我们可以在启动容器时使用文件挂载的方式将内部容器与外部环境进行关联,从而只需要在外部进行操作即可完成对内部容器的修改。

# 创建并启动app01容器,同时将容器内外路径进行关联
docker run -d -p 80:80 -v 外部目录路径:内部目录路径 --name app01 nginx

使用👆这一方式进行挂载是以外部环境为准,即挂载的外部目录为空,则对应的内部环境也会被置空

另外一种挂载方式是卷映射,它以内部环境为准,同样是使用 -v 进行指定,如下👇

# 使用卷挂载的方式,docker会自动分配映射目录
# 卷默认挂载在/var/lib/docker/volumes/<卷名>/_data下,windows未知
docker run -d -p 99:80 -v ngconf:/etc/nginx --name app02 nginx

卷常见操作

# 查看
docker volume ls
# 手动创建卷xxx
docker volume create xxx
# 查看卷xxx挂载位置
docker volume inspect xxx

8. 自定义网络

Docker 内部有专属网络环境,容器内部可通过此内部网相互访问(此时使用的端口是容器内部端口),默认的网络环境是 docker0

# 查看容器app01的内部网络
docker container inspect app01
image-20241202094547295

进入 app02 的 bash 模式,即可通过内部 IP:端口号 直接访问

image-20241202095145407

IP地址由于种种原因会容易发生变化,我们希望可以通过容器名称完成访问(类似域名),而在 docker0 网络环境下不支持这种方式,因此引入自定义网络机制

# 自定义网络mynetwork
docker network create mynetwork
# 查询存在的网络
docker network ls
image-20241202100900651
# 在run时加入network关键字即可加入自定义网络
docker run -d --name app01 -p 88:80 --network mynetwork nginx
docker run -d --name app02 -p 99:80 --network mynetwork nginx

app01 访问 app02 的 nginx 界面

# bash环境下直接使用容器名:端口号访问
curl http://app02:80

7. 批量操作容器

通过 compose.yaml 文件可以批量操作容器,省去繁琐的多次参数配置,且在迁移时依旧可以执行

实验:使用 compose.yaml 实现如下命令

# 创建blog自定义网络
docker network create blog
# 启动mysql
docker run -d -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSOL_DATABASE=wordpress \
-v mysql-data:/var/lib/mysql \
-v D:\Program\Docker\Mount:/etc/mysql/conf.d \
--restart always --name mysql \
--network blog \
mysql:8.0
# 启动wordpress
docker run -d-p 8080:80 \
-e WORDPRESS_DB_HOST=mysql \
-e WORDPRESS_DB_USER=root \
-e WORDPRESS_DB_PASSWORD=123456 \
-e WORDPRESS_DB_NAME=wordpress \
-v wordpress:/var/www/html \
--restart always --name wordpress-app \
--network blog \
wordpress:latest

顶级元素:compose.yaml 中第一层的元素

name,service,networks,volumes,conifgs(少用),secrets(少用)

name: myblog
services: mysql: # 自定义容器名称container_name: mysql# 拉取mysql最新镜像image: mysqlports:# 内外端口映射- "3307:3306"environment:# 设置初始化密码MYSQL_ROOT_PASSWORD: 123456# 设置数据库名称MYSOL_DATABASE: wordpress volumes:# 将/var/lib/mysql文件夹挂载到卷mysql-data- mysql-data:/var/lib/mysql# /etc/mysql/conf.d目录关联至D:\Program\Docker\Mount- D:\Program\Docker\Mount:/etc/mysql/conf.d# 设置开机自动启动restart: always# 划分至blog自定义网络networks:- blogwordpress:image: wordpressports:- "8086:80"environment:WORDPRESS_DB_HOST: mysqlWORDPRESS_DB_USER: rootWORDPRESS_DB_PASSWORD: 123456WORDPRESS_DB_NAME: wordpressvolumes:- wordpress:/var/www/htmlrestart: alwaysnetworks:- blog# wordpress要在mysql之后启动depends_on: - mysql
# 用到的卷名需要声明
volumes:mysql-data:wordpress:
# 用到的自定义网络也需要声明
networks:blog:

各顶级元素更详细写法可参考:https://docs.docker.com/reference/compose-file/

# -f指定yaml文件名,默认是compose.yaml,-d是后台启动
# 如果需要使用修改后的配置,只需要再次执行此语句即可(这样会销毁旧容器且创建新容器)
docker compose -f compose.yaml up -d
image-20241203162354683

若能成功访问此界面,说明部署启动成功

image-20241204113748519
# 下线容器,即移除创建的容器
docker compose down
# 移除容器时把相关镜像和卷也移除
docker compose down --rmi all -v
image-20241204140313678
# 启动compose.yaml中指定名字的容器,默认定位到yaml中所有容器
docker compose start x1 x2
# 停止compose.yaml中指定名字的容器
docker compose stop x1 x2

9. 自定义镜像

当我们需要将本地项目部署至docker中时,需要自定义镜像,后续别人只要拥有此镜像即可运行项目

自定义镜像关键是使用 Dockerfile 文件指定所需环境,暴露端口,启动命令等信息,常见语句如下:

image-20241204162949668

实验:在 docker 部署 SpringBootDemo.jar 项目

SpringBootDemo.jar 下载地址如下👇

通过百度网盘分享的文件:SpringBootDemo.jar 链接:https://pan.baidu.com/s/1vxxQdOTdXrasuU_cHGAAAg 提取码:alib

  1. 编辑dockerfile文件

    # 依赖jdk17镜像
    FROM meddream/jdk17
    # 指定作者名字
    LABEL author=zzzz
    # 将当前目录下SpringBootDemo.jar复制到镜像根目录下【一个镜像可以理解为一个Linux系统】,并重命名为app.jar
    COPY SpringBootDemo.jar /app.jar
    # 服务器启动指令
    ENTRYPOINT ["java","-jar","/app.jar"]
    # 声明访问端口
    EXPOSE 8080
    
  2. 构建镜像

    # 使用编辑好的Dockerfile构建镜像,镜像名称为myjavaapp,版本号是v1.0,最后的.代表需要构建镜像的项目在当前目录下
    # 如果构建失败,可以先尝试使用pull将依赖镜像拉取到本地,相关镜像信息可在Docker Hub寻找
    docker build -f Dockerfile -t myjavaapp:v1.0 .
    
    image-20241204172411845
  3. 创建镜像对应容器并测试

    docker run -d -p 8888:8080 myjavaapp:v1.0
    
    image-20241204172606356

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/63450.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flinkSql 将流和表的互相转换

流——>表 方式一 方式二 方式一&#xff1a;写sql DataStreamSource<String> source env.socketTextStream("localhost", 8881); // 表名&#xff0c;流&#xff0c;字段名称 tableEnv.createTemporaryView("t_1",source&#xff0c;$("…

core Webapi jwt 认证

core cookie 验证 Web API Jwt 》》》》用户信息 namespace WebAPI001.Coms {public class Account{public string UserName { get; set; }public string UserPassword { get; set; }public string UserRole { get; set; }} }》》》获取jwt类 using Microsoft.AspNetCore.Mvc…

运输层4——TCP格式(重点!)

目录 一、TCP报文段格式 二、最大报文长度 MSS 一、TCP报文段格式 长度&#xff1a;前20个字节固定 后4n个字节&#xff08;报文段格式不固定&#xff09; 1、源端和目的端&#xff1a;各2个字节 作用&#xff1a;指明TCP链接的发送 2、序号 4字节 作用&#xff1…

Android显示系统(03)- OpenGL ES - GLSurfaceView的使用

Android显示系统&#xff08;02&#xff09;- OpenGL ES - 概述 Android显示系统&#xff08;03&#xff09;- OpenGL ES - GLSurfaceView的使用 Android显示系统&#xff08;04&#xff09;- OpenGL ES - Shader绘制三角形 Android显示系统&#xff08;05&#xff09;- OpenGL…

关于睡懒觉

我们经常听到一个词&#xff1a;睡懒觉。 我认为&#xff0c;睡懒觉这个词&#xff0c;是错误的。 人&#xff0c;是需要睡眠的&#xff0c;睡不够&#xff0c;就不会醒。睡够了&#xff0c;自然会醒&#xff0c;也不想继续睡。不信你试试&#xff0c;睡够了&#xff0c;你…

kafka进阶_4.kafka扩展

文章目录 一、Controller选举二、Kafka集成2.1、大数据应用场景2.1.1、Flume集成2.1.2、Spark集成2.1.3、Flink集成 2.2、Java应用场景(SpringBoot集成) 三、Kafka常见问题3.1、Kafka都有哪些组件&#xff1f;3.2、分区副本AR, ISR, OSR的含义&#xff1f;3.3、Producer 消息重…

面试官:MongoDB是什么,它有什么特性与使用场景?

哈喽&#xff01;大家好&#xff0c;我是小奇&#xff0c;一个专给面试官添堵的撑序员 小奇打算以轻松幽默的对话方式来分享一些技术&#xff0c;如果你觉得通过小奇的文章学到了东西&#xff0c;那就给小奇一个赞吧 文章持续更新&#xff0c;可以微信搜索【小奇JAVA面试】第一…

【Spring项目】表白墙,留言板项目的实现

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;项目实现准备 1&#xff1a;需求 2&#xff1a;准备工作 &#xff08;1&#xff09;…

【前端】React_Next.js

定期更新&#xff0c;建议关注、收藏&#xff01; 安装 要使用react的框架&#xff0c;都应当安装node.js conda install nodejs选择Next.js 并创建项目 npx create-next-applatest可以看到目录结构生成如下 作为网页中的一个子路由 想让其嵌入已经写好的项目中&#xf…

基于pytorch的深度学习基础4——损失函数和优化器

四&#xff0e;损失函数和优化器 4.1 均值初始化 为减轻梯度消失和梯度爆炸&#xff0c;选择合适的权重初值。 十种初始化方法 Initialization Methods 1. Xavie r均匀分布 2. Xavie r正态分布 4. Kaiming正态分布 5. 均匀分布 6. 正态分布 7. 常数分布 8. 正交矩阵初…

物品识别 树莓派 5 YOLO v5 v8 v10 11 计算机视觉

0. 要实现的效果 让树莓派可以识别身边的一些物品&#xff0c;比如电脑&#xff0c;鼠标&#xff0c;键盘&#xff0c;杯子&#xff0c;行李箱&#xff0c;双肩包&#xff0c;床&#xff0c;椅子等 1. 硬件设备 树莓派 5 raspberrypi.com/products/raspberry-pi-5/树莓派官方摄…

爬取豆瓣电影的数据-----爬虫实战案例(爬取文字)

爬取豆瓣电影的数据 首先打开"豆瓣电影TOP250"网页&#xff1a; 右击鼠标&#xff0c;找到检查点击&#xff0c;然后再点击网络向上拉动&#xff0c;找到名称栏中的第一个&#xff0c;点击打开可以在标头里看到请求URL和请求方式&#xff0c;复制URL&#xff08;需…

MySQL 8.0 新特性汇总

文章目录 前言1. 运维管理 1.1 可持久化变量1.2 管理员端口1.3 资源组1.4 数据库粒度只读1.5 show processlist 实现方式1.6 加速索引创建速度1.7 控制连接的内存使用量1.8 克隆插件1.9 mysqldump 新增参数1.10 慢日志增强1.11 快速加列1.12 InnoDB 隐藏主键1.13 Redo 配置1.14…

使用PHPUnit使用本地调试代替远程调试,快速提高开发效率

Laravel 是一个在 Linux 环境下表现非常出色的 PHP 框架&#xff0c;但它在 Windows 环境下可能会遇到一些兼容性和配置问题。为了调试或没试的方便可以在 Windows 环境下进行 Laravel PHPUnit进行本地调试和测试。 本地主要针对断点调试效果非常高效。 在 Laravel 中&#x…

【BUG】VMware|vmrest正在运行此虚拟机,无法配置或删除快照

VMware版本&#xff1a;VMware 16 文章目录 省流版问题解决方案 详细解释版问题解决方案总结 省流版 问题 只读&#xff0c;因为vmrest正在运行虚拟机。 解决方案 参考&#xff1a;虚拟机设置&#xff0c;只读&#xff0c;因为vmrest正在运行此虚拟机。有谁遇到过这种问题吗&…

HTML表单-第二部分

HTML表单 表单元素是允许用户在表单中输入内容&#xff0c;比如&#xff1a;文本域&#xff0c;下拉列表&#xff0c;单选框&#xff0c;复选框等等‘ 使用<from>标签创建 例如 <from> . input . </from> HTML表单-输入元素 <input>标签创建&#xff…

声音克隆GPT-SoVITS

作者&#xff1a;吴业亮 博客&#xff1a;wuyeliang.blog.csdn.net 一、原理介绍 GPT-SoVITS&#xff0c;作为一款结合了GPT&#xff08;生成预训练模型&#xff09;和SoVITS&#xff08;基于变分信息瓶颈技术的歌声转换&#xff09;的创新工具&#xff0c;正在声音克隆领域掀…

008-MAC地址表配置

MAC地址表配置 MAC地址表中对于接口的相关配置&#xff0c;目前只能在二层以太网端口、二层聚合接口等二层接口上进行。本章节内容只涉及单播的静态、动态、黑洞MAC地址表项的配置。有关静态组播MAC地址表项的相关介绍和配置内容&#xff0c;请参见“IP组播配置指导”中的“IGM…

2024-10-13-B fd 重定向 缓冲区

1 一切皆文件 1.1 虚拟文件系统 在系统层面&#xff0c;做了一层软件的封装&#xff0c;struct file 里有操作表&#xff08;即函数指针的集合&#xff09;&#xff0c;可以调用底层的读写方法。虚拟文件系统&#xff08;VFS&#xff09;是一种神奇的抽象&#xff0c;它使得…

Metasploit使用

最近在学Metasploit&#xff0c;Metasploit是一个免费的、可下载的渗透测试框架&#xff0c;通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击&#xff0c;是一个集成了渗透测试全流程的渗透工具。 图一 模块&#xff1a;模块组织按照不同的用途分为7种类型的模块 &am…