Docker 安装及基础操作

Docker 安装及基础操作

Docker 安装及基础操作


一、Docker 安装

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

① Windows 下安装 Docker

  1. win+s 搜索 windows功能, 勾选下面两个选项,根据提示重启电脑。
  1. 根据自己电脑CPU型号下载对应的安装包。

以管理员身份运行cmd 并执行以下命令

wsl --set-default-version 2 wsl --update --web-download 
在这里插入图片描述

下载完成后双击安装即可,默认安装在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 为例

启动 docker

sudo systemctl start docker

安装 docker

sudosh install-docker.sh 

下载脚本

curl-fsSL https://get.docker.com -o install-docker.sh 

③ Mac 下安装 Docker

  • 请参考其他博客。

二、基本指令介绍

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

(0)配置Docker 的镜像站

重启docker

sudo systemctl restart docker

修改以下内容, 添加国内镜像源

{"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/"]}

编辑 daemon.json 文件

sudovim /etc/docker/daemon.json 

(1)拉取镜像

    • dicker.io: 表示registry仓库地址
    • library : 命名空间,即每个作者的名字
    • nginx:latest: 表示 镜像名:镜像版本号,latest 表示最新版本

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

# 获取最新的 nginx 镜像sudodocker pull nginx # 从官方仓库的官方命名空间里下载最新版本的nginx docker镜像sudodocker pull docker.io/library/nginx:latest # 拉取特定 cpu 架构下的nginx镜像sudodocker pull --plaform=xxx nginx 

(2)查看所有 docker 镜像

sudodocker images 

(3)删除下载的镜像

sudo docker rmi 镜像ID/镜像名

sudodocker rmi nginx 

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

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

sudo docker run 镜像名

sudodocker run -d--name test_nginx -p80:80 -v /blog/html:/usr/share/nginx/html nginx 
① -v 挂载卷
  • 用于持久化数据,避免容器删除后数据丢失。

删除所有没有任何容器在使用的卷

sudodocker volume prune -a

删除指定命名卷

sudodocker volume rm nginx_html 

查看所有的命名卷

sudodocker volume list 

命名卷在宿主机的真实位置, sudo docker volume inspect + 命名卷名字

sudodocker volume inspect nginx_html 

命名卷在第一次使用的时候,docker会把容器的文件夹内容同步到命名卷文件夹里面,进行一个初始化,而绑定挂载却没有这个功能。

命名卷挂载创建一个名为 nginx_html 的存储空间(命名卷)

sudodocker volume create nginx_html 

-v 卷的名字:容器内目录

sudodocker run -d-p80:80 -v nginx_html:/usr/share/nginx/html nginx 

绑定挂载-v 宿主机目录:容器内目录

sudodocker run -d-p80:80 -v /blog/html:/usr/share/nginx/html nginx 
② -e 往容器里面传递环境变量

在windows 上访问

mongosh "mongodb://用户名:密码@服务器IP地址:27017"

如:在云服务器上启动一个mongo 数据库,并设置数据库的用户名和密码两个参数

sudodocker run -d\--name my_mongo \-p27017:27017 \-eMONGO_INITDB_ROOT_USERNAME=mongoadmin \-eMONGO_INITDB_ROOT_PASSWORD=secret \ mongo 

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

  • ps: process status, 进程状态,只能查看到正在运行的容器

-a: 表示all, 查看所有的容器状态

sudodockerps-a

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

  • sudo docker start 容器ID/容器名
  • 查看容器创建时的参数

inspect: 检查,审阅的意思

sudodocker inspect 容器ID/容器名 

sudo docker stop 容器ID/容器名

sudodocker start nginx sudodocker stop nginx 

(7) 删除容器

    • rm : remove 删除
    • -f : force 强制删除

sudo docker rm 容器ID/容器名

# 删除名为 test_nginx 的容器sudodockerrm-f test_nginx 

