1980 字
10 分钟
Docker安装记录
2025-03-24

准备工作#

安装Docker前需要确认电脑已经安装了WSL

下载并安装#

官网链接:docker官网

安装后重启电脑,然后在Power Shell里输入以下命令来验证Docker是否成功安装,如果成功安装会显示Docker的版本

Terminal window
docker --version

接下来,注册一个Docker Hub账号并登录

然后可以运行一个简单的Docker容器来验证是否成功安装

Terminal window
docker run hello-world

如果从服务器成功拉取了hello-world 镜像并运行了容器,会显示Hello from Docker!,说明Docker 安装和运行正常

配置镜像加速(可选)#

国内访问Docker Hub的速度可能较慢,可以选择配置一个国内的镜像

Settings→Docker Engine

image-20250322123156274

配置国内源后的代码如下:

{
"registry-mirrors":[
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
],
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false
}

目前网上的教程都是给的这几个源,但是我实测是连不上的,还是需要用魔法连到docker官方的源去拉取镜像

Docker常用命令#

以下是一些常用的 Docker 命令,涵盖了镜像管理、容器管理、网络管理、数据卷管理等方面:


镜像管理#

  1. 拉取镜像

    Terminal window
    docker pull <image-name>:<tag>

    示例:docker pull ubuntu:latest

  2. 列出本地镜像

    Terminal window
    docker images
  3. 删除本地镜像

    Terminal window
    docker rmi <image-id>

    示例:docker rmi ubuntu:latest

  4. 构建镜像

    Terminal window
    docker build -t <image-name>:<tag> <path-to-dockerfile>

    示例:docker build -t my-app:1.0 .

  5. 推送镜像到仓库

    Terminal window
    docker push <image-name>:<tag>

    示例:docker push my-app:1.0

  6. 查看镜像历史

    Terminal window
    docker history <image-name>

容器管理#

  1. 运行容器

    Terminal window
    docker run <options> <image-name>

    示例:docker run -it ubuntu bash

  2. 列出正在运行的容器

    Terminal window
    docker ps
  3. 列出所有容器(包括已停止的)

    Terminal window
    docker ps -a
  4. 启动已停止的容器

    Terminal window
    docker start <container-id>
  5. 停止容器

    Terminal window
    docker stop <container-id>
  6. 删除容器

    Terminal window
    docker rm <container-id>
  7. 进入运行中的容器

    Terminal window
    docker exec -it <container-id> <command>

    示例:docker exec -it my-container bash

  8. 查看容器日志

    Terminal window
    docker logs <container-id>
  9. 查看容器详细信息

    Terminal window
    docker inspect <container-id>
  10. 复制文件到容器

    Terminal window
    docker cp <local-path> <container-id>:<container-path>

    示例:docker cp my-file.txt my-container:/app/

  11. 从容器复制文件到主机

    Terminal window
    docker cp <container-id>:<container-path> <local-path>

    示例:docker cp my-container:/app/my-file.txt ./


网络管理#

  1. 列出网络

    Terminal window
    docker network ls
  2. 创建网络

    Terminal window
    docker network create <network-name>
  3. 连接容器到网络

    Terminal window
    docker network connect <network-name> <container-id>
  4. 断开容器与网络的连接

    Terminal window
    docker network disconnect <network-name> <container-id>
  5. 删除网络

    Terminal window
    docker network rm <network-name>

数据卷管理#

  1. 列出数据卷

    Terminal window
    docker volume ls
  2. 创建数据卷

    Terminal window
    docker volume create <volume-name>
  3. 删除数据卷

    Terminal window
    docker volume rm <volume-name>
  4. 挂载数据卷到容器

    Terminal window
    docker run -v <volume-name>:<container-path> <image-name>

    示例:docker run -v my-volume:/data ubuntu

  5. 查看数据卷详细信息

    Terminal window
    docker volume inspect <volume-name>

