【运维笔记 虚拟化应用】Docker 安装与简单使用(例子为docker python环境)

Docker 安装

安装与换源

桌面版

  • 下载(其中服务端的没有界面)下载之后点击安装即可,安装完只后重启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命令,拉取别人的镜像: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 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

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
上一篇: coder将开发迁移到云端Code-Server使用 (codeserver)
下一篇: python 高性能编程 AOT VS JIT
FakeOccupational
博客等级 码龄6年 2万+粉丝 1727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值