首页 > 其他分享 >Docker 学习笔记

Docker 学习笔记

时间:2024-10-15 11:59:39浏览次数:1  
标签:容器 network 笔记 学习 nginx 镜像 Docker docker

目录

快速入门:

镜像与容器:

​ 当利用Docker安装应用时,Docker会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。Docker会在运行镜像时创建一个隔离环境,称为容器(container)
​ 镜像仓库:存储和管理镜像的平台,Docker官方维护的公共仓库:Docker Hub

docker run 命令:

image-20241014164339570

选项详解:

选项 描述 示例
-d 容器后台运行 docker run -d \
-- name 名称 为容器命名 --name nginx \
-e 环境变量 环境变量(查阅官方文档) ——
-p 宿主机端口:容器内端口 宿主机端口映射到容器内端口 -p 80:80 \
Repository(镜像名):TAG(版本号) 镜像名称结构 nginx

Docker基础:

基础命令:

image-20241014192823646

官方文档:Docker 命令官方文档

演示:

# 拉取Nginx镜像,创建并运行Nginx容器
1.在DockerHub中搜索Nginx镜像,查看镜像的名称
https://hub.docker.com/_/nginx
2.拉取Nginx镜像(注意配置镜像加速)
docker pull nginx
# 保存镜像到本地文件
docker save [-o 文件路径] 镜像名 [镜像:版本]
docker save -o nginx.tar nginx:latest
3.查看本地镜像列表
docker images
4.创建并运行Nginx容器
docker run -d --name nginx -p 80:80 nginx
5.查看容器信息
docker ps [-a]
-a 查看所有容器信息(包括未启动容器)
# 查看指定容器日志
docker logs [-f] nginx
-f 持续跟踪查看
6.停止容器
docker stop nginx
7.重新启动容器
docker start nginx
8.进入Nginx容器
docker exec -it nginx bash
9.删除容器
docker rm 容器名 -f
-f 强制删除(否则需要先将容器停止运行再删除)
# 加载本地镜像
docker load [-i 镜像名]
docker load -i nginx.tar

数据卷:

数据卷(volume)是虚拟目录,是容器内目录宿主机目录之间映射的桥梁,建立数据卷即可利用宿主机中的高级(Linux)命令同步修改容器目录中的对应文件以及部署静态资源

image-20241014213631862
命令 功能 文档地址
docker volume create 创建数据卷 docker volume create
docker volume ls 查看所有数据卷 docker volume ls
docker volume rm 删除指定数据卷 docker volume rm
docker volume inspect 查看某个数据卷的详情 docker volume inspect
docker volume prune 清除数据卷 docker volume prune

案例1-利用Nginx容器部署静态资源:

创建Nginx容器,修改Nginx容器内的 html目录 下的 index.html文件,查看变化
将静态资源部署到Nginx的 html目录

# 挂载Nginx容器内的html目录下的index.html文件
# 注意挂载数据卷必须在容器创建时便挂载,否则只能将原有容器删除再执行 docker run命令
语法: docker run -v 数据卷名称:容器内目录
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
image-20241014222910944

案例2-MySQL容器数据挂载:

•查看MySQL容器自带数据卷挂载
•基于宿主机目录实现MySQL数据目录、配置文件、初始化脚本的挂载(查阅官方镜像文档)
①挂载 /root/mysql/data 到容器内的 /var/lib/mysql目录
②挂载 /root/mysql/conf 到容器内的 /etc/mysql/conf.d目录(携带配置文件)
③挂载 /root/mysql/init 到容器内的 /docker-entrypoint-initdb.d目录(携带SQL脚本)

# 将MySQL容器内指定目录挂载到本地指定目录
语法: docker run -v 本地目录:容器内目录
# 注意区分数据卷挂载与本地目录挂载
docker run -v mysql:/var/lib/mysql   将识别为数据卷(mysql),挂载路径默认:/var/lib/docker/volumes...
docker run -v ./mysql:/var/lib/mysql 将指定挂载路径为当前目录下的mysql目录

自定义镜像:

简介:

​ 构建镜像的过程其实就是把应用程序、程序运行的系统函数库、运行配置等文件包打包的过程

image-20241015004417390

​ 将镜像分层打包便于组装与重构,提升代码的复用性,但是手动自定义镜像需要查询大量资料、打包各种压缩包,步骤较为繁琐,因此使用 Dockerfile 可以帮助构建镜像