Docker Compose#

  1. 启动服务

    Terminal window
    docker-compose up
  2. 后台启动服务

    Terminal window
    docker-compose up -d
  3. 停止服务

    Terminal window
    docker-compose down
  4. 查看服务状态

    Terminal window
    docker-compose ps
  5. 查看服务日志

    Terminal window
    docker-compose logs

其他常用命令#

  1. 查看 Docker 版本

    Terminal window
    docker --version
  2. 查看 Docker 系统信息

    Terminal window
    docker info
  3. 清理未使用的镜像、容器、网络和数据卷

    Terminal window
    docker system prune
  4. 强制清理所有未使用的资源

    Terminal window
    docker system prune -a
  5. 登录 Docker Hub

    Terminal window
    docker login
  6. 登出 Docker Hub

    Terminal window
    docker logout

常用选项#

-d:后台运行容器(detached mode)。 • -it:以交互模式运行容器(interactive + TTY)。 • -p:映射端口(<host-port>:<container-port>)。 • -v:挂载数据卷(<host-path>:<container-path>)。 • --name:为容器指定名称。 • --rm:容器退出后自动删除。


示例#

  1. 运行一个 Nginx 容器并映射端口:

    Terminal window
    docker run -d -p 8080:80 --name my-nginx nginx
  2. 使用 Docker Compose 启动一个多容器应用:

    Terminal window
    docker-compose up -d
  3. 清理未使用的资源:

    Terminal window
    docker system prune

这些命令涵盖了 Docker 的常见操作场景。根据你的需求,可以灵活组合使用这些命令来管理 Docker 容器和镜像。

Ubuntu环境安装Docker#

安装Docker#

Terminal window
#安装前先卸载操作系统默认安装的docker,
sudo apt-get remove docker docker-engine docker.io containerd runc
#安装必要支持
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release

添加GPG Key

Terminal window
#添加 Docker 官方 GPG key (可能国内现在访问会存在问题)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 阿里源(推荐使用阿里的gpg KEY)
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

添加apt源

Terminal window
#添加 apt 源:
#Docker官方源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#阿里apt源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

添加后更新源

Terminal window
#更新源
sudo apt update
sudo apt-get update

安装docker

Terminal window
#安装最新版本的Docker
sudo apt install docker-ce docker-ce-cli containerd.io
#等待安装完成
#查看Docker版本
sudo docker version
#查看Docker运行状态
sudo systemctl status docker

安装docker命令补全工具

Terminal window
sudo apt-get install bash-completion
sudo curl -L https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker -o /etc/bash_completion.d/docker.sh
source /etc/bash_completion.d/docker.sh

(可选)允许非Root用户执行docker命令#

当我们安装好了Docker之后,有两种方式来执行docker 命令

  • 在docker命令前加上sudo, 比如:sudo docker ps
  • sudo -i 切换至root用户,再执行docker 命令

添加docker用户组

Terminal window
sudo groupadd docker

将当前用户添加到用户组

Terminal window
sudo usermod -aG docker $USER

使权限生效

Terminal window
newgrp docker

测试

Terminal window
#查看所有容器
docker ps -a

我们需要编辑 ~/.bashrc文件,并在文件末尾增加如下一行,如果不在.bashrc文件中增加下面这一行命令

Terminal window
#如果没有此行命令,你会发现,当你每次打开新的终端
#你都必须先执行一次 “newgrp docker” 命令
#否则当前用户还是不可以执行docker命令
groupadd -f docker

最后更新.bashrc文件

Terminal window
source ~/.bashrc

Docker无法拉取镜像问题#

1️⃣方法一:最简单的解决方案:梯子开全局模式(TUN模式)

2️⃣方法二:也可以到镜像站点下载镜像:https://docker.aityp.com/

下载镜像后改tag使用

例如我在渡渡鸟里下载了nginx-1.25镜像,下载后导入:

Terminal window
docker load -i nginx-1.25.tar