(8)进入容器内部,用于临时调试一个容器

    • -it: 让控制台进入容器内部进行交互
    • –rm : 当容器停止(退出)的时候,自动删除。
    • 退出的指令: exit

alpine : 轻量级的linux 系统

sudodocker run -it--rm alpine 

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

  • –restart always: 只要容器停止了,就立即重启。包含容器因为内部错误崩溃或宿主机断电等场景。

–restart unless-stopped: 跟always 类似,但是手动停止的容器,不会自动重启。

sudodocker run -d--restart always nginx sudodocker run -d--restart unless-stopped nginx 

(10)查看容器的日志

  • sudo docker logs 容器ID/容器名 -f

-f : follow, 追踪输出。

sudodocker logs test_nginx -f

(11)在容器内部执行Linux指令

进入容器内部,获得一个交互式的命令行环境sudo docker exec -it xxxxx(容器ID) /bin/sh

# 创建一个容器sudodocker run -d-p80:80 nginx # 进入容器内部sudodockerexec-it nginx的ID /bin/sh cd /usr/share/nginx/html # 容器内部是一个极简的操作系统,很多命令会缺失,有些命令要自己下载# 首先查看容器内的linux发行版本cat /etc/os-release # 此时发现是debian的,包管理是apt,如果是centos, 则使用yum# 更新索引apt update aptinstallvim# 修改文件等操作 ...

sudo docker exec xxxxx(容器ID) linux指令

# 进入容器内部查看有哪些进程sudodockerexec 容器ID ps-ef

三、Dockerfile

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

四、Docker 网络

① 默认是bridge, 桥接模式
  • 在浏览器输入: 服务器IP地址:9000 即可访问, 网页登录的账号密码是,admin:pass
  • PS. 如果你配置好之后无法访问,请查看防火墙是否打开,云安全组是否打开,端口号映射是否正确。我第一次使用的是Centos 9, 不知道为什么一直打不开,切换到Ubuntu-24.04-STL 版本后,测试可正常使用。

mongodb 的网页客户端

sudodocker run -d\--name my_mongo_express \-p9000:8081 \-eME_CONFIG_MONGODB_SERVER=my_mongodb \-eME_CONFIG_MONGODB_ADMINUSERNAME=admin \-eME_CONFIG_MONGODB_ADMINPASSWORD=123456\--network network1 \ mongo-express 

创建一个容器,且宿主机无法访问。并将这个容器添加到 network1, --network network1

sudodocker run -d\--name my_mongodb \--hostname mongo \-eMONGO_INITDB_ROOT_USERNAME=admin \-eMONGO_INITDB_ROOT_PASSWORD=123456\--network network1 \ mongo 

创建一个子网 network1

sudodocker network create network1 
② host 主机模式

docker 容器共享宿主机的网络,容器直接使用宿主机的IP地址,无需端口映射。即容器内的服务直接运行在宿主机的端口上。

sudodocker run -d--networkhost nginx 
③ none 不连网模式
④查看网络,删除网络

删除创建的子网,无法删除默认的三种网络模式:bridge, host, none

sudodocker network rm 网络ID/网络名 

查看所有网络,包括创建的子网

sudodocker network list 

五、compose.yaml

docker 会严格寻找本目录下的,compose.yaml 文件,如果没有则报错。可以使用-f (–file)参数指定compose文件。

sudodocker compose -f /file/compose.yaml 

启动容器

sudodocker compose start 

仅停止容器

sudodocker compose stop 

停止并删除容器

sudodocker compose down 

运行并创建文件中定义的容器,同一个文件中的容器,默认属于同一个子网。如果已经执行过下面指令,再次执行不会产生效果。

sudodocker compose up -d

轻量级容器编排技术

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

六、你可能遇到的问题

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

解决办法?打开设置 --> 网络和Internet --> 代理 --> 手动设置代理(使用代理服务器)–>关闭并保存。

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

END

Read more

【Linux】TCP可靠性与性能优化详解:从确认应答到拥塞控制

【Linux】TCP可靠性与性能优化详解:从确认应答到拥塞控制

