• Docker和Pycharm


    “”"

    Author:Natsu

    CreatDate:2022.7.13 18:13

    Version:0.0.2

    “”"

    Docker

    参考文档:中文文档docker菜鸟教程中文社区

    介绍

    Docker 是一个开源的应用容器引擎,基于Go 语言并遵从 Apache2.0 协议开源。

    Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

    容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

    安装

    两种安装方法,这两种方法不兼容。

    • 第一种:安装虚拟机vmware,在虚拟机中使用相关linux环境进行安装。
    • 第二种:针对windows环境下,可以下载docker-desktop。

    第一种方法

    1.安装方法1文件夹中的Vmware12安装包;

    2.安装好之后在文件夹中找到ubuntu的镜像文件,在vmware中创建虚拟环境;

    3.在命令行中输入curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun进行安装docker。

    第二种方法

    1.使用win+q键 搜索windows功能 看下里面有没有hyper-V,没有就进入步骤2,否则进行步骤3.

    2.在方法2文件夹中找到hyper-V.cmd脚本文件,右键管理员运行。

    3.重启进入bios界面,切到security页,进入Virtualization虚拟化界面,把第一个开启。

    4.安装文件夹中的docker desktop。

    5.重启之后,安装wsl_update_x64_2文件,然后进入https://hub.docker.com/signup,注册账号。

    6.管理员运行命令行 输入docker run -d -p 80:80 docker/getting-starte

    7.输入 docker run hello-world 创建hello-world镜像。

    在这里插入图片描述
    在这里插入图片描述

    Docker基础使用

    参考文档:从零开始

    对Docker操作

    安装完成Docker后,默认每次开机的时候都会自动启动,但我们也可以手动启动,关闭或者重启Docker

    # 启动docker
    sudo service docker start
    # 重启docker
    sudo service docker restart
    # 停止docker
    sudo service docker stop
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    对镜像的基础操作

    获取当时所有镜像(docker images)

    docker image ls
    # 或者
    docker images
    
    
    • 1
    • 2
    • 3
    • 4
    标签含义
    REPOSITORY镜像所在的仓库名称
    TAG镜像标签
    IMAGEID镜像ID
    CREATED镜像的创建日期(不是获取该镜像的日期)
    SIZE镜像大小
    在这里插入图片描述

    在这里插入图片描述

    拉去镜像(docker pull)

    # 官方镜像
    docker image pull 镜像名称 
    # 或简写为 
    docker pull 镜像名称
    # 比如
    docker pull ubuntu
    docker pull ubuntu:16.04
    
    # 个人镜像
    docker pull 仓库名称/镜像名称
    docker pull xunmi/django
    
    # 第三方仓库拉去
    docker pull 第三方仓库地址/仓库名称/镜像名称
    docker pull hub.c.163.com/library/mysql:latest
    (默认仓库名为library,所有从官方获取镜像相当于`sudo docker image pull library/镜像名称`)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9rGMhpon-1657849833043)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20220713163712231.png)]

    删除镜像

    Docker rm 命令
    docker rm [OPTIONS] CONTAINER [CONTAINER...]
    
    • 1

    OPTIONS说明:

    • -f : 通过SIGKILL信号强制删除一个运行中的容器
    • -l : 移除容器间的网络连接,而非容器本身
    • -v : 删除与容器关联的卷
    Docker rmi 命令
    docker rmi [OPTIONS] IMAGE [IMAGE...]
    
    • 1

    OPTIONS说明:

    • -f: 强制删除
    • –no-prune : 不移除该镜像的过程镜像,默认移除
    Docker prune 命令

    删除 所有未被 tag 标记和未被容器使用的镜像:

    docker image prune
    
    • 1

    删除 所有未被容器使用的镜像:

    docker image prune -a
    
    • 1

    删除 所有停止运行的容器:

    docker container prune
    
    • 1

    删除 所有未被挂载的卷:

    docker volume prune
    
    • 1

    删除 所有网络:

    docker network prune
    
    • 1

    删除 docker 所有资源:

    docker system prune
    
    • 1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KHpal5i7-1657849833044)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20220713170954554.png)]

    加载镜像(docker run)

    上面我们说过,镜像只是一个只读类型的文件,而我们的环境不可能只是一个这样的文件,所以我们需要把这个镜像加载成我们的环境,也就是让他变成容器。

    docker run [可选参数] 镜像名 [向启动容器中传入的命令]
    
    • 1
    常用可选参数作用
    -i表示以《交互模式》运行容器。
    -d会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。
    -t表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
    –name为创建的容器命名。(默认会随机给名字,不支持中文字符!!!)
    -v表示目录映射关系,即宿主机目录:容器中目录。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
    -p表示端口映射,即宿主机端口:容器中端口。 比如:-p 8080:80 就是将容器中的80端口,映射到主机中的8080端口
    –network=host表示将主机的网络环境映射到容器中,使容器的网络与主机相同。每个 Docker 容器都有自己的网络连接空间连接到虚拟 LAN。使用此命令则会让容器和主机共享一个网络空间。

    可以启动一个系统 docker run -i -d -t --name=kali-test kalilinux/kali-rolling (这里我使用linux的一个发行版kali作为介绍)
    或可以简写为 docker run -idt --name=kali-test kalilinux/kali-rolling
    PS: 如果加载一个我们没有的镜像,docker会自动从官方仓库中进行拉去。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7qUZ9uqc-1657849833044)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20220713172542270.png)]

    或者我们可以启动一个网站docker run -dp 8080:80 --name docker-test docker/getting-started

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RVq2m3jd-1657849833045)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20220713172852718.png)]

    如果你没有下载docker/getting-started的进行,这里会自动帮你下载
    成功启动后,可以在浏览器中输入http://localhost:8080/即可看到如下页面

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8NeNVIH7-1657849833046)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20220713172921602.png)]

    使用交互式容器

    上面我们成功将镜像变成了容器,但上述的命令中我们都加入了-d,让容器在后台运行了。下面我们就来讲如何和正在运行的容器进行交互。

    查看容器(docker ps)

    查看容器主要会用到ps命令

    # 查看当前所有正在运行的容器
    docker ps
    # 查看当前所有的容器
    docker ps -a
    # 使用过滤器(除了name外,常用的还可以指定id:id= 、所有停止的容器:status=exited,正在运行的容器:status=running 等)
    docker ps -f name=指定的名字
    # 显示2个上次创建的容器(2可以改变)
    docker ps -n 2
    # 显示最新创建的容器(包括所有状态)
    docker ps -l
    # 仅显示ip
    docker ps -q
     # 显示容器大小
    docker ps -s
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    标签含义
    CONTAINER ID镜像ID
    IMAGE创建容器的镜像名称
    COMMAND默认启动命令(启动时会自动执行)
    CREATED创建容器的日期
    STATUS当前的状态(启动了多久,多久之前退出等)
    PORTS映射的端口
    NAMES容器的名称
    SIZE容器大小(使用-s命令参数时才能看到)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QrOKDtbo-1657849833047)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20220713173923889.png)]

    启动和关闭容器

    # 停止容器
    docker container stop 容器名或容器id
    # 或可简写为
    docker stop 容器名或容器id
    
    # 强制关闭容器
    docker container kill 容器名或容器id
    # 或可简写为
    docker kill 容器名或容器id
    
    # 启动容器
    docker container start 容器名或容器id
    # 或可简写为
    docker start 容器名或容器id
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 如果我们成功启动或者关闭一个容器的话,会返回容器名或者容器id
    • stop和kill的区别: stop是比较优雅的关掉一个容器,类似我们正常退出一个软件,而kill是当一个进程出现意外无法正常关闭的时候,我们强行进行关闭,有点像我们使用任务管理器进行结束进程操作

    在这里插入图片描述

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jgaHYxHJ-1657849833048)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20220713174445804.png)]

    操作后台容器

    之前我们下过一个kali并且放在了后台运行,如果没有下载可以执行下列命令

    docker run -i -d -t --name=kali-test kalilinux/kali-rolling
    
    • 1

    下面我们就用下面的命令开启kali(如果你下的是其他系统,比如ubuntu也可以举一反三一下)
    首先我们确保我们要进入的容器是开启状态的,使用docker ps -a查看其中的STATUS属性是否是Up开头,如果不是先照着上面启动容器的方法开启容器

    # 如果我只需要执行简单的一两条命令可以使用docker exec
    # 执行单条命令 (-i: 启动并且保留交互式命令行; -t:作用是分配一个虚拟的终端; docker run )
    docker exec -it 容器名或容器id 执行的命令
    # 比如
    docker exec -it kali-test whoami
    # 用这种方法,我们还可以启动命令行,根据Linux的特性,系统程序会在/bin中,linux中常用的Shell有多个,其中大部分用的Linux默认的为bash
    # 所以我们启动命令可以自行如下命令(除了/bin/bash外,linux一般还会带/bin/sh、/bin/rbash、/bin/dash等,具体区别可以自行百度)
    docker exec -it 容器名或容器id /bin/bash
    # 比如
    docker exec -it kali-test /bin/bash
    # 除了exec外还有attach可以使用,但它有个弊端,多终端启动attach后,都会会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。
    docker attach 容器名或容器id
    # 比如
    docker attach kali-test
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    exec可选参数作用
    -d会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。
    -e设置环境变量
    -i表示以《交互模式》运行容器。
    -t表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
    -u设置用户名和UID。
    -w设置容器内的工作目录。

    删除容器(docker rm)

    如我我们需要删除一个容器,首先需要确保这个容器已经停止了,因为正在运行的容器是无法直接删除。
    我们可以运行一下docker ps -a,如果发现没有停止,可以使用docker stop停止(STATUS下已Exited开头则是停止的)
    在这里插入图片描述

    # 使用rm删除容器
    docker rm 容器名或容器id
    # 列如
    docker rm docker-test
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    如果报错Error response from daemon: You cannot remove a running container 容器ID. Stop the container before attempting removal or force remove则代表这个容器已经启动,需要执行 docker stop 容器id,停止此容器

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HcfOKCu6-1657849833050)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20220713180432441.png)]

    容器制作成镜像

    我们为什么要把容器制作成镜像?

    • 镜像可以看作为是一种备份,如果我们后期环境出现了问题,可以还原到早期镜像。
    • 镜像便于传播,可以让自己的其他设备或他人的重复利用变得更加简单容易。
    # 将容器制作成镜像
    docker commit 容器名 镜像名
    # 镜像打包备份(打包备份的文件会自动存放在当前命令行的路径下,如果想让保存的文件可以打开,可以加.tar后缀)
    docker save -o 保存的文件名 镜像名
    # 镜像解压
    docker load -i 文件路径/备份文件
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    我们将打包备份的镜像可以通过网络发送到其他设备上,使用docker镜像解压即可直接使用你的环境。

    Docker Dashboard(Docker 仪表板)

    Docker 仪表板的主要作用为:快速访问容器日志,启动容器的 shell,并轻松管理容器生命周期(停止、删除等)。

    在这里插入图片描述

    在这里插入图片描述

    pycharm配置docker

    在docker desktop中打开tcp连接

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7pOfAQn9-1657849833052)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20220714103950448.png)]

    在pycharm配置

    路径:file->settings->build,execution,deployment->docker

    选择TCP连接,并把第一步上面显示的地址填进去。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5MzwyeMv-1657849833053)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20220714104251521.png)]

    连接docker

    连接后就可以对容器和镜像进行管理

    在这里插入图片描述

    环境搭建

    1、需要在命令行中安装python,docker pull python:版本号

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-36XAZshy-1657849833055)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20220714114334672.png)]

    新创建项目时候 就使用docker环境,或者在项目完成后修改project interpreter.

    • Image name 填写 python,也可以去docker桌面版看下是什么名字,一般下载完名字都是python
    • Python interpreter path 不用改,先直接写python。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w6JUXYNt-1657849833058)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20220714105054762.png)]

    • 通过TCP连接的话,是无法在pycharm中直接安装工具包的,需要在命令行中进行操作。

    在这里插入图片描述

    命令行安装工具包

    • 用创建好的python镜像,创建一个仓库docker run -it --name [要创建的仓库名字] [镜像NAME]
      - [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cd8cJhdc-1657849833061)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20220714155257801.png)]

    • 创建完成后使用下面命令进行第三方工具包的安装

      docker exec -it  bash 
       > pip install package
       > whitch python  
       #查看下Python路径 
      # hit ctrl+D
      docker commit  
      docker-compose up
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3xsjAdYs-1657849833062)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20220715092634479.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-auRyGBui-1657849833063)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20220715093856246.png)]

  • 相关阅读:
    mysql分区
    牛客网语法篇练习分支控制(一)
    开发板和电脑相互ping,电脑可以ping开发板,但是开发板ping不通电脑
    【云原生】Docker小工具:runlike与whaler(打印容器的启动命令与导出镜像的dockerfile)
    计算机毕业设计SSMjspm基于框架的影视分享平台【附源码数据库】
    你的专属音乐生成器「GitHub 热点速览」
    Qt编译出错ERROR: Unknown module(s) in QT: script
    vue-cli3升级到vue-cli4,同时将vue2.6升级到vue2.7
    SpringBoot + Servlet + Mybatis+ layui 学生选课管理系统
    builder(建造者模式)
  • 原文地址:https://blog.csdn.net/weixin_44513830/article/details/125798051