Docker极简入门系列(一):安装、常用命令和基本概念理解
本系列为Docker的学习笔记,内容比较精简,主要用于快速复习和随时查询。计划分六个章节内容:
- 安装、常用命令和基本概念理解
- 常用应用程序的容器部署
- 制作镜像的两种方式(容器转镜像和Dockerfile)
- 布署一个ASP.NET Core项目
- 服务编排Docker compose
一、安装Docker
- 更新yum包:yum update
- 安装yum配套的工具包:yum install -y yum-utils device-mapper-persistent-data lvm2
- 设置yum源:yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 安装docker:yum install -y docker-ce
- 查看docker版本,验证是否安装成功:docker -v
- 配置镜像加速器:登陆阿里云>进入窗口镜像服务>镜像工具>镜像加速器>(CentOS)>复制到shell中执行
二、Docker服务相关命令
1、启动/停止/重启/后台运行/查看服务状态
systemctl 【start | stop | restart | enable | status】 docker
三、镜像相关命令
1、查看本地所有镜像/搜索远程镜像/拉取镜像/删除镜像
docker 【images | search (redies) | pull (redies:7) | rmi (redis:7 | e42dd4e79c7) | 】
2、查看所有镜像ID
docker images -q
3、删除所有镜像
docker rmi `docker images -q`
四、容器相关命令
1、创建容器
docker run 【-it | -id】 --name=c1 --restart=always centos:7 /bin/bash
-it:创建容器(交互式),立即进入容器,并开启一个终端,exit退出容器后,容器立即关闭。-i为进入容器,-t为交互式。
-id:创建容器(守护式),并一直在后台运行,进入容器并exit退出后,容器不会关闭。-i为进入容器,-d为守护式(后台运行)
--name:容器命名
--restart:docker重启时,容器自动启动
/bin/bash:进入容器的初始化指令,打开shell脚本窗口。如果进入mysql的容器,直接跟mysql命令,直接进入mysql客户端。
2、查看正在运行的容器:
docker ps
3、查看正在运行和已经退出的容器:
docker ps -a
4、进入容器
docker exec -it c2 /bin/bash
-it:进入容器,并开启一个终端
c2:容器名称
/bin/bash:进入容器的初始化指令,打开shell脚本窗口
5、退出容器
exit
6、启动容器/关闭容器/删除容器/查看容器信息。注:start容器后,容器自动转为守护式
docker 【start | stop | rm | inspect】 c1
7、查看所有容器ID
docker ps -aq
8、删除所有容器
docker rm `docker ps -aq`
9、查看日志(c1为容器名)。-f,一直跟踪日志
docker logs [-f] c1
五、数据卷相关命令
1、创建容器时配置数据卷
docker run -id --name=c1 -v /root/data_linux:/root/data_container centos:7 /bin/bash
-v:设置数据卷,如果要挂载到多个数据卷,可以多次-v;如果要挂载多个容器数据目录,则每个容器创建时挂载相同的数据卷即可
/root/data_linux:/root/data_container:冒号前为数据卷目录的绝对路径,冒号后为容器数据目录的绝对路径
容器删除后:容器数据丢失,但数据卷仍然在。重新创建容器时,重新挂载到数据卷目录,即可恢复容器数据
数据卷地址:一般通过宿主机的绝对地址指定数据卷的本地地址。也可以只指定数据卷名称,如【-v volumeName:/root/data_container】,这样docker会在宿主机/var/lib/docker/volumes目录下创建相应的数据卷。
一个应用需要挂载哪些数据卷:可以通过docker的官方镜像仓,查看镜像文档,一般需要挂载数据、配置、初始化数据等
2、配置数据卷容器:
①创建数据卷容器(/volume可以自己定义):
docker run -id --name=c3 -v /volume centos:7 /bin/bash
②创建c1和c2容器,并挂载到c3上(--volumes-from为设置属性命令)
docker run -id --name=c1 --volumes-from=c3 centos:7 /bin/bash
docker run -id --name=c2 --volumes-from=c3 centos:7 /bin/bash
完成以上两个步骤,inspect查看c3、c1和c2,找到以下信息
"Source": "/var/lib/docker/volumes/de83e5ea073ca277882694995f88137b2933e1f695362590103760f166923b04/_data",
"Destination": "/volume",
如上,Source目录即为在宿主机上自动创建的数据卷,Destination即为容器数据目录
六、容器网络相关命令
1、查看所有容器网络
docker network ls
2、查看本机网卡(每个容器网络,都有一个相对应的虚拟网卡,还有系统的其化虚拟网卡)
ip addr
3、查看容器的网络信息。c1为容器名,其中有一项“NetWork”,描述了容器的网络信息。
docker inspect c1
4、创建/删除/清除未使用/查看容器网络。n1为网络名。
docker network 【create | rm | prune | inspect】 n1
5、加入/移出/查看容器网络,n1为网络名,c1为容器名。一个容器可以加入多个虚拟网络。
docker network 【connect | disconnect】 n1 c1
6、创建容器时就加入网络。这种方式,容器只会加入指定网络,而不会加入默认的“docker0”网络。n1为网络名称,需要先创建。
docker run -d --name mysql -p 3306:3306 --network n1 mysql:5.7
七、基本概念的理解
- 镜像:程序安装包,类似于windows安装会经常接触到的iso文件。
- 远程镜像:官方hub服务器上的镜像,hub类似于javascript的npm、NET的nuget。远程镜像要先拉取到本地计算机,因hub在国外,速度比较慢,所以一般要设置国内的镜像加速。镜像加速器,就是国内服务商对hub服务器的克隆。当然,也可以创建自己的私有镜像服务器。
- 本地镜像:远程镜像要拉取到本地计算机,才可以创建容器。本地镜像,类似于类,容器就是用这个类创建的实例。所以同一个版本的镜像,只有一个;而相应的容器可以有很多个。
- 容器:使用本地镜像创建容器后,程序在容器环境中运行。容器即“容器”这个词汇本身的含义,又有运行在容器中的程序的含义。容器中运行的程序,不限于应用程序,也可以是操作系统,比如我们在CentOS上安装docker,而在docker的容器里,我们可以再运行一个CentOS。同一个镜像,可以创建多个容器,即在一个docker里我们可以运行多个相同的程序,比如运行多个redis,容器之间是沙箱隔离的。
- 宿主机:docker运行所在的Linux服务器
- 数据卷:解决容器中产生的数据的持久化保存、容器之间数据交互、容器与外部之间数据交互问题。将容器中的数据目录挂载到宿主机的文件目录,并使这两个目录数据保持同步,宿主机中的这个文件目录称之为数据卷。容器删除后,容器数据丢失,但数据卷的数据仍然保留。一个数据卷可以被多个容器挂载,一个容器也可以挂载到多个数据卷,多对多关系
- 数据卷容器:多容器数据交互,可以通过挂载到同一个数据卷上来实现。也可以在容器和数据卷之间,再创建一个数据卷容器。容器挂载到数据卷容器,数据卷容器再挂载到数据卷,从而实现数据交互。即“容器>数据卷容器>数据卷”
- 容器网络:docker内部可以创建虚拟网络,默认的虚拟网络为“docker0”,处于同一虚拟网络的容器,可以通过自动分配的虚拟IP地址相互访问。创建容器时,如果没有指定网络,容器会自动加入默认的“docker0”的网络,但这种方式有个问题,容器之间只能通过IP地址相互访问,而且IP地址是docker随机分配的,容器重建后,IP地址会变化。为解决这个问题,可以自定义一个虚拟网络,然后将容器加入虚拟网络后,同一虚拟网络的容器,可以通过容器名称相互访问。
- docker核心意义:①应用程序和依赖环境一起部署在容器中,可以发布到任何Linux服务器上,解决“水土不服”的问题;②使用文件层(镜像)叠加,重用文件层(镜像),区别于虚拟机,可以有效利用资源,而且效率非常高。
八、最后上图理解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!