文章目录
Docker 安装
- 注:可能在windows中使用会报错,但是我因为再此之前安装过WLS,所以没有任何报错
- WTG: Windows10企业版中安装Docker
- 老本版Docker安装在windows 中一般需要开启“启用或关闭Windows功能”中的 “Hyper-V”(注意冲突:某些手机模拟器和老版本的VMware需要关闭此功能运行,更新版本的docker已经用WSL2代替“Hyper-V”了)
安装与换源
桌面版
- 下载(其中服务端的没有界面)下载之后点击安装即可,安装完只后重启windows。注:一台电脑上虚拟机好像不能与docker同时运行
- 安装完点击Restart,自动重启电脑
- 打开后在设置里添加镜像加速源 Docker Engine https://registry.docker-cn.com
{ "registry-mirrors": [
"https://registry.docker-cn.com",
"https://hub-mirror.c.163.com",
"https://ustc-edu-cn.mirror.aliyuncs.com",
"https://mirror.baidubce.com"
],
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"features": {
"buildkit": false
}
}
cli版
- 卸载旧版本(如果存在)
sudo apt remove -y docker.io docker-doc docker-compose podman-docker containerd runc
-
注意:这不会主动删除
/var/lib/docker中已有的数据。 -
更新软件包
sudo apt update
sudo apt install -y ca-certificates curl
- 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
- 添加 Docker 软件源
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 安装 Docker
sudo apt update
sudo apt install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin
- 安装完成后启动 Docker:
sudo systemctl enable docker
sudo systemctl start docker
安装一个镜像
获取别人的镜像
- 去docker的镜像仓库https://hub.docker.com/
- 比如直接搜索python
- 进入想安装的镜像的界面
- 点击tags,tags界面如下:

