day053-初识docker与基础命令
文章目录
- 0. 老男孩思想-当年老男孩老师发给女生的消息
- 1. docker
- 1.1 虚拟机与容器的区别
- 1.2 docker架构
- 2. 环境准备
- 2.1 虚拟机:2核4g
- 2.2 安装docker
- 2.3 配置docker镜像源
- 2.4 导入常用镜像
- 3. 镜像常用命令
- 3.1 下载镜像
- 3.2 查看镜像
- 3.3 导入镜像
- 3.4 查看各种详细信息
- 3.5 将镜像保存成文件
- 3.6 删除镜像
- 3.7 更改镜像标签tag
- 4. 启动容器
- 4.1 开启系统内核转发功能
- 5. 容器相关命令
- 5.1 查看容器
- 5.2 启动、关闭、重启容器
- 5.3 删除容器
- 5.4 进入容器
- 5.5 上传文件到容器
- 6. 思维导图
0. 老男孩思想-当年老男孩老师发给女生的消息
- 太阳出,公鸡叫,愉快的心情就要到。黑夜走,白昼来,开心的一天就要来。钟儿
响,铃儿闹,快快起床去报到。早安宝贝儿(配几个小图标) - 周一开始用心酝酿,周二给你思念,周三加入温暖,周四补充快乐,周五放上好运,
周六用幸福的外衣包裹,在周六早晨一起送给你,愿你一天持续拥有好心情。 - 一双手,把人生的风雨撑起;一颗心,把情感的厚度浸透;一声问候,把受伤的心灵
抚慰:一条信息,把哥的祝福传达,早安,我亲爱的宝贝儿,很想你。 - 我要帮你减,减掉周一到周五,留下周六和周日。我要帮你加,加上十一假期和五一,外加端午、中秋,加减法,我来操心,你的存在意义就是负责吃和玩,外加上每天开心就可以!
1. docker
Docker通过容器技术将应用及其依赖打包成轻量级、可移植的单元,用于快速构建、部署和运行应用程序。
1.1 虚拟机与容器的区别
对比维度 | 虚拟机 | 容器 |
---|---|---|
核心架构 | 硬件级虚拟化(模拟硬件) | 操作系统级虚拟化(共享主机OS内核) |
Guest OS | 需要独立操作系统 | 无需Guest OS(直接调用主机内核) |
资源占用 | 高(每个vm独占OS资源,GB级内存/磁盘) | 极低(进程级隔离,MB级内存/磁盘) |
启动速度 | 分钟级 | 秒级 |
性能损耗 | 较高 | 接近原生 |
隔离性 | 强隔离(独立内核,完全系统级隔离) | 较弱(进程隔离,共享内核,依赖配置) |
镜像大小 | GB级(完整OS) | MB级(包含应用+依赖库) |
跨平台兼容性 | 强(不同OS间自由运行) | 弱(依赖主机内核) |
典型工具 | VMware、OpenStack | Docker、k8s |
适用场景 | 运行不同OS的应用 强隔离需求(如金额系统) | 云原生/微服务 DevOps |
- Guest OS:Guest OS(客户操作系统)是指在虚拟化环境(如虚拟机或容器)中运行的操作系统,与Host OS(宿主机操作系统)相对应。
- 原生:原生(Native)指代码直接编译为机器码在操作系统上运行(如C++编写的原生应用)。这是性能天花板,几乎没有额外损耗。
- 云原生/微服务:
- 微服务:把APP拆成独立小零件
- 云原生:把这些零件扔进云里(云服务)
1.2 docker架构
- docker是CS架构
2. 环境准备
2.1 虚拟机:2核4g
2.2 安装docker
- docker软件包:
docker-27.0.3.tgz 链接: https://pan.baidu.com/s/1URrI4RpFSANv54M81Y0f2Q?pwd=m8qz 提取码: m8qz
- docker.service文件,配置系统systemd服务:
docker.service 链接:https://pan.baidu.com/s/1CSmWnFTyrcrAACC9iJMJTA?pwd=nvkp 提取码: nvkp
# 解压
tar xf docker*.tgz
# 修改docker程序的所有者
chown -R root:root docker
# 移动docker命令到/bin下
mv docker/* /bin
# 系统自带了docker-runc程序,需删除该程序的命令,否则会与安装的docker命令冲突
rm /user/local/bin/runc
# 配置docker的systemd管理服务
mv docker.service /user/lib/systemd/system/
# 重新加载systemd文件
systemctl daemon-reload
# 启动服务
systemctl enable --now docker
# 检查服务状态
systemctl status docker
# 查看docker版本
docker version
2.3 配置docker镜像源
[root@docker01 ~]# cat /etc/docker/daemon.json
{"registry-mirrors" : ["https://do.nark.eu.org","https://dc.j8.work","https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn","https://docker.mirrors.ustc.edu.cn","https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https://dockertest.jsdelivr.fyi","https://mirror.aliyuncs.com","https://dockerproxy.com","https://mirror.baidubce.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn","https://docker.rainbond.cc","https://do.nark.eu.org","https://docker.shootchat.top","https://registry.docker-cn.com"]
}
2.4 导入常用镜像
- 常用docker镜像:
oldboyedu_useful_docker_images.tar.gz 链接: https://pan.baidu.com/s/1aSzgyfAQu-FL-5fb1UqysA?pwd=dxfz 提取码: dxfz
# 先解压
tar xf oldboy*.tar.gz
# 导入镜像
for n in `ls`;do docker load -i $n; done
3. 镜像常用命令
3.1 下载镜像
docker pull 服务名称:版本
- 常见版本:
- 1.24
- latest:最新版本;在测试环境中使用;若是不指定服务的版本,默认下载最新版
- 常见系统:
- alpine:极简系统;只有最基本的系统,shell一般是/bin/sh
- bullseye、bookworm:Debian系统
- ubuntu
- 示例:
docker pull nginx:alpine
- docker官方仓库,可以查看服务版本:
[Docker Hub Container Image Library | App Containerization](https://hub.docker.com/)
3.2 查看镜像
docker images
- -a:显示所有镜像
[root@docker01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx alpine 77656422f700 2 weeks ago 52.5MB
- Docker 默认的数据存储目录:
/var/lib/docker
,用于存放 Docker 的所有核心数据,包括镜像(images)、容器(containers)、卷(volumes)、网络配置(networks)等。 - 查看详细信息:–no-trunc,不压缩,不省略
[root@docker01 ~]# docker images --no-trunc
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx alpine sha256:77656422f7009bf47cd4992cb1a118af09c25bb157336478bdbf399af09e8e41 2 weeks ago 52.5MB
tomcat 9.0-jdk8 sha256:56d6933de864f447c36fdbd7daffe5a1f11114be2b4464973695eb1d5bc95f8c 2 years ago 285MB
nginx 1.24 sha256:b6c621311b44ae45292790dd4a8004a830c3c251177e5f87f278e294ea05f9ca 2 years ago 142MB
3.3 导入镜像
docker load -i 镜像文件
- -i/–input:指定镜像文件路径
- 镜像文件是tar包或tar.gz都行
- 一次只能导入一个镜像
3.4 查看各种详细信息
docker inspect 镜像/容器
- 结果是json格式,一般与jq结合使用
- jq是linux系统中强大的json处理器
[root@docker01 ~]# docker inspect nginx:alpine |jq '.[0].Config.Cmd'
["nginx","-g","daemon off;"
]
3.5 将镜像保存成文件
docker save 镜像名:版本 -o 文件名.tar
- -o/–output:指定输出路径
- 未压缩
docker save 镜像名:版本 |gzip > 文件名.tar.gz
- 使用gzip压缩算法进行压缩
3.6 删除镜像
docker rmi 镜像名/ID
- 如果镜像正在使用中,需先删除容器,再删除镜像
3.7 更改镜像标签tag
docker tag 原镜像名 新镜像名
- 更改后,原来镜像还会存在,只是该镜像会增加一个标签;磁盘占用空间不变
4. 启动容器
docker run -d --name 字符串 -p 端口:端口 镜像名称
- -d:后台运行
- –name:指定容器名字
- -p:指定主机与容器间的端口映射
[root@docker01 ~]# docker images |grep nginx
web_nginx 1.29 77656422f700 2 weeks ago 52.5MB
nginx alpine 77656422f700 2 weeks ago 52.5MB
nginx 1.24 b6c621311b44 2 years ago 142MB
nginx 1.24-alpine 55ba84d7d539 2 years ago 41.1MB
[root@docker01 ~]# docker run -d --name nginx -p 80:80 nginx:alpine
30742acfd43e65e4a8d5ef91e45b2228fc24b7da97abdd169940f7a56ca25efe
[root@docker01 ~]# ss -lntup|grep 80
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("docker-proxy",pid=42839,fd=4))
tcp LISTEN 0 128 [::]:80 [::]:* users:(("docker-proxy",pid=42844,fd=4))
- 容器名字不能冲突
- 宿主机端口不能冲突
4.1 开启系统内核转发功能
- 启动ipv4转发功能
5. 容器相关命令
5.1 查看容器
docker ps
:查看正在运行的容器- -a:查看所有容器
- -q:只显示容器id
- –no-trunc:不省略,显示详细信息
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
30742acfd43e nginx:alpine "/docker-entrypoint.…" 8 minutes ago Up 8 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
84d9c99ff504 web:zrlog_v1 "catalina.sh run" 3 hours ago Up 3 hours (healthy) 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp zrlog
[root@docker01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
30742acfd43e nginx:alpine "/docker-entrypoint.…" 8 minutes ago Up 8 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
84d9c99ff504 web:zrlog_v1 "catalina.sh run" 3 hours ago Up 3 hours (healthy) 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp zrlog
b1a28a4a68aa web:bird_v2 "/docker-entrypoint.…" 9 hours ago Exited (255) 5 hours ago 443/tcp, 0.0.0.0:81->80/tcp, :::81->80/tcp web_bird_v2
77d8cef70f7b web:bird_v1 "/docker-entrypoint.…" 10 hours ago Exited (255) 5 hours ago 0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp web_bird
bd78e0c6288a mysql:8.0-debian "docker-entrypoint.s…" 28 hours ago Exited (0) 4 hours ago mysql8
c2e818624e94 nginx:1.24 "/docker-entrypoint.…" 4 days ago Exited (0) 4 days ago nginx_v1
5.2 启动、关闭、重启容器
docker stop nginx
docker ps
docker start nginx
docker ps
docker restart nginx
5.3 删除容器
docker rm 容器名称/ID
:删除已停止的容器- -f:强制删除,可以删除正在运行的容器
- 删除所有容器:
[root@docker01 ~]# docker ps -aq |xargs docker rm -f
30742acfd43e
84d9c99ff504
b1a28a4a68aa
77d8cef70f7b
bd78e0c6288a
c2e818624e94
[root@docker01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5.4 进入容器
docker exec -it 容器名称 /bin/bash或/bin/sh
- -i:交互模式
- -t:分配终端
[root@docker01 ~]# docker exec -it nginx_v1 /bin/bash
root@fe7d1d3a9d8d:/# ls -l /usr/share/nginx/html/index.html
-rw-r--r-- 1 root root 615 Apr 11 2023 /usr/share/nginx/html/index.html
root@fe7d1d3a9d8d:/# echo oldboy > /usr/share/nginx/html/index.html
root@fe7d1d3a9d8d:/#
exit
[root@docker01 ~]# curl 10.0.0.10
oldboy
5.5 上传文件到容器
docker cp 文件/目录 容器名称:路径
[root@docker01 ~]# echo 孙克旭 > index.html
[root@docker01 ~]# docker cp ./index.html nginx_v1:/usr/share/nginx/html/
Successfully copied 2.05kB to nginx_v1:/usr/share/nginx/html/
[root@docker01 ~]# curl 10.0.0.10
孙克旭
6. 思维导图
https://kdocs.cn/join/gpuxq6r?f=101\r\n邀请你加入共享群「老男孩教育Linux运维99期-孙克旭」一起进行文档协作