准备工作
安装Docker前需要确认电脑已经安装了WSL
下载并安装
官网链接:docker官网
安装后重启电脑,然后在Power Shell里输入以下命令来验证Docker是否成功安装,如果成功安装会显示Docker的版本
docker --version
接下来,注册一个Docker Hub账号并登录
然后可以运行一个简单的Docker容器来验证是否成功安装
docker run hello-world
如果从服务器成功拉取了hello-world
镜像并运行了容器,会显示Hello from Docker!
,说明Docker 安装和运行正常
配置镜像加速(可选)
国内访问Docker Hub的速度可能较慢,可以选择配置一个国内的镜像
Settings→Docker Engine
配置国内源后的代码如下:
{ "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 命令,涵盖了镜像管理、容器管理、网络管理、数据卷管理等方面:
镜像管理
-
拉取镜像
Terminal window docker pull <image-name>:<tag>示例:
docker pull ubuntu:latest
-
列出本地镜像
Terminal window docker images -
删除本地镜像
Terminal window docker rmi <image-id>示例:
docker rmi ubuntu:latest
-
构建镜像
Terminal window docker build -t <image-name>:<tag> <path-to-dockerfile>示例:
docker build -t my-app:1.0 .
-
推送镜像到仓库
Terminal window docker push <image-name>:<tag>示例:
docker push my-app:1.0
-
查看镜像历史
Terminal window docker history <image-name>
容器管理
-
运行容器
Terminal window docker run <options> <image-name>示例:
docker run -it ubuntu bash
-
列出正在运行的容器
Terminal window docker ps -
列出所有容器(包括已停止的)
Terminal window docker ps -a -
启动已停止的容器
Terminal window docker start <container-id> -
停止容器
Terminal window docker stop <container-id> -
删除容器
Terminal window docker rm <container-id> -
进入运行中的容器
Terminal window docker exec -it <container-id> <command>示例:
docker exec -it my-container bash
-
查看容器日志
Terminal window docker logs <container-id> -
查看容器详细信息
Terminal window docker inspect <container-id> -
复制文件到容器
Terminal window docker cp <local-path> <container-id>:<container-path>示例:
docker cp my-file.txt my-container:/app/
-
从容器复制文件到主机
Terminal window docker cp <container-id>:<container-path> <local-path>示例:
docker cp my-container:/app/my-file.txt ./
网络管理
-
列出网络
Terminal window docker network ls -
创建网络
Terminal window docker network create <network-name> -
连接容器到网络
Terminal window docker network connect <network-name> <container-id> -
断开容器与网络的连接
Terminal window docker network disconnect <network-name> <container-id> -
删除网络
Terminal window docker network rm <network-name>
数据卷管理
-
列出数据卷
Terminal window docker volume ls -
创建数据卷
Terminal window docker volume create <volume-name> -
删除数据卷
Terminal window docker volume rm <volume-name> -
挂载数据卷到容器
Terminal window docker run -v <volume-name>:<container-path> <image-name>示例:
docker run -v my-volume:/data ubuntu
-
查看数据卷详细信息
Terminal window docker volume inspect <volume-name>
Docker Compose
-
启动服务
Terminal window docker-compose up -
后台启动服务
Terminal window docker-compose up -d -
停止服务
Terminal window docker-compose down -
查看服务状态
Terminal window docker-compose ps -
查看服务日志
Terminal window docker-compose logs
其他常用命令
-
查看 Docker 版本
Terminal window docker --version -
查看 Docker 系统信息
Terminal window docker info -
清理未使用的镜像、容器、网络和数据卷
Terminal window docker system prune -
强制清理所有未使用的资源
Terminal window docker system prune -a -
登录 Docker Hub
Terminal window docker login -
登出 Docker Hub
Terminal window docker logout
常用选项
• -d
:后台运行容器(detached mode)。
• -it
:以交互模式运行容器(interactive + TTY)。
• -p
:映射端口(<host-port>:<container-port>
)。
• -v
:挂载数据卷(<host-path>:<container-path>
)。
• --name
:为容器指定名称。
• --rm
:容器退出后自动删除。
示例
-
运行一个 Nginx 容器并映射端口:
Terminal window docker run -d -p 8080:80 --name my-nginx nginx -
使用 Docker Compose 启动一个多容器应用:
Terminal window docker-compose up -d -
清理未使用的资源:
Terminal window docker system prune
这些命令涵盖了 Docker 的常见操作场景。根据你的需求,可以灵活组合使用这些命令来管理 Docker 容器和镜像。
Ubuntu环境安装Docker
安装Docker
#安装前先卸载操作系统默认安装的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
#添加 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源
#添加 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
添加后更新源
#更新源sudo apt updatesudo apt-get update
安装docker
#安装最新版本的Dockersudo apt install docker-ce docker-ce-cli containerd.io#等待安装完成
#查看Docker版本sudo docker version
#查看Docker运行状态sudo systemctl status docker
安装docker命令补全工具
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用户组
sudo groupadd docker
将当前用户添加到用户组
sudo usermod -aG docker $USER
使权限生效
newgrp docker
测试
#查看所有容器docker ps -a
我们需要编辑 ~/.bashrc文件,并在文件末尾增加如下一行,如果不在.bashrc文件中增加下面这一行命令
#如果没有此行命令,你会发现,当你每次打开新的终端#你都必须先执行一次 “newgrp docker” 命令#否则当前用户还是不可以执行docker命令groupadd -f docker
最后更新.bashrc文件
source ~/.bashrc
Docker无法拉取镜像问题
1️⃣方法一:最简单的解决方案:梯子开全局模式(TUN模式)
2️⃣方法二:也可以到镜像站点下载镜像:https://docker.aityp.com/
下载镜像后改tag使用
例如我在渡渡鸟里下载了nginx-1.25
镜像,下载后导入:
docker load -i nginx-1.25.tar
然后手动修改Tag
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
services: mongodb: image: docker.m.daocloud.io/library/mongo # 与 `docker images` 显示的镜像名一致 # 其他配置...
解决方法2:给本地镜像添加 mongo 标签(推荐)
通过 docker tag 让本地镜像也能响应 mongo 的请求:
docker tag docker.m.daocloud.io/library/mongo mongo:latest
通过docker images
验证,输出如下:
docker.m.daocloud.io/library/mongo latest abc123...mongo latest abc123... # 新增的标签
之后,docker-compose.yml 中的 image: mongo 就能匹配到本地镜像。
另一个例子:
# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEredis alpine 4638573e9d10 7 days ago 70.5MBmongo latest 3628b824922a 2 weeks ago 908MBdocker.m.daocloud.io/library/mongo latest 3628b824922a 2 weeks ago 908MBinnei/mx-server latest 2773a2d958ec 4 weeks ago 461MBswr.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 中增加
{ "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服务
sudo systemctl daemon-reloadsudo systemctl restart docker
验证配置是否生效
docker info | grep -A 10 "Registry Mirrors"
输出应该包含DaoCloud的镜像地址:
Registry Mirrors: https://docker.m.daocloud.io/
或者手动指定DaoCloud镜像源(临时)
以拉取mongo
镜像为例:
docker pull docker.m.daocloud.io/library/mongo
注意:library/ 是 Docker Hub 官方镜像的命名空间(如 mongo 实际路径为 library/mongo)。
4️⃣方法四:在能拉取的环境下载然后传到服务器中
例如我本地可以拉取innei/mx-server
镜像,我就先在本地拉取镜像
docker pull innei/mx-server:latest
镜像拉取完毕后保存到本地
docker save innei/mx-server -o mx-server.tar
- 注意,这里保存的文件名只要自己能认识就行,可见 REPOSITORY 名称(innei/mx-server)会被完整保留
将本地文件传输到服务器,然后在服务器中导入:
docker load -i mx-server.tar
导入后可以通过docker images
验证