ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Docker 安装与简单使用(例子为docker python环境)

Docker 安装与简单使用(例子为docker python环境)

文章目录

  • Docker 安装
    • 安装与换源
  • 安装一个镜像
    • 获取别人的镜像
    • 或者 自己使用Dockerfile创建一个镜像
      • 我的“python”文件夹
      • Dockerfile中的内容
  • 运行容器
    • 容器运行
    • 容器查看
    • 容器启停
    • 进入容器执行命令
    • 文件复制
    • 容器删除
    • 镜像相关命令
    • 容器与镜像状态检查
    • 常用命令速查
  • 进一步操作
    • 进入之前启动的容器
    • 退出容器但不停止容器
    • 导出环境(可以发给他人直接运行)
    • 加载环境
    • 将容器保存为镜像
  • 参考与更多
    • 如果使用pip命令,建议在使用前换源

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 } }

安装一个镜像

获取别人的镜像

  • 去docker的镜像仓库https://hub.docker.com/
  • 比如直接搜索python
  • 进入想安装的镜像的界面
  • 点击tags,tags界面如下:

  • 复制docker命令,拉取别人的镜像:docker pull python:3.7.13
  • 在任何路径下,shift+鼠标右键:运行powershell
  • 运行命令即可,运行完成只后即可在Docker软件中的Image部分看到新增的镜像

pytorch的镜像

或者 自己使用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 pipinstall--no-cache-dir-rrequirements.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-vD:/python:/mnt python:3.7.13# /mnt /为linux目录格式挂载目录:docker run-vD:/python:/mnt python:3.7.13# -v 本地目录:/容器目录 镜像名称:镜像tag挂载目录有多种方式,这只是一种方式# 解决闪退问题dockerrun-it--nametest-v**:/mnt-p5000: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>dockerimages#查看REPOSITORY TAG IMAGE ID CREATED SIZE python3.7.13 27599ef959712days ago 906MB ****/python>docker save python-opython37.tar 然后在执行代码的路径下会出现一个python37.tar文件

加载环境

****/python>docker load -i python37.tar

将容器保存为镜像

sudodockercommit 19971de1033d myubuntu:node25

参考与更多

https://www.urlos.com/docker/thread-89652-1-1.html 报错:failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed todorequest: Head"https://registry.docker-cn.com/v2/library/python/manifests/3?ns=docker.io":unable to connect to106.14.52.175:443. Do you need an HTTP proxy? 解决:https://www.jianshu.com/p/56241136130d Docker 创建paddlepaddle https://blog.csdn.net/sinat_41581976/article/details/121069031 【【Docker】Dockerfile用法全解析-哔哩哔哩】 https://b23.tv/a5JfHo7[windows端的portable版本,需要安装virtual box](https://portapps.io/app/docker-toolbox-portable/)
  • Docker 网络端口的映射:局域网文件传输

  • 写给孩子看的 Kubernetes 动画指南【中英字幕】

如果使用pip命令,建议在使用前换源

python 换源: pip configsetglobal.index-url https://pypi.tuna.tsinghua.edu.cn/simple
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进