- 复制docker命令,拉取别人的镜像:docker pull python:3.7.13
- 在任何路径下,shift+鼠标右键:运行powershell
- 运行命令即可,运行完成只后即可在Docker软件中的Image部分看到新增的镜像
或者 自己使用Dockerfile创建一个镜像
我的“python”文件夹
----python
--|
|--Dockerfile
|--requirements.txt
|--test.py
Dockerfile中的内容
FROM python:3.7.13
WORKDIR ./
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD [ "python", "./test.py" ]
requirements.txt(为空)
test.py
for i in range(100000):
print(1)
在python目录中,shift+右键,打开powershell,执行:
docker build -t test . # 就会像pull一样进行下载与创建镜像
docker run test
注:可在 https://hub.docker.com/_/python中“How to use this image”部分找到Dockerfile文件中的命令
FROM python:3
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD [ "python", "./your-daemon-or-script.py" ]
运行容器
容器运行
# 后台运行容器
docker run -d --name mycontainer nginx
# 交互式运行容器
docker run -it --name mycontainer ubuntu /bin/bash
# 映射端口
docker run -d -p 8080:80 --name web nginx
# 映射目录
docker run -d -v /data:/app/data --name mycontainer nginx
# 自动重启
docker run -d --restart=always --name mycontainer nginx
# 指定环境变量
docker run -d -e NODE_ENV=production nginx
容器查看
# 查看正在运行的容器
docker ps
# 查看所有容器(包括已停止)
docker ps -a
# 查看容器详细信息
docker inspect mycontainer
# 查看容器日志
docker logs mycontainer
# 实时查看日志
docker logs -f mycontainer
# 查看容器资源占用
docker stats
# 查看容器进程
docker top mycontainer
容器启停
# 启动容器
docker start mycontainer
# 停止容器
docker stop mycontainer
# 重启容器
docker restart mycontainer
# 暂停容器
docker pause mycontainer
# 恢复容器
docker unpause mycontainer
# 强制终止容器
docker kill mycontainer
进入容器执行命令
# 进入运行中的容器(推荐)
docker exec -it mycontainer /bin/bash
# 如果没有 bash,使用 sh
docker exec -it mycontainer /bin/sh
# 在容器中执行单条命令
docker exec mycontainer ls -la
# 以 root 用户进入
docker exec -u root -it mycontainer /bin/bash
# 查看容器内环境变量
docker exec mycontainer env
文件复制
# 主机复制到容器
docker cp ./test.txt mycontainer:/app/
# 容器复制到主机
docker cp mycontainer:/app/test.txt ./
# 复制整个目录
docker cp ./data mycontainer:/app/
docker ps -a # 列举所有容器(默认只列举运行中的) 找到CONTAINER ID
# 运行结果
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3aa7b7b18f6f python:3.7.13 "python3" 30 minutes ago Up 30 minutes mystifying_meitner
# 在powershell中运行命令
## copy 主机->容器
docker cp test.py 3aa7b7b18f6f:/
## copy 容器->主机
docker cp 3aa7b7b18f6f:/bin ./ # 用docker cp mystifying_meitner:/bin ./同样
- 或将目录挂载到Docker
挂载目录:docker run -v D:/python:/mnt python:3.7.13 # /mnt /为linux目录格式
挂载目录:docker run -v D:/python:/mnt python:3.7.13# -v 本地目录:/容器目录 镜像名称:镜像tag
挂载目录有多种方式,这只是一种方式
# 解决闪退问题
docker run -it --name test -v **:/mnt -p 5000:5000 node5000:latest
ps:发现在这个编辑器中输入:/ 会变成 😕
容器删除
# 删除已停止的容器
docker rm mycontainer
# 强制删除运行中的容器
docker rm -f mycontainer
# 删除所有已停止的容器
docker container prune
# 删除所有容器(慎用)
docker rm -f $(docker ps -aq)
镜像相关命令
# 查看镜像
docker images
# 拉取镜像
docker pull nginx
# 删除镜像
docker rmi nginx
# 构建镜像
docker build -t myapp:latest .
容器与镜像状态检查
# 查看 Docker 版本
docker version
# 查看 Docker 运行状态
sudo systemctl status docker
# 启动 Docker
sudo systemctl start docker
# 设置开机启动
sudo systemctl enable docker
# 查看 Docker 磁盘占用
docker system df
# 清理无用资源
docker system prune
常用命令速查
| 操作 | 命令 |
|---|---|
| 运行容器 | docker run |
| 查看容器 | docker ps -a |
| 启动容器 | docker start |
| 停止容器 | docker stop |
| 重启容器 | docker restart |
| 进入容器 | docker exec -it |
| 查看日志 | docker logs -f |
| 查看详情 | docker inspect |
| 复制文件 | docker cp |
| 删除容器 | docker rm |
| 查看资源 | docker stats |
进一步操作
进入之前启动的容器
docker exec -it 容器名称 /bin/bash
docker exec -it 容器名称 /bin/sh # 如果容器没有 Bash
docker attach 容器名称 # 如果想连接到之前窗口中的主进程
注意:attach 是连接容器主进程的终端,而 exec 是在容器中创建一个新的 Shell 进程。
退出容器但不停止容器
Ctrl + P
Ctrl + Q
导出环境(可以发给他人直接运行)
****/python> docker images #查看
REPOSITORY TAG IMAGE ID CREATED SIZE
python 3.7.13 27599ef95971 2 days ago 906MB
****/python>docker save python -o python37.tar
然后在执行代码的路径下会出现一个python37.tar文件
加载环境
****/python>docker load -i python37.tar
将容器保存为镜像
sudo docker commit 19971de1033d myubuntu:node25
注意,docker commit 不会保存容器运行状态、进程、端口映射和挂载卷中的数据。长期维护环境更推荐编写 Dockerfile。
上传镜像到docker hub
- Docker Hub 地址:Docker Hub
sudo docker login # 登录 Docker Hub,输入 Docker Hub 用户名和密码(建议使用 Access Token https://app.docker.com/accounts/systemdsailor/settings/personal-access-tokens)
- https://hub.docker.com/repositories/name:

- 登录后创建一个 Repository,例如:
ubuntu
假设你的 Docker Hub 用户名是 myusername。
那么完整镜像名称就是:
myusername/ubuntu:node25
- 给本地镜像打标签
sudo docker tag ubuntu:node25 myusername/ubuntu:node25
注意把 myusername 替换成自己的 Docker Hub 用户名。
- 上传镜像
sudo docker push myusername/my-ubuntu:node25
参考与更多
https://www.urlos.com/docker/thread-89652-1-1.html
报错:failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed to do request: Head "https://registry.docker-cn.com/v2/library/python/manifests/3?ns=docker.io": unable to connect to 106.14.52.175:443. Do you need an HTTP proxy?
解决:https://www.jianshu.com/p/56241136130d
Docker 创建paddlepaddle https://blog.youkuaiyun.com/sinat_41581976/article/details/121069031
【【Docker】Dockerfile用法全解析-哔哩哔哩】 https://b23.tv/a5JfHo7
[windows端的portable版本,需要安装virtual box ](https://portapps.io/app/docker-toolbox-portable/)
如果使用pip命令,建议在使用前换源
python 换源:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple



被折叠的 条评论
为什么被折叠?



