Docker 基础操作
本文最后更新于8 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

一、Docker 安装

Docker 是基于 Linux 的容器化技术。

① Windows 下安装 Docker

  1. win+s 搜索 windows功能, 勾选下面两个选项,根据提示重启电脑。
  1. 以管理员身份运行cmd 并执行以下命令 
  2. 根据自己电脑CPU型号下载对应的安装包。
wsl --set-default-version 2
wsl --update --web-downloadimage-20251223192744313
  1. 下载完成后双击安装即可,默认安装在C盘。如果你想指定安装到其他位置,需要以指令的形式安装, –installation-dir=安装的路径 start /w “” “Docker Desktop Installer.exe” install –installation-dir=D:\Develop\Docker

② Linux 下安装 Docker

官方地址: https://get.docker.com/

【请科学上网】本文以 Ubuntu-24.04.3-STL 为例

  1. 下载脚本 curl -fsSL https://get.docker.com -o install-docker.sh
  2. 安装 docker sudo sh install-docker.sh
  3. 启动 docker sudo systemctl start docker

③ Mac 下安装 Docker

  • 请参考其他博客。

二、基本指令介绍

Docker官方镜像仓库: https://hub.docker.com

(0)配置Docker 的镜像站

  1. 编辑 daemon.json 文件 sudo vim /etc/docker/daemon.json
  2. 修改以下内容, 添加国内镜像源 {
         “registry-mirrors”: [
             “https://docker.m.daocloud.io”,
             “https://mirror.ccs.tencentyun.com”,
             “https://docker.1panel.live”,
             “https://hub.rat.dev”,
             “https://docker.mirrors.ustc.edu.cn/”,
             “https://hub-mirror.c.163.com/”
        ]
     }
  3. 重启docker sudo systemctl restart docker

(1)拉取镜像

  • sudo docker pull 镜像名[:镜像版本] (不指定版本号,默认拉取最新版本)# 获取最新的 nginx 镜像
    sudo docker pull nginx

    # 从官方仓库的官方命名空间里下载最新版本的nginx docker镜像
    sudo docker pull docker.io/library/nginx:latest
    # 拉取特定 cpu 架构下的nginx镜像
    sudo docker pull –plaform=xxx nginx
    • dicker.io: 表示registry仓库地址
    • library : 命名空间,即每个作者的名字
    • nginx:latest: 表示 镜像名:镜像版本号,latest 表示最新版本

(2)查看所有 docker 镜像

  • sudo docker images

(3)删除下载的镜像

  • sudo docker rmi 镜像ID/镜像名sudo docker rmi nginx

(4)创建并运行一个容器

  • sudo docker create 镜像名, 创建一个容器,不运行。
  • sudo docker run 镜像名sudo docker run -d –name test_nginx -p 80:80 -v /blog/html:/usr/share/nginx/html nginx
    • -d:detached mode 分离模式,表示让容器在后台运行,不会阻塞当前的窗口
    • –name: 给容器起一个名字 test_nginx
    • -p:端口映射,宿主机端口:容器内端口。 将主机的80端口映射到容器的80端口
    • -v:volume 挂载卷, 宿主机目录:容器内目录。将宿主机目录/blog/html与容器内目录/usr/share/nginx/html相互关联。此挂载方式属于绑定挂载,使用绑定挂载时,宿主机目录会暂时覆盖容器内目录。相互关联的目录相当于一个全局资源,任意一方对其修改都会使之改变。比如在容器内部新增一个test.txt 文件,在宿主机上就能看到新增的文件。当删除容器时,容器内部所有文件(包括关联的这个目录)都会被删除,但是宿主机上的这个关联的目录会被保存下来。