image-20241015004613073

Dockerfile:

Dockerfile本质上为文本文件,其中包含众多指令(Instruction),用指令来说明要执行的操作来构建镜像。将来Docker可以根据Dockerfile协助构建镜像

指令 功能 示例
FROM 指定基础镜像 FROM centos:6
ENV 设置环境变量 ENV key value
COPY 拷贝本地文件到镜像的指定目录 COPY ./jre11.tar.gz /tmp
RUN 执行Linux命令(通常是安装过程的命令) RUN tar -zxvf /tmp/jre11.tar.gz && EXPORTS path=/tmp/jre11:$path
EXPOSE 指定容器运行时监听的端口 EXPOSE 8080
ENTRYPOINT 镜像应用的启动命令,容器运行时调用 ENTRYPOINT java -jar xx.jar

详情参考官网文档: https://docs.docker.com/engine/reference/builder

# 基于Ubuntu基础镜像利用Dockerfile描述Java镜像结构
# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录、容器内时区
ENV JAVA_DIR=/usr/local
# 拷贝JDK和Java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
# 安装JDK
RUN cd $JAVA_DIR \ && tar -xf ./jdk8.tar.gz \ && mv ./jdk1.8.0_144 ./java8
# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
# 入口,Java项目的启动命令
ENTRYPOINT ["java", "-jar", "/app.jar"]
-------------------------------------------------------------------------------------------------------------------
# 基于打包完毕的Java基础镜像构建自定义Java镜像
# 基础镜像
FROM openjdk:11.0-jre-buster
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

镜像构建:

​ Dockerfile文件编写完成后,利用 build命令 构建镜像

# build ———— 构建镜像
语法: docker build -t Repository:Tag Dockerfile所在目录
-t 即为镜像命名,格式:Repository:Tag,未指定Tag时默认为latest
Dockerfile文件通常与镜像位于同目录下,为此路径通常指定: .

# Java镜像构建演示
# 文件准备(jdk.tar、docker-demo.jar、Dockerfile)
# 拉取本地镜像
docker load -i jdk.tar
# 构建Java容器
cd demo/
docker build -t docker_java .
# 运行Java容器
docker run -d --name java_11.0 -p 8080:8080 docker_java
# 查看容器运行状态及运行日志
docker ps
docker logs -f java_11.0

网络:

​ 默认情况下,所有容器都是以Bridge方式的连接到Docker的虚拟网桥上,但是Docker的虚拟地址可能会随宿主机的关闭启动而修改,为此可以使用自定义网络来更加方便地访问服务器:

image-20241015105818456

​ 加入自定义网络的容器还可以通过容器名互相访问,Docker的网络操作命令如下:

指令 功能 文档地址
docker network create 网络名 创建网络 docker network create
docker network ls 查看所有网络 docker network ls
docker network rm 删除指定网络 docker network rm
docker network prune 清除未使用的网络 docker network prune
docker network connect 网络名 容器名 使指定容器连接加入某网络 docker network connect
docker network disconnect 使指定容器连接离开某网络 docker network disconnect
docker network inspect 查看网络详细信息 docker network inspect
# 创建自定义网络
docker network create tassel
# 使指定容器连接加入自定义网络
docker network connect tassel java_11.0
# 或在容器创建时即加入网络
docker run -d --name java_11.0 -p 8080:8080 --network tassel docker_java
# 查看网络连接情况
docker inspect java_11.0
# 进入docker_java容器检测同网桥互连
docker exec -it bash
ping 容器 (容器需先加入tassel网桥)

项目部署:

DockerCompose:

​ Docker Compose通过单独的 docker-compose.yml 模板文件(YAML 格式)来定义相关联的应用容器,帮助我们实现相互关联的Docker容器的快速部署

image-20241015115622471
# 命令格式
docker compose [OPTIONS] [COMMAND]
类型 参数或指令 功能
Options -f 指定compose文件的路径与名称
Options -p 指定project名称
Commands up 创建并启动所有service容器
Commands down 停止并移除所有容器、网络
Commands ps 列出所有启动的容器
Commands logs 查看指定容器的日志
Commands stop 停止容器
Commands start 启动容器
Commands restart 重启容器
Commands top 查看运行进程
Commands exec 指定运行容器中执行命令

