Docker基础

本文详细介绍了Docker的各种命令及其用法,包括镜像管理、容器操作、网络设置,以及与Java开发相关的面试题库,如算法、数据结构、数据库优化和并发编程等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


image

帮助命令

docker verison # 显示docker版本信息

docker info # 显示docker系统信息(包括镜像和容器的数量)

docker 命令 --help # 万能提示

docker stats # 查看资源使用情况

镜像命令

docker images # 查看所有本地的主机上的镜像

docker search # 搜索镜像

docker rmi # 删除镜像

docker pull[:tag] 下载镜像

docker pull mysql

Using default tag: latest # 如果不写默认最新

latest: Pulling from library/mysql

bb79b6b2107f: Pull complete # 分层下载,docker image的核心 联合文件系统

49e22f6fb9f7: Pull complete

842b1255668c: Pull complete

9f48d1f43000: Pull complete

Digest: sha256:8c17271df53ee3b843d6e16d46cff13f22c9c04d6982eb15a9a47bd5c9ac7e2d #签名

Status: Downloaded newer image for mysql:latest

docker.io/library/mysql:latest #真实地址

commit镜像

提交容器成为一个新的

docker commit -m=“提交的信息” -a=“作者” 容器ID 目标镜像名:[TAG]

容器命令

说明:我们有了镜像才可以创建容器。 下面下载一个centos来学习

下载centos镜像

docker pull centos

新建容器并启动

docker run [可选参数] image

参数说明

–name=“name” 容器名字,用来区分容器

-d 后台交互方式

-it 使用交互方式运行,进入容器查看内容

-p 指定容器端口

-p ip:主机端口:容器端口

-p 主机端口:容器端口(常用)

-p 容器端口

-P 随机指定端口

测试、启动进入容器

docker run -it centos /bin/bash

退出

exit

退出容器

exit # 直接推出容器

Ctrl + P + Q # 容器不停止推出

列出所有运行的容器

docker ps

列出当前正在运行的容器

-a # 列出当前正在运行的容器以及历史记录

-n=? # 显示最近创建的容器

-q # 只显示容器编号

根据镜像过滤

docker ps --filter ancestor=nginx

删除容器

docker rm 容器ID # 不能删除正在运行的容器

-f # 可以删除正在运行的容器

docker rm -f $(docker ps -aq) # 删除所有容器

启动和停止

docker start 容器ID # 启动

restart 容器ID # 重启

stop 容器ID # 停止当前正在运行的容器

kill 容器ID # 强制停止当前正在运行的容器

其他常用命令

后台启动容器

命令

docker run -d 镜像名

问题

docker ps 发现centos停止了

常见的坑:docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止

日志

docker logs -f -t --tail 10 容器ID

造数据测日志

docker run -d centos /bin/sh -c “while true;do echo CSP YES;sleep 1;done”

进程信息

docker top 容器ID

元数据

docker inspect 容器ID

进入当前正在运行的容器

通常容器都是使用后台的方式运行的,需要进入容器,修改一些配置

命令

dokcer exec -it 容器ID baseShell

docker attach 容器ID

区别

docker exec # 进入容器后开启一个新的终端,可以在里面操作(常用)

docker attach # 进入容器正在执行的终端,不会启动新的进程!

从容器复制到主机

docker cp 容器ID:容器内路径 需要拷贝到的主机路径

可视化


  • portainer(简单)

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /opt/docker/portainer:/data --name portainer --restart=always portainer/portainer

  • Rancher(CI/CD)

容器数据卷


容器之间可以有一个数据共享的技术,Docker容器中产生的数据,同步到本地!将容器内的目录,挂载到宿主机(容器间也可以数据共享)。实现容器的持久化!

直接使用命令挂载 -v

docker run -it -v 主机目录:容器目录

匿名和具名挂载

所有的docker容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/xxx/_da

匿名 直接指定容器目录

docker run -v /ect/nginx nginx

具名 xxx为挂载取得名字

docker run -v xxx:/ect/nginx nginx

拓展

ro readonly # 只读

rw readwrite # 可读可写

docker run -v xxx:/ect/nginx:ro nginx

docker run -v xxx:/ect/nginx:rw nginx

Dockerfile


docekrfile是用来构建dockers镜像的文件,命令参数脚本。

构建步骤

  1. 编写一个dockerfile文件

  2. docker buile构建为一个镜像

  3. docker run 运行镜像

  4. docker push 发布镜像

官方推荐dockerfile文件名:Dockerfile

docker buile -f dockerfile文件 -t 镜像名:[tag]

Dockerfile构建过程

基础知识:

  1. 每个保留关键字(指令)都必须是大写字母

  2. 执行顺序从上到下

  3. #表示注释

  4. 每一个指令都会创建提交一个新的镜像层

Dockerfile的指令

image

MAINTAINER # 镜像作者 如:Strive732171109@qq.com

ADD # 往镜像中添加内容,如:ADD centos-8-x86_64.tar.xz /

CMD # 指定容器启动的时候要运行的命令,只有最后一个命令有效

ENTRYPOINT # 指定容器启动的时候要运行的命令,可以追加命令

ONBUILD # 构建一个被继承dockerfile,就会运行ONBUILD的指令(触发命令)

Dockerfile示例

构建一个centos

1. 编写dockerfile文件

FROM centos

MAINTAINER Strive732171109@qq.com

ENV MYPATH /usr/local

WORKDIR $MYPATH

RUN yum -y install vim

RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH

CMD echo “=csp first dockerfile exec end=”

CMD /bin/bash

2. 构建

docker build -f dockerfile-csp-centos -t csp-centos:1.0 .

dockerfiel 工作图

image

Docker网络


docker network

docker network inspect network_id

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

文末

我将这三次阿里面试的题目全部分专题整理出来,并附带上详细的答案解析,生成了一份PDF文档

  • 第一个要分享给大家的就是算法和数据结构

网易严选Java开发三面面经:HashMap+JVM+索引+消息队列

  • 第二个就是数据库的高频知识点与性能优化

网易严选Java开发三面面经:HashMap+JVM+索引+消息队列

  • 第三个则是并发编程(72个知识点学习)

网易严选Java开发三面面经:HashMap+JVM+索引+消息队列

  • 最后一个是各大JAVA架构专题的面试点+解析+我的一些学习的书籍资料

网易严选Java开发三面面经:HashMap+JVM+索引+消息队列

还有更多的Redis、MySQL、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
https://i-blog.csdnimg.cn/blog_migrate/b479a5ea58f270a92e0f30846a359bae.jpeg" alt=“img” style=“zoom: 33%;” />

文末

我将这三次阿里面试的题目全部分专题整理出来,并附带上详细的答案解析,生成了一份PDF文档

  • 第一个要分享给大家的就是算法和数据结构

[外链图片转存中…(img-BpNVTnwj-1713079171592)]

  • 第二个就是数据库的高频知识点与性能优化

[外链图片转存中…(img-OY63YJmj-1713079171592)]

  • 第三个则是并发编程(72个知识点学习)

[外链图片转存中…(img-7ND0PFkx-1713079171593)]

  • 最后一个是各大JAVA架构专题的面试点+解析+我的一些学习的书籍资料

[外链图片转存中…(img-3Ff5TJ5z-1713079171593)]

还有更多的Redis、MySQL、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值