① -v 挂载卷

  • 用于持久化数据,避免容器删除后数据丢失。
  1. 绑定挂载-v 宿主机目录:容器内目录sudo docker run -d -p 80:80 -v /blog/html:/usr/share/nginx/html nginx
  2. 命名卷挂载 创建一个名为 nginx_html 的存储空间(命名卷)sudo docker volume create nginx_html-v 卷的名字:容器内目录sudo docker run -d -p 80:80 -v nginx_html:/usr/share/nginx/html nginx
  3. 命名卷在宿主机的真实位置, sudo docker volume inspect + 命名卷名字sudo docker volume inspect nginx_html命名卷在第一次使用的时候,docker会把容器的文件夹内容同步到命名卷文件夹里面,进行一个初始化,而绑定挂载却没有这个功能。
  4. 查看所有的命名卷sudo docker volume list
  5. 删除指定命名卷sudo docker volume rm nginx_html
  6. 删除所有没有任何容器在使用的卷sudo docker volume prune -a

② -e 往容器里面传递环境变量

  • 如:在云服务器上启动一个mongo 数据库,并设置数据库的用户名和密码两个参数sudo docker run -d \
    –name my_mongo \
    -p 27017:27017 \
    -e MONGO_INITDB_ROOT_USERNAME=mongoadmin \
    -e MONGO_INITDB_ROOT_PASSWORD=secret \
    mongo
  • 在windows 上访问mongosh “mongodb://用户名:密码@服务器IP地址:27017”

(5)查看 docker 容器的进程状态

  • ps: process status, 进程状态,只能查看到正在运行的容器
  • -a: 表示all, 查看所有的容器状态sudo docker ps -a

(6)启动/停止一个容器

  • sudo docker start 容器ID/容器名
  • sudo docker stop 容器ID/容器名sudo docker start nginx
    sudo docker stop nginx
  • 查看容器创建时的参数
  • inspect: 检查,审阅的意思sudo docker inspect 容器ID/容器名

(7) 删除容器

  • sudo docker rm 容器ID/容器名# 删除名为 test_nginx 的容器
    sudo docker rm -f test_nginx
    • rm : remove 删除
    • -f : force 强制删除

(8)临时调试一个容器

  • alpine : 轻量级的linux 系统sudo docker run -it –rm alpine
    • -it: 让控制台进入容器内部进行交互
    • –rm : 当容器停止(退出)的时候,自动删除。
    • 退出的指令: exit

(9)配置容器在停止时的重启策略

  • –restart always: 只要容器停止了,就立即重启。包含容器因为内部错误崩溃或宿主机断电等场景。
  • –restart unless-stopped: 跟always 类似,但是手动停止的容器,不会自动重启。 sudo docker run -d –restart always nginx
    sudo docker run -d –restart unless-stopped nginx

(10)查看容器的日志

  • sudo docker logs 容器ID/容器名 -f
  • -f : follow, 追踪输出。sudo docker logs test_nginx -f

(11)进入容器内部,并执行Linux指令

  • sudo docker exec xxxxx(容器ID) linux指令# 进入容器内部查看有哪些进程
    sudo docker exec 容器ID ps -ef
  • 进入容器内部,获得一个交互式的命令行环境sudo docker exec -it xxxxx(容器ID) /bin/sh# 创建一个容器
    sudo docker run -d -p 80:80 nginx
    # 进入容器内部
    sudo docker exec -it nginx的ID /bin/sh
    cd /usr/share/nginx/html

    # 容器内部是一个极简的操作系统,很多命令会缺失,有些命令要自己下载
    # 首先查看容器内的linux发行版本
    cat /etc/os-release
    # 此时发现是debian的,包管理是apt,如果是centos, 则使用yum
    # 更新索引
    apt update
    apt install vim
    # 修改文件等操作 …

三、Dockerfile

  • 详细记录了镜像是如何制作的

四、Docker 网络

① 默认是bridge, 桥接模式

  • 创建一个子网 network1sudo docker network create network1
  • 创建一个容器,且宿主机无法访问。并将这个容器添加到 network1, –network network1sudo docker run -d \
    –name my_mongodb \
    –hostname mongo \
    -e MONGO_INITDB_ROOT_USERNAME=admin \
    -e MONGO_INITDB_ROOT_PASSWORD=123456 \
    –network network1 \
    mongo
  • mongodb 的网页客户端sudo docker run -d \
    –name my_mongo_express \
    -p 9000:8081 \
    -e ME_CONFIG_MONGODB_SERVER=my_mongodb \
    -e ME_CONFIG_MONGODB_ADMINUSERNAME=admin \
    -e ME_CONFIG_MONGODB_ADMINPASSWORD=123456 \
    –network network1 \
    mongo-express
  • 在浏览器输入: 服务器IP地址:9000 即可访问, 网页登录的账号密码是,admin:pass
  • PS. 如果你配置好之后无法访问,请查看防火墙是否打开,云安全组是否打开,端口号映射是否正确。我第一次使用的是Centos 9, 不知道为什么一直打不开,切换到Ubuntu-24.04-STL 版本后,测试可正常使用。