标签:容器,network,笔记,学习,nginx,镜像,Docker,docker
From: https://www.cnblogs.com/code-yiyi/p/18467152

相关文章

  • python-黑马程序员 初学者笔记(持续更新10.15)
    序章:由于科研室鼓励我们发布csdn,因此我们将一起学习python,这是我的笔记给大家分享出来,这不适用于一点都不会的小白,如果你看过一次或者想要回顾一下python内容再或者你正学习pyhon,可以参考本片笔记,本文章的优势在于是初学者所写,可能对于我们来说有共鸣,比较详细,并且重要知识点都......
  • 【数据建模运营岗】相关知识点学习及整理简短篇
    1.数据建模基础概念1.1数据建模概述定义:数据建模是将现实业务问题转化为数据结构或模型,便于存储、管理和分析。常用方法包括实体-关系模型(ER模型)和维度建模(如星型模型、雪花模型)。目标:优化数据存储和查询,支持业务运作与决策分析。ER模型:核心概念:以实体及其关系为核心,......
  • 复习深度学习过程中网络资料整理
    神经网络名词缩写及中英文对照https://blog.csdn.net/counte_rking/article/details/78864795UFLDL-UnsupervisedFeatureLearningandDeepLearning(无监督特征学习与深度学习)CNN-ConvolutionalNeuralNetwork(卷积神经网络)FCN-FullyConvolutionalNetworks......
  • Docker部署最新版本EMQX服务,上干货不废话
    1.拉取emqx镜像:dockerpullemqx/emqx:latest 显示如上即代表拉取成功2.使用dockerimages 查看镜像 4.启动emqx服务dockerrun-d-v/etc/localtime:/etc/localtime:ro-p18083:18083-p1883:1883-p8083:8083emqx/emqx:latest 说明已经成功启动5.去......
  • 全面解析:大模型技术从入门到精通的学习路径指南
    “技术学习无非涵盖三个方面,理论,实践和应用”大模型技术爆火至今已经有两年的时间了,而且大模型技术的发展潜力也不言而喻。因此,很多人打算学习大模型,但又不知道该怎么入手,因此今天就来了解一下大模型的学习路线。‍‍丁元英说:“透视社会有三个层面,技术,制度与文化”;同样的,......
  • 网络安全系统教程+渗透测试+学习路线(自学笔记)_渗透测试工程师怎么自学
    一、什么是网络安全网络安全可以基于攻击和防御视角来分类,我们经常听到的“红队”、“渗透测试”等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面性,例如Web安全技术,既有Web渗透,也......
  • 网络安全自学入门:(超详细)从入门到精通学习路线&规划,学完即可就业_网络安全自学路线
    很多人上来就说想学习黑客,但是连方向都没搞清楚就开始学习,最终也只是会无疾而终!黑客是一个大的概念,里面包含了许多方向,不同的方向需要学习的内容也不一样。算上从学校开始学习,已经在网安这条路上走了10年了,无论是以前在学校做安全研究,还是毕业后在百度、360从事内核安全产......
  • 攻防世界夺旗训练笔记【give_you_flag】
    题目给了一张GIF图片解题:看到最后一帧有二维码图片使用专门的GIF图片处理工具stegsolve(图片隐写解析器)截取最后一帧stegsolve教程截图这一帧并补充二维码定位点,扫描二维码就得出了flag有关二维码的研究https://blog.csdn.net/bemy1008/article/details/82886915......
  • 攻防世界夺旗训练笔记【坚持60s】
    题目:获取到一个jar附件运行后如图如果坚持超过60s不失败就可以直接获得flag,但是难度很大解题思路:最后游戏胜利应该是有一个从本地或者联网获取到的flag,先试试本地文件里是否存在flag字段直接通过java反编译工具jadx手撕代码可以获取到一段被加密过的flag,最后的等号暴露......
  • 【机器学习(五)】分类和回归任务-AdaBoost算法-Sentosa_DSML社区版
    @目录一、算法概念一、算法原理(一)分类算法基本思路1、训练集和权重初始化2、弱分类器的加权误差3、弱分类器的权重4、Adaboost分类损失函数5、样本权重更新6、AdaBoost的强分类器(二)回归算法基本思路1、最大误差的计算2、相对误差计算3、误差损失调整4、权重系数计算5、更新样本......