1. 首页 > Docker教程 > 正文

Docker教程FG003-Docker基础入门实战(镜像/容器基本操作)

本教程基于Docker官方文档的基础操作部分,详细解析Docker镜像和容器的基本操作,包括镜像的拉取、查看、删除,以及容器的创建、启动、停止、删除等核心操作。通过理论与实战相结合的方式,帮助读者快速掌握Docker的基础操作技能,为后续的容器化应用部署奠定基础。

风哥教程参考Docker官方文档Docker基础操作指南、Docker镜像管理手册等相关内容。

目录大纲

Part01-基础概念与理论知识

1.1 Docker镜像概念

Docker镜像是一个只读的模板,包含了运行应用所需的所有文件系统、代码和依赖。镜像的特点:

  • 只读性:镜像一旦构建完成,就不能被修改
  • 分层结构:镜像由多个只读层组成,每层对应Dockerfile中的一条指令
  • 可复用性:可以基于现有镜像创建新的镜像
  • 可分发:可以通过Docker Hub或私有仓库分享镜像

镜像的来源:

  • 从Docker Hub拉取官方或第三方镜像
  • 通过Dockerfile构建自定义镜像
  • 从容器提交创建镜像

更多视频教程www.fgedu.net.cn

1.2 Docker容器概念

容器是镜像的运行实例,包含了应用运行所需的完整环境。容器的特点:

  • 隔离性:容器拥有自己的网络、存储和进程空间
  • 轻量性:容器共享主机内核,启动速度快,资源占用少
  • 可移植性:容器可以在任何支持Docker的环境中运行
  • 一致性:容器在不同环境中运行结果一致

容器的生命周期:

  • 创建:通过docker create命令创建容器
  • 启动:通过docker start命令启动容器
  • 运行:容器处于运行状态,执行应用程序
  • 暂停:通过docker pause命令暂停容器
  • 停止:通过docker stop命令停止容器
  • 删除:通过docker rm命令删除容器

学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 镜像管理策略

风哥提示:在生产环境中,合理的镜像管理策略可以提高系统的稳定性和安全性。

  • 镜像版本管理
    • 使用标签(tag)管理不同版本的镜像
    • 避免使用latest标签,明确指定版本号
    • 定期清理过期和未使用的镜像
  • 镜像安全
    • 使用官方或经过验证的第三方镜像
    • 定期扫描镜像漏洞
    • 最小化镜像体积,减少攻击面
  • 镜像存储
    • 使用私有镜像仓库存储敏感镜像
    • 配置镜像加速器,提高拉取速度
    • 定期备份重要镜像

学习交流加群风哥QQ113257174

2.2 容器管理策略

  • 容器命名
    • 使用有意义的容器名称,便于识别
    • 遵循统一的命名规范,如服务名-环境-编号
  • 容器资源限制
    • 设置CPU和内存限制,避免资源耗尽
    • 根据应用需求合理分配资源
  • 容器网络
    • 为不同服务创建专用网络
    • 使用网络别名方便服务发现
  • 容器存储
    • 使用数据卷持久化存储
    • 定期备份数据卷数据

更多学习教程公众号风哥教程itpux_com

Part03-生产环境项目实施方案

3.1 镜像基本操作

镜像的基本操作包括拉取、查看、删除等:

# 拉取镜像
$ docker pull ubuntu:22.04
22.04: Pulling from library/ubuntu
Digest: sha256:0e5e1810212a4b322f32d49178426f1b31188536916b525f8336145624f11d3c
Status: Downloaded newer image for ubuntu:22.04
docker.io/library/ubuntu:22.04
# 拉取指定版本的镜像
$ docker pull nginx:1.24
1.24: Pulling from library/nginx
Digest: sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aa
Status: Downloaded newer image for nginx:1.24
docker.io/library/nginx:1.24
# 查看本地镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 22.04 2b860a9fbb0e 2 weeks ago 77.8MB
nginx 1.24 605c77e624dd 1 month ago 142MB
# 查看镜像详细信息
$ docker inspect ubuntu:22.04
[
{
“Id”: “sha256:2b860a9fbb0e6b2c1994b3c3509f37544a2c5f5827949f277a0d1c2a932a8f50”,
“RepoTags”: [“ubuntu:22.04”],
“RepoDigests”: [“ubuntu@sha256:0e5e1810212a4b322f32d49178426f1b31188536916b525f8336145624f11d3c”],
“Parent”: “”,
“Comment”: “”,
“Created”: “2026-03-28T00:30:00Z”,
“Container”: “”,
“ContainerConfig”: {
“Hostname”: “”,
“Domainname”: “”,
“User”: “”,
“AttachStdin”: false,
“AttachStdout”: false,
“AttachStderr”: false,
“Tty”: false,
“OpenStdin”: false,
“StdinOnce”: false,
“Env”: [“PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin”],
“Cmd”: [“/bin/sh”, “-c”, “#(nop) “, “CMD [\”/bin/bash\”]”],
“Image”: “”,
“Volumes”: null,
“WorkingDir”: “”,
“Entrypoint”: null,
“OnBuild”: null,
“Labels”: {}
},
“DockerVersion”: “20.10.24”,
“Author”: “”,
“Config”: {
“Hostname”: “”,
“Domainname”: “”,
“User”: “”,
“AttachStdin”: false,
“AttachStdout”: false,
“AttachStderr”: false,
“Tty”: false,
“OpenStdin”: false,
“StdinOnce”: false,
“Env”: [“PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin”],
“Cmd”: [“/bin/bash”],
“Image”: “”,
“Volumes”: null,
“WorkingDir”: “”,
“Entrypoint”: null,
“OnBuild”: null,
“Labels”: null
},
“Architecture”: “amd64”,
“Os”: “linux”,
“Size”: 77800000,
“VirtualSize”: 77800000,
“GraphDriver”: {
“Data”: {
“LowerDir”: “/var/lib/docker/overlay2/5e6f8e9d1e8b9a3c4e9f8a7b6c5d4e3f2a1b0c9d8e7f6e5d4c3b2a1/rootfs”,
“MergedDir”: “/var/lib/docker/overlay2/5e6f8e9d1e8b9a3c4e9f8a7b6c5d4e3f2a1b0c9d8e7f6e5d4c3b2a1/merged”,
“UpperDir”: “/var/lib/docker/overlay2/5e6f8e9d1e8b9a3c4e9f8a7b6c5d4e3f2a1b0c9d8e7f6e5d4c3b2a1/diff”,
“WorkDir”: “/var/lib/docker/overlay2/5e6f8e9d1e8b9a3c4e9f8a7b6c5d4e3f2a1b0c9d8e7f6e5d4c3b2a1/work”
},
“Name”: “overlay2”
},
“RootFS”: {
“Type”: “layers”,
“Layers”: [“sha256:sha256:0e5e1810212a4b322f32d49178426f1b31188536916b525f8336145624f11d3c”]
},
“Metadata”: {
“LastTagTime”: “2026-04-10T10:20:00Z”
}
}
]
# 删除镜像
$ docker rmi nginx:1.24
Untagged: nginx:1.24
Untagged: nginx@sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aa
Deleted: sha256:605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85
# 清理未使用的镜像
$ docker image prune -f
Deleted Images:
untagged: ubuntu:20.04
untagged: ubuntu@sha256:626ffe58f6e7566e00254b638eb7e0f3b11d4da9675088f4781a50ae288f3322
deleted: sha256:08d22c0ceb150d95c9288c99546326458c3f638009d3b185867f3a249b6a30ee
Total reclaimed space: 72.8MB

from Docker视频:www.itpux.com

3.2 容器基本操作

容器的基本操作包括创建、启动、停止、删除等:

# 创建容器(不启动)
$ docker create –name fgedu-container ubuntu:22.04
1234567890ab1234567890ab1234567890ab1234567890ab1234567890ab123456
# 启动容器
$ docker start fgedu-container
fgedu-container
# 创建并启动容器
$ docker run -it –name fgedu-container2 ubuntu:22.04 /bin/bash
root@fgedu-container2:/#
# 查看运行中的容器
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1234567890ab ubuntu:22.04 “/bin/bash” 1 minute ago Up 1 minute fgedu-container2
# 查看所有容器(包括停止的)
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1234567890ab ubuntu:22.04 “/bin/bash” 1 minute ago Up 1 minute fgedu-container2
9876543210ba ubuntu:22.04 “/bin/bash” 5 minutes ago Exited (0) 3 minutes ago fgedu-container
# 停止容器
$ docker stop fgedu-container2
fgedu-container2
# 暂停容器
$ docker pause fgedu-container2
fgedu-container2
# 恢复容器
$ docker unpause fgedu-container2
fgedu-container2
# 删除容器
$ docker rm fgedu-container
fgedu-container
# 强制删除运行中的容器
$ docker rm -f fgedu-container2
fgedu-container2
# 清理停止的容器
$ docker container prune -f
Deleted Containers:
1234567890ab1234567890ab1234567890ab1234567890ab1234567890ab123456
Total reclaimed space: 0B

Part04-生产案例与实战讲解

4.1 镜像操作实战

实战场景:构建自定义Nginx镜像

# 创建Dockerfile目录
$ mkdir -p ~/docker/nginx
$ cd ~/docker/nginx
# 创建Dockerfile文件
$ cat > Dockerfile << 'EOF' FROM nginx:1.24 # 复制自定义配置文件 COPY nginx.conf /etc/nginx/nginx.conf # 复制静态文件 COPY html/ /usr/share/nginx/html/ # 暴露端口 EXPOSE 80 # 启动nginx CMD ["nginx", "-g", "daemon off;"] EOF # 创建nginx.conf文件 $ cat > nginx.conf << 'EOF' user nginx; worker_processes auto; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } } EOF # 创建html目录和index.html文件 $ mkdir -p html $ cat > html/index.html << 'EOF'

Hello, Docker!

This is a custom Nginx image built with Docker.

EOF
# 构建镜像
$ docker build -t fgedu/nginx:1.0 .
Sending build context to Docker daemon 10.24kB
Step 1/5 : FROM nginx:1.24
—> 605c77e624dd
Step 2/5 : COPY nginx.conf /etc/nginx/nginx.conf
—> 1234567890ab
Step 3/5 : COPY html/ /usr/share/nginx/html/
—> 234567890abc
Step 4/5 : EXPOSE 80
—> Running in 34567890abcd
Removing intermediate container 34567890abcd
—> 34567890abce
Step 5/5 : CMD [“nginx”, “-g”, “daemon off;”]
—> Running in 4567890abcf
Removing intermediate container 4567890abcf
—> 4567890abde
Successfully built 4567890abde
Successfully tagged fgedu/nginx:1.0
# 查看构建的镜像
$ docker images | grep fgedu/nginx
fgedu/nginx 1.0 4567890abde 1 minute ago 142MB

更多视频教程www.fgedu.net.cn

4.2 容器操作实战

实战场景:运行自定义Nginx容器

# 运行Nginx容器
$ docker run -d –name fgedu-nginx -p 8080:80 fgedu/nginx:1.0
1234567890ab1234567890ab1234567890ab1234567890ab1234567890ab123456
# 查看容器状态
$ docker ps | grep fgedu-nginx
1234567890ab fgedu/nginx:1.0 “nginx -g ‘daemon of…” 1 minute ago Up 1 minute 0.0.0.0:8080->80/tcp fgedu-nginx
# 访问Nginx服务
$ curl http://localhost:8080

Hello, Docker!

This is a custom Nginx image built with Docker.

# 查看容器日志
$ docker logs fgedu-nginx
172.17.0.1 – – [10/Apr/2026:10:30:00 +0000] “GET / HTTP/1.1” 200 167 “-” “curl/7.76.1” “-”
# 进入容器内部
$ docker exec -it fgedu-nginx /bin/bash
root@1234567890ab:/# ls -la /usr/share/nginx/html/
total 16
drwxr-xr-x 2 root root 4096 Apr 10 10:25 .
drwxr-xr-x 3 root root 4096 Apr 10 10:20 ..
-rw-r–r– 1 root root 247 Apr 10 10:25 index.html
root@1234567890ab:/# exit
exit
# 停止并删除容器
$ docker stop fgedu-nginx
fgedu-nginx
$ docker rm fgedu-nginx
fgedu-nginx

学习交流加群风哥微信: itpux-com

Part05-风哥经验总结与分享

5.1 操作常见问题解决

风哥提示:在操作Docker镜像和容器时,可能会遇到各种问题,以下是常见问题及解决方案。

  • 镜像拉取失败
    • 检查网络连接是否正常
    • 配置镜像加速器,如阿里云、网易云等
    • 检查Docker Hub是否可访问
  • 容器启动失败
    • 检查容器日志:docker logs <container-id>
    • 检查端口是否被占用:netstat -tulpn | grep <port>
    • 检查挂载的卷是否正确
  • 容器无法删除
    • 确保容器已停止:docker stop <container-id>
    • 使用强制删除:docker rm -f <container-id>
  • 镜像删除失败
    • 确保没有容器使用该镜像:docker ps -a | grep <image-id>
    • 先删除使用该镜像的容器,再删除镜像

学习交流加群风哥QQ113257174

5.2 最佳实践建议

  • 镜像管理最佳实践
    • 使用多阶段构建减小镜像体积
    • 使用Alpine作为基础镜像,减少镜像大小
    • 定期清理未使用的镜像,释放存储空间
    • 为镜像添加详细的标签和描述
  • 容器管理最佳实践
    • 使用--restart参数设置容器重启策略
    • 使用数据卷或绑定挂载持久化数据
    • 设置合理的容器资源限制
    • 使用容器名称而不是容器ID,便于管理
  • 安全最佳实践
    • 使用非root用户运行容器
    • 定期更新基础镜像,获取安全补丁
    • 限制容器的网络访问权限
    • 避免在容器中存储敏感信息,使用环境变量或密钥管理服务
  • 性能最佳实践
    • 使用--memory--cpus限制容器资源
    • 使用--network host提高网络性能(仅在安全环境中使用)
    • 合理配置容器的日志驱动,避免日志占用过多空间
    • 使用docker stats监控容器资源使用情况

更多学习教程公众号风哥教程itpux_com

from Docker视频:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息