② host 主机模式

  • docker 容器共享宿主机的网络,容器直接使用宿主机的IP地址,无需端口映射。即容器内的服务直接运行在宿主机的端口上。sudo docker run -d –network host nginx

③ none 不连网模式

④查看网络,删除网络

  • 查看所有网络,包括创建的子网sudo docker network list
  • 删除创建的子网,无法删除默认的三种网络模式:bridge, host, nonesudo docker network rm 网络ID/网络名

五、compose.yaml

  • 轻量级容器编排技术version: ‘3.8’ # Compose 文件版本,建议使用 3.8 以兼容最新 Docker 特性

    # 定义网络(对应 –network network1)
    networks:
    network1:
    driver: bridge # 默认桥接网络,与 Docker 命令的网络类型一致

    # 定义服务
    services:
    # MongoDB 服务(对应 my_mongodb 容器)
    my_mongodb:
    image: mongo # 使用的镜像
    container_name: my_mongodb # 容器名称
    hostname: mongo # 容器主机名
    restart: unless-stopped # 可选:容器退出时除非手动停止,否则自动重启
    environment:
    # 初始化 root 用户和密码(与 Docker 命令的环境变量一致)
    MONGO_INITDB_ROOT_USERNAME: admin
    MONGO_INITDB_ROOT_PASSWORD: 123456
    networks:
    – network1 # 加入 network1 网络

    # Mongo-Express 服务(对应 my_mongo_express 容器)
    my_mongo_express:
    image: mongo-express # 使用的镜像
    container_name: my_mongo_express # 容器名称
    restart: unless-stopped # 可选:自动重启
    ports:
    – “9000:8081” # 端口映射(主机:容器)
    environment:
    # 配置 MongoDB 连接信息
    ME_CONFIG_MONGODB_SERVER: my_mongodb # 连接的 MongoDB 服务名(容器名)
    ME_CONFIG_MONGODB_ADMINUSERNAME: admin # MongoDB 管理员用户名
    ME_CONFIG_MONGODB_ADMINPASSWORD: 123456 # MongoDB 管理员密码
    # 可选:关闭基本认证(默认 Mongo-Express 会有 admin/user 认证,如需关闭可添加)
    # ME_CONFIG_BASICAUTH_USERNAME: “”
    # ME_CONFIG_BASICAUTH_PASSWORD: “”
    networks:
    – network1 # 加入 network1 网络
    depends_on:
    – my_mongodb # 依赖 MongoDB 服务,确保先启动 MongoDB
  • 运行并创建文件中定义的容器,同一个文件中的容器,默认属于同一个子网。如果已经执行过下面指令,再次执行不会产生效果。sudo docker compose up -d
  • 停止并删除容器sudo docker compose down
  • 仅停止容器sudo docker compose stop
  • 启动容器sudo docker compose start
  • docker 会严格寻找本目录下的,compose.yaml 文件,如果没有则报错。可以使用-f (–file)参数指定compose文件。sudo docker compose -f /file/compose.yaml

六、你可能遇到的问题


END

  1. 问题描述?电脑已经连接上网络,QQ和微信也可以正常发送消息,但是浏览器显示网络无连接。
  2. 原因?如果你是第一次使用WSL,在科学上网的前提下,你的电脑会把自动代理设置打开。表现为:当你不开科学上网工具时,浏览器无法正常访问互联网。
  3. 解决办法?打开设置 –> 网络和Internet –> 代理 –> 手动设置代理(使用代理服务器)–>关闭并保存。

Docker 基础操作-zhique
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