首页 > 其他分享 >docker学习

docker学习

时间:2022-12-16 03:22:06浏览次数:51  
标签:容器 python desktop 学习 -- 镜像 docker

一、介绍

  • docker容器是一种轻量级、可移植、自包含的软件打包技术,是一种应用程序,可以在几乎任何地方以相同的方式运行。
  • 下载安装地址:

    • https://hub.docker.com/
    • windows下安装使用可能会有一些问题,参照弹出的链接,按照指引即可解决
  • 配置国内镜像源:

    • 具体镜像源可参考:

      "registry-mirrors": [
        "https://registry.docker-cn.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://mirror.ccs.tencentyun.com",
        "https://reg-mirror.qiniu.com"
      ]

二、容器操作

  • 运行容器

    • docker run 容器名

      上述这是运行容器最简单的命令

    • 常用参数
      • -d:后台运行并返回ID名
      • -it:以交互的模式打开容器
      • -p:指定端口,比如-p 8888:3333,即暴露宿主机的8888端口,连接到docker容器的3333端口
      • -v:目录挂载,用法(-v 宿主机绝对路径:docker中的路径)
      • --name:指定容器名,否则会随机生成一个容器名
      • --rm:运行完毕即删除该容器(通常用于测试)
      • --network:指定网络
      • --network-alias:给指定网络取别名
  • 查看容器

    docker ps -a  #查看所有容器及其运行状态
    docker ps -l  #查看最近创建的容器及其运行状态
    docker ps -q  #仅显示容器的id
  • 启动容器

    docker start 容器id/name
  • 停止容器

    docker stop/kill 容器id/name
  • 重启容器

    docker restart 容器id/name

    经历stop和start两个过程

  • 暂停容器

    docker pause 容器id/name

    不会占用cpu

  • 暂停后恢复运行容器

    docker unpause 容器id/name
  • 删除容器

    docker rm 容器1,容器2,......
  • 批量删除已退出容器

    docker rm -v $(docker ps -aq -f status=exited)
  • 查看容器中文件及目录变化

    docker diff 容器id/name
  • 从容器复制文件到本地

    docker cp 容器id/名:容器中文件名 宿主机绝对路径
  • 进入容器内部

    docker exec -it 容器id/名 bash

    输入exit退出终端,容器依旧在后台运行

三、镜像操作

  • 查看镜像

    docker images
  • 搜索镜像

    docker search 镜像名
  • 删除镜像

    docker rmi 镜像名
  • 下拉镜像

    docker pull 镜像名
  • 查看镜像中的历史操作

    docker history 镜像名
  • 制作镜像

    • 编写Dockerfile文件
      FROM python:3.7.16-alpine
      MAINTAINER eliwang
      COPY . /code
      WORKDIR /code
      RUN pip install -r requirements.txt
      CMD ["python", "spider.py"]
      • FROM:指定基础镜像,并且必须是第一条指令。
      • MAINTAINER:作者
      • COPY:将指定目录下的文件/目录,复制到容器中的指定目录下,目录不存在则自动创建
      • WORKDIR:指定容器中的工作目录,容器开启后,默认在该目录下
      • RUN:执行命令行命令(在docker build时运行)
      • CMD:类似于RUN,执行时机不同(在docker run时运行)
      • 其它常用命令:
        • ADD:用法同COPY,在不解压的前提下,无法复制 tar 压缩文件,同种需求下推荐使用COPY
        • EXPOSE:声明端口
        • ENV:添加环境变量
    • 创建镜像
       docker build -t python:v1 .

      -t参数指定(镜像名:tag),后面的"."不要忘了,表示Dockerfile文件所在目录

  • 发布镜像

    • 注册账号、创建仓库
      • 在docker hub上创建一个账号,然后创建一个测试仓库python
    • docker中登录账号
      docker login -u 用户名

      然后输入密码

    • 标记镜像
      docker tag python:v1 elitewang/python:v1

      语法:docker tag 镜像名:tag 账号/仓库:tag

    • 发布镜像
      docker push elitewang/python:v1

    • 使用自己发布的镜像

      docker pull elitewang/python:v1