然后手动修改Tag

Terminal window
docker tag <IMAGE_ID> nginx:1.25

假如我从daocloud拉取了mongo镜像,拉取后发现该镜像的REPOSITORY字段为docker.m.daocloud.io/library/mongo而不是mongo,我在docker-compose.yaml中指定的是mongo,如果不做处理,在运行docker compose时不会使用我从加速站点拉取的镜像

解决办法1:修改docker-compose.yml,匹配本地镜像名

将 image 改为本地镜像的完整 REPOSITORY

Terminal window
services:
mongodb:
image: docker.m.daocloud.io/library/mongo # 与 `docker images` 显示的镜像名一致
# 其他配置...

解决方法2:给本地镜像添加 mongo 标签(推荐)​

通过 docker tag 让本地镜像也能响应 mongo 的请求:

Terminal window
docker tag docker.m.daocloud.io/library/mongo mongo:latest

通过docker images验证,输出如下:

Terminal window
docker.m.daocloud.io/library/mongo latest abc123...
mongo latest abc123... # 新增的标签

之后,docker-compose.yml 中的 image: mongo 就能匹配到本地镜像。

另一个例子:

Terminal window
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis alpine 4638573e9d10 7 days ago 70.5MB
mongo latest 3628b824922a 2 weeks ago 908MB
docker.m.daocloud.io/library/mongo latest 3628b824922a 2 weeks ago 908MB
innei/mx-server latest 2773a2d958ec 4 weeks ago 461MB
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/1panel/openresty 1.21.4.3-3-3-focal 47fabb474247 13 months ago 667MB
# 执行命令时要带上版本,否则报错
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/1panel/openresty:1.21.4.3-3-3-focal openresty:latest1.27.1.2-2-2-focal

3️⃣方法三:另外,我们可以在docker daemon 配置文件中增加国的可用的 docker hub mirror ,目前可用的国内docker hub 镜像,https://docker.m.daocloud.io。

找到你的daemon.json 文件,通常在 /etc/docker/daemon.json 这个位置

在daemon.json 中增加

Terminal window
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.sunzishaokao.com",
"https://docker.211678.top",
"https://docker.1panel.live",
"https://hub.rat.dev",
"https://docker.m.daocloud.io",
"https://do.nark.eu.org",
"https://dockerpull.com",
"https://dockerproxy.cn",
"https://docker.awsl9527.cn",
"https://docker.imgdb.de",
"https://docker-0.unsee.tech",
"https://docker.hlmirror.com"
],
"exec-opts": ["native.cgroupdriver=systemd"]
}

然后重启docker服务

Terminal window
sudo systemctl daemon-reload
sudo systemctl restart docker

验证配置是否生效

Terminal window
docker info | grep -A 10 "Registry Mirrors"

输出应该包含DaoCloud的镜像地址:

Registry Mirrors: https://docker.m.daocloud.io/

或者手动指定DaoCloud镜像源(临时)

以拉取mongo镜像为例:

Terminal window
docker pull docker.m.daocloud.io/library/mongo

注意:library/ 是 Docker Hub 官方镜像的命名空间(如 mongo 实际路径为 library/mongo)。

4️⃣方法四:在能拉取的环境下载然后传到服务器中

例如我本地可以拉取innei/mx-server镜像,我就先在本地拉取镜像

Terminal window
docker pull innei/mx-server:latest

镜像拉取完毕后保存到本地

Terminal window
docker save innei/mx-server -o mx-server.tar
  • 注意,这里保存的文件名只要自己能认识就行,可见 REPOSITORY 名称(innei/mx-server)会被完整保留

将本地文件传输到服务器,然后在服务器中导入:

Terminal window
docker load -i mx-server.tar

导入后可以通过docker images验证

Docker安装记录
https://fuwari.cbba.top/posts/docker安装记录/
作者
Chen_Feng
发布于
2025-03-24
许可协议
CC BY-NC-SA 4.0