zoukankan      html  css  js  c++  java
  • docker学习2-快速搭建centos7-python3.6环境

    前言

    当我们在一台电脑上搭建了python3.6的环境,下次换了个电脑,或者换成linux的系统了,又得重新搭建一次,设置环境变量、下载pip等操作。
    好不容易安装好,一会Scrips目录找不到pip.exe,一会提示pip不是内部或外部命令,一会又提示pip: command not found,想死的心都有了。
    搭建环境成为不少小伙伴学习的障碍,从今天开始学好docker,环境问题从此和你说再见~~~

    search搜索镜像

    docker search : 从Docker Hub(https://hub.docker.com)中搜索指定的镜像
    比如我这里搜索一个基于centos7环境安装的python3.6版本

    • NAME 镜像仓库名称
    • DESCRIPTION 镜像描述信息
    • STARS 镜像收藏数
    • OFFICIAL 是否为docker官方发布的镜像
    • AUTOMATED 是否为自动化构建的镜像

    关于自动化构建,可以查看官方文档:https://docs.docker.com/docker-hub/builds/#how-automated-builds-work

    docker search python

    [root@yoyo ~]# docker search python
    NAME                             DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    python                           Python is an interpreted, interactive, objec…   4288                [OK]                
    django                           Django is a free web application framework, …   847                 [OK]                
    pypy                             PyPy is a fast, compliant alternative implem…   193                 [OK]                
    kaggle/python                    Docker image for Python scripts run on Kaggle   123                                     [OK]
    arm32v7/python                   Python is an interpreted, interactive, objec…   37                                      
    centos/python-35-centos7         Platform for building and running Python 3.5…   36                                      
    joyzoursky/python-chromedriver   Python with Chromedriver, for running automa…   33                                      [OK]
    circleci/python                  Python is an interpreted, interactive, objec…   29                                      
    nikolaik/python-nodejs           Python with Node.js                             18                                      [OK]
    arm64v8/python                   Python is an interpreted, interactive, objec…   17                                      
    centos/python-36-centos7         Platform for building and running Python 3.6…   17                                      
    centos/python-27-centos7         Platform for building and running Python 2.7…   15                                      
    iron/python                      Tiny Python Microcontainer                      9                                       
    publicisworldwide/python-conda   Basic Python environments with Conda.           6                                       [OK]
    dockershelf/python               Repository for docker images of Python. Test…   4                                       [OK]
    i386/python                      Python is an interpreted, interactive, objec…   3                                       
    bitnami/python                   Bitnami Python Docker Image                     3                                       [OK]
    komand/python-plugin             DEPRECATED: Komand Python SDK                   2                                       [OK]
    centos/python-34-centos7         Platform for building and running Python 3.4…   2                                       
    muccg/python-base                Base images that use python                     1                                       [OK]
    amd64/python                     Python is an interpreted, interactive, objec…   1                                       
    ccitest/python                   CircleCI test images for Python                 0                                       [OK]
    saagie/python                    Repo for python jobs                            0                                       
    qbtrade/python                   python 3.6.5 with requirements last update s…   0                                       
    openshift/python-33-centos7      DEPRECATED: A Centos7 based Python v3.3 imag…   0                                       
    [root@yoyo ~]# 
    
    

    pull下载镜像

    上面找的想要下载的镜像centos/python-36-centos7,接下来下载到自己本地

    docker pull centos/python-36-centos7

    [root@yoyo ~]# docker pull centos/python-36-centos7
    Using default tag: latest
    latest: Pulling from centos/python-36-centos7
    8ba884070f61: Pull complete 
    c3dca185eb14: Pull complete 
    ee720ba20823: Pull complete 
    497ef6ea0fac: Pull complete 
    ebf1fb961f61: Pull complete 
    b8249f70ce00: Pull complete 
    ebd817e2efe7: Pull complete 
    d3d10dd0937c: Pull complete 
    a8ad47ec8182: Pull complete 
    Digest: sha256:d10c46b6db436357965a96716e9f5d230d9b1a58c6db1f0c4f43c1fb1994cd79
    Status: Downloaded newer image for centos/python-36-centos7:latest
    [root@yoyo ~]# 
    

    images本地镜像查看

    使用docker images查看本地已经下载好的镜像

    docker images

    [root@yoyo ~]# docker images
    REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
    centos/python-36-centos7   latest              b8d15efaa8ec        2 months ago        651MB
    ubuntu                            15.10               9b9cb95443b5        2 years ago         137MB
    training/webapp               latest              6fae60ef3446        4 years ago         349MB
    

    运行交互式的容器

    Docker会在隔离的容器中运行进程。当运行docker run命令时,Docker会启动一个进程,并为这个进程分配其独占的文件系统、网络资源和以此进程为根进程的进程组。
    在容器启动时,镜像可能已经定义了要运行的二进制文件、暴露的网络端口等,但是用户可以通过docker run命令重新定义
    最基本的docker run命令的格式如下:

    $ sudo docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

    比如我这里要启动centos7,进入交互模式,通过docker的两个参数 -i -t,让docker运行的容器实现"对话"的能力

    • t: 在新容器内指定一个伪终端或终端。
    • i: 允许你对容器内的标准输入 (STDIN) 进行交互

    docker run -i -t centos/python-36-centos7 /bin/bash

    如下进入centos终端后,进python交互环境打印"hello world! I’m comming!!!",最后用exit退出

    [root@yoyo ~]# docker run -i -t centos/python-36-centos7 /bin/bash
    (app-root) python
    Python 3.6.3 (default, Mar 20 2018, 13:50:41) 
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> print("hello world! I’m comming!!!")
    hello world! I’m comming!!!
    >>> exit()
    (app-root) exit
    

    后台模式启动

    run加上-i -t是进交互模式,如果不想进交互模式直接执行脚本,可以直接使用run,比如echo "hello world",屏幕会输出"hello world"

    docker run centos/python-36-centos7 /bin/echo "hello world"

    如果不想在前台执行,一般我们运行环境会选择挂后台,加个-d 参数即可

    docker run -d centos/python-36-centos7 /bin/echo "hello world"

    [root@yoyo ~]# docker run centos/python-36-centos7 /bin/echo "hello world"
    hello world
    [root@yoyo ~]# docker run -d centos/python-36-centos7 /bin/echo "hello world"
    1e5c22451bf2215f6c098e066b74363f1db9cde97e9ecea02947ccbbf2fa7e8f
    [root@yoyo ~]# 
    

    使用-d后台执行后,会发现下面多了一长串,这个就是容器的唯一id,可以通过这个id找到容器

    ps查看容器

    先run下 training/webapp

    docker run -d -p 5000:5000 training/webapp python app.py

    使用docker ps查看正在运行的容器

    docker ps

    [root@yoyo ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  
    c9e8a325b145        training/webapp     "python app.py"     16 hours ago        Up 16 hours         0.0.0.0:32768->5000/tcp
    [root@yoyo ~]# 
    

    上面的echo "hello world"只是一个很简单的输出指令,执行完就关闭了,所以ps查找正在运行的查不到,可以加个-a参数,显示所有的容器,包括未运行的

    ps 查找参数相关语法

    • -a :显示所有的容器,包括未运行的。
    • -f :根据条件过滤显示的内容。
    • --format :指定返回值的模板文件。
    • -l :显示最近创建的容器。
    • -n :列出最近创建的n个容器。
    • --no-trunc :不截断输出。
    • -q :静默模式,只显示容器编号。
    • -s :显示总的文件大小。

    docker ps -a

    [root@yoyo ~]# docker ps -a
    CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS                      PORTS                     NAMES
    1e5c22451bf2        centos/python-36-centos7   "container-entrypoin…"   10 minutes ago      Exited (0) 10 minutes ago                             hopeful_poincare
    1d14dd77352f        centos/python-36-centos7   "container-entrypoin…"   12 minutes ago      Exited (0) 12 minutes ago                             nervous_visvesvaraya
    fefdcbb9c662        centos/python-36-centos7   "container-entrypoin…"   13 minutes ago      Exited (0) 13 minutes ago                             quirky_cray
    9df329b5effd        centos/python-36-centos7   "container-entrypoin…"   13 minutes ago      Exited (0) 13 minutes ago                             nifty_roentgen
    c9e8a325b145        training/webapp            "python app.py"          16 hours ago        Up 16 hours                 0.0.0.0:32768->5000/tcp   kind_kirch
    [root@yoyo ~]# 
    
    

    这样就能找到上面的容器id 1e5c22451bf2 ,不过没那么长

    logs查看日志

    可以通过容器id去查运行的日志

    docker logs [容器id]

    [root@yoyo ~]# docker logs 1e5c22451bf2 
    hello world
    [root@yoyo ~]# 
    

    也可以通过容器的名称去查看,注意这里是容器的名称,不是镜像名称。容器名称是系统自动分配的,如上面的最后一项NAMES 值hopeful_poincare

    [root@yoyo ~]# docker logs hopeful_poincare
    hello world
    

    -f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。

    docker logs -f 1e5c22451bf2

    停止容器

    可以用ps查看正在运行的容器

    docker ps

    [root@yoyo ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
    c9e8a325b145        training/webapp     "python app.py"     17 hours ago        Up 17 hours         0.0.0.0:32768->5000/tcp   kind_kirch
    

    停止容器的话,可以用stop容器的id或者容器NAME名称

    docker stop c9e8a325b145

    或者提供容器名称kind_kirch来停止

    docker stop kind_kirch

    启动容器

    提供start启动容器

    [root@yoyo ~]# docker start c9e8a325b145
    c9e8a325b145
    [root@yoyo ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
    c9e8a325b145        training/webapp     "python app.py"     17 hours ago        Up 5 seconds        0.0.0.0:32769->5000/tcp   kind_kirch
    [root@yoyo ~]# 
    

    正在运行的容器,可以使用 docker restart 命令来重启

    [root@yoyo ~]# docker restart c9e8a325b145
    c9e8a325b145
    [root@yoyo ~]# 
    

    删除容器

    使用 docker rm 命令来删除不需要的容器

    [root@yoyo ~]# docker ps -a
    CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS                      PORTS                     NAMES
    1e5c22451bf2        centos/python-36-centos7   "container-entrypoin…"   24 minutes ago      Exited (0) 24 minutes ago                             hopeful_poincare
    1d14dd77352f        centos/python-36-centos7   "container-entrypoin…"   27 minutes ago      Exited (0) 27 minutes ago                             nervous_visvesvaraya
    fefdcbb9c662        centos/python-36-centos7   "container-entrypoin…"   27 minutes ago      Exited (0) 27 minutes ago                             quirky_cray
    9df329b5effd        centos/python-36-centos7   "container-entrypoin…"   27 minutes ago      Exited (0) 27 minutes ago                             nifty_roentgen
    c9e8a325b145        training/webapp            "python app.py"          17 hours ago        Up 41 seconds               0.0.0.0:32770->5000/tcp   kind_kirch
    [root@yoyo ~]# docker rm 1e5c22451bf2
    1e5c22451bf2
    [root@yoyo ~]# docker rm 1d14dd77352f
    1d14dd77352f
    [root@yoyo ~]# docker rm kind_kirch
    Error response from daemon: You cannot remove a running container c9e8a325b14534f0b27cfd34e3ceefd16f6a6c9f136c0305d4e60de61f2badc3. Stop the container before attempting removal or force remove
    [root@yoyo ~]# 
    

    但是rm 正在运行的容器时候,它会报错,需先stop,才能rm

    [root@yoyo ~]# docker stop kind_kirch
    kind_kirch
    [root@yoyo ~]# docker rm  kind_kirch
    kind_kirch
    [root@yoyo ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@yoyo ~]# 
    

    python接口QQ群:717225969

  • 相关阅读:
    Junit单元测试
    win7的6个网络命令
    WOJ1024 (POJ1985+POJ2631) Exploration 树/BFS
    WOJ1022 Competition of Programming 贪心 WOJ1023 Division dp
    woj1019 Curriculum Schedule 输入输出 woj1020 Adjacent Difference 排序
    woj1018(HDU4384)KING KONG 循环群
    woj1016 cherry blossom woj1017 Billiard ball 几何
    woj1013 Barcelet 字符串 woj1014 Doraemon's Flashlight 几何
    woj1012 Thingk and Count DP好题
    woj1010 alternate sum 数学 woj1011 Finding Teamates 数学
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/11087523.html
Copyright © 2011-2022 走看看