docker学习分享
目录
使用镜像创建并运行容器 docker run xxx (最重要命令)
Linux四大部分
-
Linux kernel 内核
-
GNU工具 ( 通用许可证 )
-
GUI Desktop环境
-
Application应用
Linux内核: 操作系统
-
硬件设备 管理应用
-
软件程序 ---> 操作软件
-
系统内存
-
文件系统, 文件管理, 保存删除修改..
GUN:
-
GUN核心: coreutils and shell
-
shell命令
GUI:
-
X Windows
-
KDE
-
GNOME
-
Unity
@系统目录

@基本命令
一. 文件
~代表当前所在目录, /正斜线代表根目录( 区分windows路径反斜线\ )
ls -l 条件过滤, 使用通配符 ? * 占位单个字符, [ ] (类比正则) 等等进行条件( 多个 )过滤
cd 切换到目录
cd !$ 转到上一条命令最后一个目录
cp -i (-r 递归处理, 将指定目录下所有文件以及子目录一并处理)
mkdir 创建文件夹
touch 创建文件
mv 移动和重命名
rm -i 删除并询问
file 查看文件类型格式
@链接
Linux文件系统中,有所谓的链接(link),我们可以将其视为档案的别名,而链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。
不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。
软链接:
-
1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
-
2.软链接可以 跨文件系统 ,硬链接不可以
-
3.软链接可以对一个不存在的文件名进行链接
-
4.软链接可以对目录进行链接
硬链接:
-
1.硬链接,以文件副本的形式存在。但不占用实际空间。
-
2.不允许给目录创建硬链接
-
3.硬链接只有在同一个文件系统中才能创建
ln 建立文件硬链接(类似起别名副本) ln 1.java 1_linkfile
ln -s 建立文件软链接(类似快捷方式) ln -s 1.java 2_linkfile ====> 2_linkfile -> 1.java
cat more less(PgUp, PgDn上下翻页)查看文件内容
tail -n 3 文件名 查看后3行
head -n 3 文件名 查看前3行
二. 系统
任务管理器:
top 查看所有进程
ps 显示当前进程状态 ps-l ps -aux | grep named
kill 结束进程
ps -aux | grep named 找到进程ID, kill ID结束该进程
@挂载
挂载就是把一个设备放到一个目录下,方便系统管理这个设备中的文件
一般就是把一个分区挂载到一个目录
mount 挂载
umount 卸载
df -h 显示磁盘相关信息
du-h 显示磁盘文件占用空间大小
sort 显示排序数据, 并不会改变原有数据
grep 文本搜索命令 grep hello demo.txt 搜索demo文件中含有hello字符的行数据
tar.gz 打包压缩 打包是将一大堆文件或目录打包成一个总文件, 压缩是将一个大文件压缩为一个小文件, 因为linux 很多压缩程序只能对一个文件进行压缩
tar打包、压缩
tar-cvf 1.tar 1.txt 仅打包,不压缩
tar -zcvf log.tar.gz log2012.log 将文件全部打成tar包并以gzip压缩
tar -zxvf example.tar.gz 将文件解压缩并在当前目录下恢复其中包含的文件和目录。
三. 父子shell
一个bash套用一个终端
sleep进程睡眠 sleep 300& 进程睡眠300s且最小化
jobs显示当前sleep进程
分号;分隔 执行多条命令
外部命令和内建命令(ps -f可查看)
外部命令有ps, 内部有cd等等
coproc创建协程
alias起别名
四. 环境变量
环境变量,全局变量,局部变量
(centos8)环境变量文件路径: /etc/profile,
常见四种名称:
-
.bashrc
-
.bash_profile
-
.profile
-
.bash_login
局部变量直接定义: fuck = "hello" 输出: echo $fuck(注意刀乐符)
全局变量定义: export fuck = "hello" 输出: echo $fuck(注意刀乐符)
eg: 定义局部变量或者用户变量务必小写, 只有系统全局变量才大写
删除变量: unset fuck
值得注意的是以上定义变量均要注意父子shell范围, 且关闭终端之后变量消失, 若要永久定义需要修改系统环境变量文件
五. 安装软件
PMS系统和软件安装命令区别如下:
| 任务 | REDHAT(CENTOS) | UBUNTU(DEBIAN) |
|---|---|---|
| 服务管理 (以apache为例) | ||
| 启动服务 | service httpd start | /etc/init.d/apache2 start 或 systemctl start apache2 |
| 停止服务 | service httpd stop | /etc/init.d/apache2 stop 或 systemctl stop apache2 |
| 随系统启动自动运行 | chkconfig httpd on | update-rc.d apache2 defaults 或 systemctl enable apache2 |
| 禁止启动自动运行 | chkconfig httpd off | update-rc.d apache2 remove 或 systemctl disable apache2 |
| 基本信息 | ||
| 软件包后缀 | *.rpm | *.deb |
| 软件源配置文件 | /etc/yum.conf | /etc/apt/sources.list |
| 安装、删除、升级软件包 | ||
| 更新软件包列表 | 每次运行yum时自动更新 | apt update |
| 从软件仓库安装软件 | yum install package | apt install package |
| 安装已下载的软件包 | yum localinstall pkg.rpm 或 rpm -ivh pkg.rpm | dpkg -i pkg.deb |
| 删除软件包 | yum remove package | apt remove package |
| 软件包升级测试 | yum check-update | apt -s upgrade 或 apt -s dist-upgrade |
| 升级软件包 | yum update package 或 rpm -Uvh [args] | apt upgrade package |
| 升级整个系统 | yum update | apt dist-upgrade |
六. 用户和权限
| 任务 | REDHAT(CENTOS) | UBUNTU(DEBIAN) | 通用说明 |
|---|---|---|---|
| 用户管理 | |||
| 创建用户 | useradd username | adduser username 或 useradd username | adduser 是交互式工具,useradd 是底层命令 |
| 删除用户 | userdel username | deluser username 或 userdel username | deluser 提供更多选项,userdel 更基础 |
| 修改用户信息 | usermod [options] username | usermod [options] username | 通用命令,如修改主组、附加组、家目录等 |
| 设置用户密码 | passwd username | passwd username | 通用命令,用于设置或更改用户密码 |
| 查看用户信息 | id username 或 finger username | id username 或 finger username | id 显示用户和组ID,finger 显示详细信息(需安装) |
| 切换用户 | su - username | su - username | - 表示切换到目标用户的环境 |
| 以其他用户身份执行命令 | sudo -u username command | sudo -u username command | 需要配置 sudoers 文件 |
| 组管理 | |||
|---|---|---|---|
| 创建组 | groupadd groupname | addgroup groupname 或 groupadd groupname | addgroup 是交互式工具 |
| 删除组 | groupdel groupname | delgroup groupname 或 groupdel groupname | |
| 修改组信息 | groupmod [options] groupname | groupmod [options] groupname | 例如修改组名 |
| 将用户添加到组 | usermod -a -G groupname username | usermod -a -G groupname username | -a 表示追加,不替换原有组 |
| 从组中删除用户 | gpasswd -d username groupname | gpasswd -d username groupname | 通用命令 |
| 查看组信息 | groups username 或 getent group groupname | groups username 或 getent group groupname | groups 显示用户所属组,getent 查询组数据库 |
注意事项:
-
大多数用户和权限管理命令在RedHat/CentOS和Ubuntu/Debian中是通用的。
-
adduser/deluser和addgroup/delgroup在Debian系中是Perl脚本,提供更友好的交互;而在RHEL系中通常直接使用useradd/userdel和groupadd/groupdel。 -
使用
sudo命令时,需要确保用户已被添加到sudoers文件中(通常通过visudo命令编辑)。 -
修改系统用户或组信息时建议使用
sudo或以 root 用户执行。
文件和文件夹权限rwx, 自学chmod命令
https://www.runoob.com/linux/linux-comm-chmod.html
七. 编辑器vim
https://blog.csdn.net/qq_46207024/article/details/116562319
@Git
Git基本配置与常见命令
Git GUI: Git提供的图形界面工具
Git Bash: Git提供的命令行工具
常见命令:
初始化 git init
-- 工作区==>暂存区 git add.
-- 暂存区==>仓库 git commit -m '描述'
-- 查看状态 git status
-- 查看提交记录 git log git-log
-- 版本回退 git reset --hard <commitID>
-- 查看分支 git branch
-- 创建/切换分支 git checkout -b <branchname>
-- 分支合并 git merge <branchname>
(首先要切换到目标分支上)
-- 删除分支 git branch -d <branchname>
** 远程仓库
-- 添加远程仓库 git remote add origin <remote-url>
-- 将远程仓库克隆到本地 git clone <项目地址>
-- 将本地推送到远程仓库 git push origin master
整体步骤: add commit push(先加入到暂存区再提交到仓库)
-- 将远程仓库拉取到本地 git fetch / git pull( git fetch + git merge )
@docker
一. 了解docker
Docker 是一种开源的 容器化平台,用于快速构建、部署和运行应用程序。
docker三大要素:
-
镜像
-
容器
-
仓库
-
其中镜像相当于软件的模版或者快照, 可以理解为一个只读的光盘, 里面打包好了各种系统环境,配置文件,依赖库等等所以镜像是静态的,不可修改的
-
而容器就是利用镜像( 模版 )生产出来的产品, 用来跑我们开发的应用, 容器可以启动 停止 删除 暂停的
-
仓库顾名思义就是存储镜像的地方,用来下载别人做好的镜像
docker就是一个总工厂或者引擎进行部署管理,实现自动化运维
docker的作用:
-
保证环境一致, 解决"在我电脑上能跑,到你电脑就报错"的问题.
-
快速部署与启动, 容器启动只需要几秒钟, 比虚拟机快的多
-
使容器之间相互隔离, 多个容器可以基于同一个镜像创建, 但彼此互相隔离, 互不影响
-
可移植且资源利用率高
二. docker安装
Docker 容器技术最初就是为 Linux 设计的,因此在 Linux 系统上运行 Docker 具有最高的原生性能和最少的抽象层。这意味着容器的启动速度更快,资源占用更少,效率更高。
安装步骤链接:【Docker】CentOS 8.2 安装Docker教程_centos8安装docker-CSDN博客
三. docker镜像管理命令
-
sudo docker pull xxx -下载镜像
-
功能: 从docker仓库下载镜像到本地
-
镜像引用: registry/imagename[:tag]
-
部分 说明 示例 registry镜像仓库地址(注册表) docker.io,quay.io,gcr.ionamespace命名空间(用户或组织名) library,bitnami,nginximagename镜像名称 nginx,redis,mysqltag标签(通常是版本号) latest,1.21,alpine -
示例:
docker pull nginx: 从Docker Hub官方仓库下载最新版Nginx镜像。
docker pull n8n/n8n: 从N8n的私有仓库下载N&n镜像。
docker pull docker.io/library/mysql:8.0.16: 从官方仓库下载8.0.16版本的mysql
-
Docker Hub网站:
[dockerhub] hub.docker.com
是官方仓库,可搜索、查看镜像详情(如官方镜像、版本号、使用说明)
-
Registry (注册表)与 Repository (镜像库):
-
Registry: 整个Docker Hub网站可视为一个Registry。
-
Repository: 一个Repository(如Nginx)存储了同一个镜像的不同版本。
-
-
网络问题解决方案(镜像站配置):
-
Linux: 修改/etc/docker/daemon.json 文件,添加
"registry-mirrors": ["https://<your-mirror-address>"],然后重启Docker服务(sudo systemctl restart docker)
-
-
-
sudo docker images -列出本地镜像
-
功能: 列出所有已下载到本地的docker镜像
-
-
docker rmi xxx -删除镜像
-
功能: 删除本地的docker镜像
-
参数: 指定镜像id
-
-
镜像cpu架构( -platform )
-
背景: docker镜像作为软件, 在不同cpu架构中有不同的版本
-
默认行为: docker pull命令会默认选择最适合当前宿主机cpu架构的镜像
-
特殊情况:
-
对于某些低功耗主机cpu架构通常为ARM64, 需确认镜像是否提供ARM64版本
-
Mac电脑(ARM64架构)的docker desktop会使用QEMU模拟x86-64指令集, 以兼容部分AMD64镜像
-
-
四. docker容器管理命令
-
使用镜像创建并运行容器 docker run xxx (最重要命令)
-
功能: 使用指定的镜像创建并运行一个容器
-
自动拉取: 如果本地不存在指定镜像, docker run会先自动拉取镜像, 再创建并运行容器
-
docker ps: 查看正在运行的容器
-
输出信息: Container ID(容器唯一id), Image(基于哪个镜像创建), Names(容器名称)
-
-
docker ps -a: 查看所有容器(包括正在运行和已经停止的)
-
-d (detached mode 分离模块):
-
功能: 让容器在后台运行, 不阻塞当前终端窗口
-
效果: 控制台只打印容器id, 容器日志不直接输出到终端
-
-
-p (port mapping 端口映射)
-
背景: docker容器运行在独立的虚拟网络环境当中, 默认无法直接从宿主机访问容器内部网络
-
功能: 将宿主机的端口映射到容器内部的端口
-
语法: -p <宿主机端口>:<容器内端口> (先外后内)
-
示例: -p 80:80 将宿主机的80端口转发到容器内的80端口
-
-
-v (volume mounting 挂载卷)
-
功能: 将宿主机的文件目录与容器内的文件目录进行绑定
-
目的: 实现数据的持久化保存, 当前容器被删除时, 容器内的数据也会被删除, 但挂载卷可确保数据保存在宿主机上
-
类型:
-
绑定挂载 (bind mount): 直接将宿主机目录路径写入命令
语法: -v <宿主机目录路径>:<容器内部目录命令>
注意: 宿主机目录内容会覆盖容器内对应目录的原始内容,且docker惠子doing创建路径和文件夹
-
命名卷挂载 (named volume): 让docker自动创建一个存储空间, 并为其命名
-
创建命名卷: docker volume create <卷名称>
-
使用命名卷: -v <卷名称>:<容器内部目录路径>
-
特点: 命名卷在第一次使用时, docker会将容器的文件夹内容同步到命名卷进行初始化(绑定挂载无此功能)
-
-
-
卷管理命令
-
docker volume ls: 列出所有创建过的卷
-
docker volume inspect <卷名称>: 查看卷的详细信息, 包括宿主机的真实目录
-
docker volume rm <卷名称>: 删除一个卷
-
docker volume prune -a: 删除所有未被任何容器使用的卷
-
-
-
-e (environment variables 环境变量)
-
功能: 为容器内部传递环境变量
-
语法: -e <key>=<value>
-
用途: 常用于配置数据库账号密码等
-
查找: 可在docker hub镜像文档或开源项目的github仓库中查找可用的环境变量
-
-
--name (自定义容器名称)
-
功能: 为容器指定一个自定义的, 在宿主机上唯一的名称
-
好处: 方便记忆和管理
-
-
-it (interactive & TTY 交互式终端)
-
功能: 让控制台进入容器内部, 获得一个交互式的命令行环境
-
用途: 临时调试容器, 执行linux命令
-
语法: docker run -it <镜像名称> /bin/bash
-
-
--rm (运行结束后自动删除)
-
功能: 当容器停止时, 自动将其从宿主机上删除
-
常用组合: 与-it联用, 用于临时调试场景
eg: sudo docker run -it --rm nginx
-
-
--restart (重启策略)
-
功能: 配置容器停止时的重启行为
-
常用策略:
-
always: 只要容器停止 (包括内部错误崩溃, 宿主机断电等), 就会立即重启
-
unless-stopped: 除非手动停止容器, 否则都会尝试重启, 对于生产环境非常有用, 可自动重启因意外停止的容器, 而手动停止的容器不会再重启
eg: sudo docker run -d --restart always/unless-stopped nginx
-
-
-
-
容器启停与管理
-
docker stop <容器id或名称>: 停止一个正在运行的容器
-
docker start <容器id或名称>: 重新启动一个已停止的容器
-
参数保留: 使用stop和start启停容器时, 之前docker run时设置的端口映射, 挂载卷, 环境变量等参数都会被docker记录并保留, 无需重新设置
-
docker inspect <容器id或名称>: 查看容器的详细配置信息,可借助AI辅助分析
-
docker create <镜像名称>: 只创建容器,但不立即启动, 若要启动, 需后续执行docker start命令
-
docker rm -f <容器id或名称>: 删除一个容器, -f表示可以删除正在运行的容器
-
-
容器内部操作与调试
-
docker logs <容器id或名称>: 查看容器的运行日志
-
-f: 滚动查看日志, 实时刷新
-
-
docker技术原理简述:
-
Cgroups (control groups): 用于限制和隔离进程的资源使用(CPU, 内存, 网络带宽等), 确保容器资源消耗不影响宿主机或其他容器
-
Namespaces: 用于隔离进程的资源视图, 使得容器只能看到自己内部的进程id, 网络资源和文件目录,而看不到宿主机的
-
本质: docker容器本质上是一个特殊的进程, 但进入容器内部后, 其表现似一个独立的操作系统
-
-
docker exec -在容器内部执行命令
-
功能: 在一个正在运行的docker容器内部执行linux命令
-
语法: docker exec <容器id或名称> <命令>
-
示例: docker exec my_nginx ps -ef 查看容器内进程
-
进入交互环境: docker exec -it <容器id或名称> /bin/sh 可进入容器内部获得交互式命令行环境, 进入文件系统查看, 进程管理或深入调试
-
注意: 容器内部通常是极简操作系统, 可能缺失vi等常用工具, 需要自行安装 (如centos使用 yum install vim)
-
-
五. Dockerfile-构建镜像的蓝图
-
定义: dockerFile是一个文本文件, 详细列出了如何制作docker镜像的步骤和指令, 可类比为制作模具的图纸
把程序打包成docker镜像需要创建一个Dockerfile文件, 然后写入指令
-
基本结构与指令:
-
FROM <基础镜像>: 所有Dockerfile的第一行, 选择一个基础镜像, 表示新镜像在此基础上构建
-
WORKDIR <目录路径>: 将宿主机的文件或目录拷贝到镜像内的指定路径, 类似cd
-
RUN <命令>: 在镜像构建过程中执行的命令 (比如安装依赖)
-
EXPOSE <端口号>: 声明镜像提供服务的端口 (仅声明, 实际端口映射仍有-p参数决定)
-
CMD <命令>: 容器运行时默认执行的启动命令, 一个DockerFile只能有一个CMD命令, 命令最好写成数组形式如: CMD ["python3", "main.py"]
-
ENTRYPOINT <命令>: 与CMD类似, 但优先级更高, 不易被docker run 命令覆盖
-
-
docker build -构建镜像
-
功能: 根据DockerFile构建Docker镜像
-
语法: docker build -t <镜像名称> [:<版本号>] <DockerFile所在目录> 版本号可不写若写的话加:
-
示例: docker build -t docker-test:1.2.1 . 在当前目录下构建名为docker-test的镜像, .代表当前目录
-
-
镜像推送至Docker Hub
-
登录Docker Hub: docker login
-
重新标记镜像: docker tag <本地镜像名称> <你的用户名>/<镜像名称>[:<版本号>] 推送时镜像名称必须包含用户名作为命名空间
-
推送镜像: docker push <你的用户名>/<镜像名称>[:版本号]
-
验证: 在Docker Hub网站上可以搜索到已推送的镜像, 其他用户即可通过 docker pull 下载使用
-
六. docker网络模式
-
bridge (桥接模式)
-
默认模式: 所有容器默认连接到此网络
-
内部ip: 每个容器被分配一个内部ip地址 (通常是172.17.x.x开头)
-
通信: 同一bridge网络内的容器可以通过内部ip地址互相访问, 容器网络与宿主机网络默认隔离, 需通过端口映射-p才能从宿主机访问
-
自定义子网
-
创建: docker network create <子网名称>
-
加入: docker run --network <子网名称> <容器id或名称>
-
优势:
-
同一子网内的容器可以使用容器名称互相访问 (docker内部DNS机制)
-
不同子网之间默认隔离
-
-
-
-
host (主机模式)
-
功能: docker容器直接共享宿主机的网络命名空间
-
ip地址: 容器直接使用宿主机的ip地址
-
端口: 无需端口映射 -p, 容器内的服务直接运行在宿主机的端口上, 通过宿主机的ip和端口即可访问
-
用途: 解决一些复杂的网络问题
-
语法: docker run --network host xxx
-
-
none (无网络模式)
-
功能: 容器不连接任何网络, 完全隔离
-
语法: docker run --network none xxx
-
-
网络管理命令
-
docker network ls: 列出所有docker网络 (包括默认的bridge, host, none以及自定义子网)
-
docker network rm <网络名称>: 删除自定义子网 (默认网络不可删除)
-
七. docker compose命令
背景: 当一个完整的应用由多个模块 (如前端, 后端, 数据库) 组成时, 若将所有模块打包成一个巨大容器, 会导致故障蔓延, 伸缩性差. 若每个模块独立容器化, 则管理多个容器 (创建, 网络配置) 会增加复杂性
-
解决方案: docker compose 是一种轻量级的容器编排技术, 用于管理多个容器的创建和协同工作
-
核心: 使用yaml文件 (通常命名为docker-compose.yaml) 定义多服务应用
创建文件: vi docker-compose.yaml
-
yaml文件结构: 可视为多个docker run命令按照特定格式组织在一个文件中
-
services: 顶级元素, 每个服务对应一个容器
-
服务名称: 对应docker run中的 --name, 作为容器的一部分,每个services名对应一个容器名
-
image: 对应docker run中的镜像名
-
environment: 对应docker run中的-e参数
-
volumes: 对应docker run中的-v参数
-
ports: 对应docker run中的-p参数
-
网络: docker compose会自动为每个compose文件创建一个默认子网, 文件中定义的所有容器会自动加入此子网, 并可以通过服务名称互相访问
-
depends_on: 定义容器的启动顺序, 确保依赖服务先启动
-
-
AI辅助: 可借助AI工具生成等价的docker compose文件
-
docker compose命令:
-
docker compose up: 启动yaml文件中定义的所有服务(容器)
-
-d: 后台运行
-
会自动创建子网和容器
-
-
docker compose down: 停止并删除由compose文件定义的所有服务和网络
-
docker compose stop: 仅停止服务, 不删除容器
-
docker compose start: 启动已停止的服务
-
docker compose -f <文件名.yml> up: 指定非标准文件名的compose文件进行操作
-
-
使用场景: docker compose适合个人使用和单机运行的轻量级容器编排需求
-
与kubernetes对比: kubernetes是企业级服务器集群和大规模容器编排的解决方案, 功能更为复杂
更多推荐



所有评论(0)