Docker容器的安装、部署、常用命令,和一些使用案例(无AI纯手打)
注:本文章使用 VMware虚拟机 + RockyLinux9 的环境来演示和操作。
Docker
Docker 是一种开源的容器化平台,操作系统级虚拟化技术,利用Linux 命名空间(Namespace)和控制组(CGroup)实现轻量级容器化,用于开发、交付和运行应用程序。
通过容器技术将应用程序及其所有依赖项(如代码、运行时环境、系统工具等)打包到一个标准化的轻量级单元中,称为容器。这些容器可以在任何支持 Docker 的环境中运行,确保应用在不同环境(开发、测试、生产)中的一致性
对Docker最简单但不完全准确的理解:Docker是一个微型的虚拟机
Docker容器优势
- **环境一致性:**可以在windows/linux/macos等多平台运行
- **轻量与高校:**共享宿主机内核,启动速度秒级,资源占用率低
- **隔离性与安全:**进程隔离防止容器之间互相干扰,而且支持SELinux 增强安全策略
Docker容器缺点
- **数据安全风险:**删除容器容易导致数据丢失,因此数据库一般不会放到容器内部署。
Docker安装与配置
安装前基本要求:关闭防火墙和 SELinux!! 这点很重要
一键检查自己的防火墙和SELiunx有没有关闭:
systemctl status firewalld && \
getenforce
安装前准备:
- 首先找一台虚拟机搭建FTP共享服务器,方便在容器内安装软件
dnf -y install vsftpd
- 修改
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
- 将需要Docker软件包放到/var/ftp/下,然后安装
createrepo
dnf -y install createrepo &&\
createrepo --update /var/ftp/rpms
[!NOTE]
createrepo是 Linux 系统中用于创建和管理 YUM/DNF 软件仓库的命令行工具,主要功能是为 RPM 软件包生成元数据索引,使包管理器(如yum或dnf)能够识别、安装和更新软件包。
Docker的安装
- 安装和启动
dnf -y install docker-ce && \
systemctl enable docker --now # 设置开机自启,并且当前服务进行启动(--now的作用)
检查docker是否开启:docker version
- 配置路由转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf && sysctl -p
这步骤主要是为了让容器内的镜像能够上网,相当于给容器内的镜像设置了连接外网的路由
- 加载镜像
docker images # 查看系统镜像
docker load -i /root/dockerimgs1.tar.gz #导入镜像 -i:指定路径
docker images
镜像加速器配置
官方的镜像仓库在外网,可能无法访问,因此要配置国内的镜像仓库加速镜像下载:
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://docker.m.daocloud.io"], // 配置镜像仓库加速器地址
"insecure-registries": [""] // 配置不安全站点地址
}
这个文件默认是不存在的,用vim编写自动创建
镜像命名方式:
- 每一个镜像都对应唯一的镜像ID,就像身份证号
- 镜像名 + 标签 = 唯一名
- 镜像标签一般是版本号
- 每一个镜像都有标签,如果没有就是默认标签(latest)
- 如:
httpd_rocky9rocky9 就是标签名
Docker基础操作命令
镜像操作:
docker load -i /root/xxx.tar.gz:导入镜像-i:指定路径
docker save 镜像名:版本号 -o 镜像名.tar:导出镜像docker pull 镜像名:下载镜像docker search:搜索镜像docker history:查看镜像制作的历史和命令docker inspect 镜像名:查阅镜像的详细参数信息- 查看容器的IP:
docker inspect 容器名 | grep -i ipaddr,可以用于访问容器内的服务
- 查看容器的IP:
容器操作:
docker run --name 容器名 -itd 镜像名:镜像标签 /bin/sh:容器创建启动(通用)-it:启动后进入终端交互-d:容器放入后台(如果用这个选项,就不需要加/bin/bash)--name:给容器起别名方便管理-p:端口绑定(冒号左边是主机端口,右边是容器端口)-v:目录挂载,将容器内部的某个目录与外部共享。其原理是NFS共享/bin/sh:指定运行容器的解释器。这个解释器必须要容器里面有才行,比如有的容器没有bash,用bash就会报错
docker ps:查看当前所有容器状态-a:查看所有容器
docker exec -it 容器名 /bin/bash:进入容器内部- 只要和容器进行终端命令交互,就一定要写/bin/bash
docker start 容器名:启动容器docker stop 容器名:停止容器:docker rm -f 容器名:删除容器-f:强制删除
docker rmi 容器名:删除镜像(这个 rm 加了 i 是删除镜像image)docker cp:复制文件到容器里docker tag 容器ID 别名:容器名:给容器起别名。起了以后查看镜像,会多出来一行镜像信息,但本质上是刚才镜像的马甲
Docker使用案例:
容器排错
在启动容器后,如果容器没有正常启动,就需要去查阅日志信息
比如,在nginx容器中,如果nginx配置文件改错,重启后就会报错:
[root@docker-0001 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9ba350364f5d myos:nginx "/usr/local/sbin/ent…" 8 minutes ago Exited (1) 10 seconds ago web
发现状态是 Exited ,容器没有正常运行,要排错…
查看这个容器的日志信息:
docker logs web
172.17.0.1 - - [04/Nov/2025:07:25:08 +0000] "GET / HTTP/1.1" 200 33 "-" "curl/7.76.1"
nginx: [emerg] invalid parameter "server_name" in /usr/local/nginx//conf/nginx.conf:41
原来如此,41行附近出了问题,要修改配置文件
但容器进不去了,没法在容器内修改
这个时候,可以使用复制命令,配置文件cp出来修改好了再cp回去:
docker cp web:/usr/local/nginx/conf/nginx.conf ./
检查配置文件41行附近,原来是少了个分号,加上去即可
39 server {
40 listen 80
41 server_name localhost;
修改好了拷贝回去:
docker cp ./nginx.conf web:/usr/local/nginx/conf/
再次启动容器后,又可以正常运行了
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9ba350364f5d myos:nginx "/usr/local/sbin/ent…" 18 minutes ago Up 20 seconds (health: starting) 80/tcp, 443/tcp web
在最小化安装的容器里面安装软件
在最小化容器中,很多常用甚至必要的软件是没有安装的,需要我们按需求手动安装
核心思路:在镜像外搭建FTP服务器,在容器内的yum仓库配置FTP目录,然后dnf安装软件
设备A:192.168.88.2
设备B:192.168.88.240
- 在设备A上安装、配置并启动FTP服务器
yum -y install vsftpd
vim /etc/vsftpd/vsftpd.conf
...
12 anonymous_enable=YES
...
systemctl enable vsftpd --now
- 挂载DVD文件到
/var/ftp/下
mount /dev/sr0 /var/ftp/
这个是临时挂载,仅测试使用,永久挂载请配置/etc/fstab
- 在容器内配置yum源。或者在容器外配置好,复制到
/etc/yum.repos.d下(在连vim都没有的情况下就这么做)
[ftpApp]
name=ftp
baseurl=ftp://192.168.88.240/dvd/AppStream
enabled=1
gpgcheck=0
[ftpBase]
name=ftp
baseurl=ftp://192.168.88.240/dvd/BaseOS
enabled=1
gpgcheck=0
- 验证yum源配置
docker exec -it 容器名 dnf repoinfo
ftp 79 MB/s | 9.6 MB 00:00
ftp 53 MB/s | 2.5 MB 00:00
Repo-id : ftpApp
Repo-name : ftp
Repo-revision : 1748559289
Repo-updated : Thu May 29 22:54:49 2025
Repo-pkgs : 6247
Repo-available-pkgs: 5911
Repo-size : 9.4 G
Repo-baseurl : ftp://192.168.88.240/dvd/AppStream
Repo-expire : 172800 second(s) (last: Tue Nov 4 08:29:48 2025)
Repo-filename : /etc/yum.repos.d/local.repo
Repo-id : ftpBase
Repo-name : ftp
Repo-revision : 1748468553
Repo-updated : Wed May 28 21:42:33 2025
Repo-pkgs : 1171
Repo-available-pkgs: 1171
Repo-size : 1.4 G
Repo-baseurl : ftp://192.168.88.240/dvd/BaseOS
Repo-expire : 172800 second(s) (last: Tue Nov 4 08:29:50 2025)
Repo-filename : /etc/yum.repos.d/local.repo
Total packages: 7418
如果配置成功,会显示扫描到几千上万个软件包
- 安装必要或常用的软件包
docker exec -it 容器名 dnf install -y net-tools vim-enhanced tree bash-completion iproute procps-ng psmis
简单镜像封装制作
在封装前需要先停止镜像运行:docker stop 容器
- 镜像封装命令:
docker commit 容器名 镜像名:标签(版本号)
docker images # 查看镜像是否封装成功
- 安装运行测试
docker run -it --name web 刚才的镜像名:标签 /bin/bash
用镜像制作一个web服务
容器里面并不安全,如果容器被删除,里面所有的内容都会被删除。
因此最好是将页面等内容放到运行文件的机器里面
- 创建容器,进行端口绑定和目录绑定(NFS共享)
docker run --name myweb -p80:80 -v /myweb:/var/www/html/ -itd 镜像名 #将内部的80端口绑定到外部
- 准备好主机的挂载点,放入制作好的网页
mkdir /myweb
...
- 访问测试
curl 127.0.0.1
更多推荐
所有评论(0)