四、不同docker容器之间联通(以redis镜像和python爬虫镜像演示)

  • 创建网络

    docker network create mynet

    指定网络名:mynet

  • 网络中开启redis

     docker run -d --name redis --network mynet --network-alias redis redis:7.0-alpine

    通过--network指定网络,同时通过--network-alias给网络取别名,这样就可以在爬虫项目中指定host为该别名即可连接redis数据库

  • 网络中开启爬虫项目

     docker run --name myspider --network mynet -it -d -v E:\ProgramFiles\python_project\just_test\docker_test:/code python:v1

    通过--network指定网络,通过-v挂载本地目录,可以同步修改项目中的改动

 五、docker-compose多容器打包

  • 用途

    • 一个项目依赖多个docker容器时,可以利用docker-compose将多个容器进行打包执行
  • 使用:(以上述redis和爬虫项目为例)

    • 编写Dockerfile
      FROM python:3.7.16-alpine
      MAINTAINER eliwang
      COPY . /code
      WORKDIR /code
      RUN pip install -r requirements.txt
    • 编写docker-compose.yml
      version: "2"
      
      services:
        myredis:
          image: redis:7.0-alpine
          networks:
            - mynet
      
        myspider:
          build: .
          volumes:
            - .:/code
          networks:
            - mynet
          links:
            - myredis
          tty: true
      
      networks:
        mynet:
          driver: bridge
      • version:版本号,通常写“2”
      • services:下边列出容器
        • myredis容器:
          • 通过redis:7.0-alpine这个镜像创建
          • networks指定了网络mynet,这个必须与最下面networks声明的网络名一致
        • myspider容器:
          • build:指定了Dockerfile所在的路径
          • volumes:挂载的目录
          • networkds:指定所处的网络
          • links:多容器连接别名,指定了上述myredis容器,所以在爬虫项目中,host需要指向"myredis"
          • tty:保持后台运行不退出
    • 创建并开启多容器(需要在docker-compose.yml所在目录下执行)
      docker-compose up -d

      -d参数可以让其在后台运行,不占用终端

    • 停止并删除容器、网络
      docker-compose down

六、修改docker镜像安装目录

  • 简介

    • docker镜像默认会下载安装到C盘,占用C盘空间,我们可以手动修改其默认下载目录
  • 操作

    wsl --shutdown
    
    wsl --export docker-desktop-data E:\ProgramFiles\Docker\docker-desktop-data.tar
    
    wsl --export docker-desktop E:\ProgramFiles\Docker\docker-desktop.tar
    
    wsl --unregister docker-desktop-data
    
    wsl --unregister docker-desktop
    
    wsl --import docker-desktop-data E:\ProgramFiles\Docker\image E:\ProgramFiles\Docker\docker-desktop-data.tar
    
    wsl --import docker-desktop E:\ProgramFiles\Docker\bin E:\ProgramFiles\Docker\docker-desktop.tar

    以修改后的镜像存放目录 E:\ProgramFiles为例,首先在该目录下新建文件夹Docker,然后按照上述命令依次执行即可

  • 重启docker

    • 执行
      wsl -l -v

      正常显示则表示迁移成功

标签:容器,python,desktop,学习,--,镜像,docker
From: https://www.cnblogs.com/eliwang/p/16977265.html

相关文章

  • Docker 创建安装运行.NetCore/Consul/minio脚本命令相关
    ==dockernetworkcreate-dbridgejasonnet1:.NetCore相关项目//===========01:登录认证授权sudodockerrm容器id-fsudodockerrmiv_authserve......
  • 【yolov4】基于yolov4深度学习网络目标检测MATLAB仿真
    YOLO发展至YOLOv3时,基本上这个系列都达到了一个高潮阶段,很多实际任务中,都会见到YOLOv3的身上,而对于较为简单和场景,比如没有太密集的目标和极端小的目标,多数时候仅用YOLOv2......
  • 【机器学习】李宏毅——何为反向传播
    回顾一下梯度下降的过程:假设当前神经网络有以下参数\(\theta=\{\omega_1,\omega_2,...,b_1,b_2,...\}\),那么梯度下降就是计算损失函数对于每个参数的梯度,然后按照梯度更......
  • 【机器学习】李宏毅——卷积神经网络CNN
    CNN我们可以从两个角度来理解其中的具体过程NeuronVersionStory(解释版本1)对于图像分类,其具体的流程如下所示:将一张图像作为模型的输入,输出经过softmax之后将与理想......
  • Blazor和Vue对比学习(进阶.路由导航五):路由守卫
    路由守卫,可以认为是设置在导航源和目标之间的中间件。Vue在代码上,表现为命名约定的钩子(类似于生命周期钩子),而Blazor会更复杂一些。VueRouter的路由守卫功能非常完善,而Blaz......
  • docker安装minio OSS文件存储服务
    查看minio的docker版本使用docker命令查看minio的版本dockersearchminio拉取镜像dockerpullminio/minio创建目录:一个用来存放配置,一个用来存储上传文件的目录......
  • FreeSWITCH学习笔记:应用程序(APP)
    本文更新于2022-12-15,使用FreeSWITCH1.10.7。官方文档见:https://freeswitch.org/confluence/display/FREESWITCH/mod_dptools说明:下文中,部分大写为自定义变量,根据实际情......
  • 深度学习笔记第一门课第二周:神经网络的编程基础(下)
    本文是吴恩达老师的深度学习课程[1]笔记部分。作者:黄海广[2]主要编写人员:黄海广、林兴木(第四所有底稿,第五课第一二周,第三周前三节)、祝彦森:(第三课所有底稿)、贺志尧(第五课第......
  • neo4j的学习
    一:图数据库的概述1.什么是图数据库图数据库是基于图论实现的一种NoSQL数据库,其数据存储结构和数据查询方式都是以图论为基础的,图数据库主要用于存储更多的连接数据......
  • 学习python-flask04
    flask项目演示打开一个flask项目运行步骤1.pycharm打开项目2.安装依赖:虚拟环境用pipinstall-rreq.txt3.数据库建库:movie #root用户密码不是123需要改两个地......