文章目录 * TCP可靠性与性能优化详解:从确认应答到拥塞控制 * 一、确认应答(ACK)机制 * 1.1 什么是确认应答 * 1.2 序列号和确认号的作用 * 1.3 确认应答的图示 * 1.4 确认应答的问题 * 二、超时重传机制 * 2.1 为什么需要超时重传 * 2.2 超时重传的原理 * 2.3 超时重传的图示 * 2.4 超时时间如何确定 * 2.5 动态计算超时时间 * 2.6 重传次数限制 * 三、滑动窗口机制 * 3.1 滑动窗口的核心思想 * 3.2 滑动窗口的工作原理 * 3.3 滑动窗口的详细图示

By Ne0inhk

Ubuntu新手必看:如何快速更换国内源(阿里/清华/中科大源对比)

Ubuntu 新手的第一道“加速”关:国内镜像源深度解析与实战指南 刚装好 Ubuntu,那种清爽的桌面和开箱即用的感觉确实不错。但当你兴冲冲地打开终端,准备用 apt install 装点东西时,进度条那慢如蜗牛的爬行速度,是不是瞬间浇灭了一半的热情?别急着怀疑自己的网络,这几乎是每个国内 Ubuntu 用户都会遇到的“新手墙”。问题的核心,往往不在于你的宽带,而在于系统默认连接的软件仓库服务器远在海外,网络延迟和带宽限制成了最大的瓶颈。 解决这个问题的方法,就是“换源”——将系统的软件源地址,更换为位于国内的镜像服务器。这听起来像是个简单的操作,但背后其实有不少门道:国内有哪些可靠的镜像站?阿里云、清华大学、中国科学技术大学(USTC)的源有什么区别?为什么别人的源换上去飞快,你的却报了一堆错?今天,我们就来彻底拆解这个问题。这不仅仅是复制粘贴几行命令,而是帮你理解原理、掌握选择、并能在遇到问题时自己动手排查。无论你是刚接触 Linux 的开发新手,还是希望优化工作流效率的资深用户,一个配置得当的软件源,

By Ne0inhk
玩转ClaudeCode:ClaudeCode安装教程(Windows+Linux+MacOS)

玩转ClaudeCode:ClaudeCode安装教程(Windows+Linux+MacOS)

本文介绍如何安装 AI 编码界一骑绝尘的最强工具 ——— Claude Code。安装不同的操作系统环境,本文会从 Windows、Linux、Mac 三个不同的系统环境依次介绍安装方法。 其中,Windows 系统作为大家最主流的操作系统,提供了两种安装方式,一种方式是直接在 Windows 的终端里安装,另一种是在 Windows 的子系统(WSL)内完成安装。其中,通过 WSL 安装,我们又可以分为,WSL 环境的直装和基于 WSL 的容器化安装(Docker),几种方法各有利弊,但均可正常使用。 Windows 环境直装 Claude Code 1. 获取 Claude Code 账号 访问 Claude Code 中国镜像站,完成账户注册。 输入邀请码

By Ne0inhk
Flutter 三方库 swagger_parser 自动化打通鸿蒙 API 通信(一键将 Swagger 转化为 Dart 模型)

Flutter 三方库 swagger_parser 自动化打通鸿蒙 API 通信(一键将 Swagger 转化为 Dart 模型)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 在进行 OpenHarmony 项目开发时,最枯燥的工作莫过于根据后端提供的 Swagger (OpenAPI) 文档手动编写一个个的 Request 类、Response 类和 API Client。这不仅低效,而且极易因文档更新没对齐而导致 Bug。 swagger_parser 是一个强大的命令行工具,它能直接读取本地或网络上的 Swagger JSON/YAML 文件,自动为你生成完整的 Dart 数据类和 Dio/Chopper API 控制器。 一、核心工作流 Swagger JSON / YAML Swagger Parser Dart 数据模型 (JSON Serialized) Dio / Chopper

By Ne0inhk