前言

当我们在一台电脑上搭建了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

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

pull下载镜像

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

docker pull centos/python-36-centos7

  1. [root@yoyo ~]# docker pull centos/python-36-centos7
  2. Using default tag: latest
  3. latest: Pulling from centos/python-36-centos7
  4. 8ba884070f61: Pull complete
  5. c3dca185eb14: Pull complete
  6. ee720ba20823: Pull complete
  7. 497ef6ea0fac: Pull complete
  8. ebf1fb961f61: Pull complete
  9. b8249f70ce00: Pull complete
  10. ebd817e2efe7: Pull complete
  11. d3d10dd0937c: Pull complete
  12. a8ad47ec8182: Pull complete
  13. Digest: sha256:d10c46b6db436357965a96716e9f5d230d9b1a58c6db1f0c4f43c1fb1994cd79
  14. Status: Downloaded newer image for centos/python-36-centos7:latest
  15. [root@yoyo ~]#

images本地镜像查看

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

docker images

  1. [root@yoyo ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. centos/python-36-centos7 latest b8d15efaa8ec 2 months ago 651MB
  4. ubuntu 15.10 9b9cb95443b5 2 years ago 137MB
  5. 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退出

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

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

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

ps查看容器

先run下 training/webapp

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

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

docker ps

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

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

ps 查找参数相关语法

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

docker ps -a

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

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

logs查看日志

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

docker logs [容器id]

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

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

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

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

docker logs -f 1e5c22451bf2

停止容器

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

docker ps

  1. [root@yoyo ~]# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 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启动容器

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

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

  1. [root@yoyo ~]# docker restart c9e8a325b145
  2. c9e8a325b145
  3. [root@yoyo ~]#

删除容器

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

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

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

  1. [root@yoyo ~]# docker stop kind_kirch
  2. kind_kirch
  3. [root@yoyo ~]# docker rm kind_kirch
  4. kind_kirch
  5. [root@yoyo ~]# docker ps
  6. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  7. [root@yoyo ~]#

python接口QQ群:717225969

docker学习2-快速搭建centos7-python3.6环境的更多相关文章

  1. docker学习12-docker快速搭建禅道环境

    前言 bug管理系统是每个公司测试团队必备的,当去一个新的公司组建一个测试团队的时候,需快读搭建一套bug管理系统,使用docker搭建禅道就非常方便. 拉取镜像 先拉取zentao镜像,镜像地址ht ...

  2. centos7 快速搭建redis集群环境

    本文主要是记录一下快速搭建redis集群环境的方式. 环境简介:centos 7  + redis-3.2.4 本次用两个服务6个节点来搭建:192.168.116.120  和  192.168.1 ...

  3. 快速搭建 Node.js 开发环境以及加速 npm

    如何快速搭建 node 开发环境 npm 超慢 github 无法打开的问题 于是我觉得应该写一篇文章解答所有这些起步问题,让新同学也能顺顺利利入门. 快速搭建 Node.js 开发环境 如果你想长期 ...

  4. windows下9款一键快速搭建PHP本地运行环境的好工具(含php7.0环境)

    推荐几款一键快速搭建PHP本地运行环境的好工具(含php7.0及apache,nigix,mysql) 首推phpstudy2016和wampServer3.0.6     理由支持php7.0 目前 ...

  5. 【转】使用nvm快速搭建 Node.js 开发环境

    原文链接:http://www.cnblogs.com/shuoer/p/7802891.html 快速搭建 Node.js 开发环境 如果你想长期做 node 开发, 或者想快速更新 node 版本 ...

  6. 搭建centos7的开发环境3-Spark安装配置

    说起大数据开发,必然就会提到Spark,在这片博文中,我们就介绍一下Spark的安装和配置. 这是Centos7开发环境系列的第三篇,本篇的安装会基于之前的配置进行,有需要的请回复搭建centos7的 ...

  7. Spring Boot 学习(一) 快速搭建SpringBoot 项目

    快速搭建一个 Spring Boot 项目 部分参考于<深入实践Spring Boot>.<Spring实战 第四版>与程序猿DD的有关博客. 参考(嘟嘟独立博客):http: ...

  8. 快速搭建appium自动测试环境

    首先申明本文是基本于Python与Android来快速搭建Appium自动化测试环境: 主要分为以下几个步骤: 前提条件: 1)安装与配置python环境,打开 Python官网,找到"Do ...

  9. docker-compose快速搭建lnmp+redis服务器环境

    因为我用的是MacOS 安装docker sudo yum update sudo tee /etc/yum.repos.d/docker.repo <<-'EOF' [dockerrep ...

随机推荐

  1. Redis常用运维命令

    1.启动命令 按照我其他博客的按照方法,启动命令为/etc/init.d/redis_6379 start 2.查看内存统计信息 [root@bogon ~]# redis-cli > info ...

  2. 使用命令行操作vmware esxi -- powershell

    之前提到过用linux命令行的方法操作vmware,这节我们来使用powershell的方式来操作.在操作之前需要下载安装一款命令行工具PowerCLI,本节只列出一些常用命令. 个人认为powerc ...

  3. shell 编写脚本批量Ping IP

    服务器总是一下子买了很多的段的ip.通过绑定后,也不知道这些ip是否绑定成功,所以就写了一个shell脚本,把ip输好,批量ping一下,看是不是都能ping通. 脚本如下: 此外.还有一个ip文件, ...

  4. python抓取不得姐动图(报错 urllib.error.HTTPError: HTTP Error 403: Forbidden)

    抓取不得姐动图(报错) # -*- coding:utf-8 -*- #__author__ :kusy #__content__:文件说明 #__date__:2018/7/23 17:01 imp ...

  5. SQL IN 子查询返回多对值

    我们常用的IN 操作是这样的: select * from tab twhere t.col1 in ('value1''value2');12但是如果是多个列的取值来自同一个子查询呢? 我们是不是要 ...

  6. JSON学习(二)

    首先,定义一个实体类Person: import com.fasterxml.jackson.annotation.JsonFormat; import java.util.Date; public ...

  7. golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

    micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go- ...

  8. 用python批量添加保护站点

    最近在测试的过程中,由于一个bug的复现需要添加1600个保护站点,手工添加谁知到要何年何月,因此想到了用python进行自动化批量添加保护站点! 具体代码如下: #!/usr/bin/env pyt ...

  9. 【题解】Luogu P5360 [SDOI2019]世界地图

    原题传送门 每次查询的实际就是将地图的一个前缀和一个后缀合并后的图的最小生成树边权和 我们要预处理每个前缀和后缀的最小生成树 实际求前缀和(后缀和)的过程珂以理解为上一个前缀和这一列的最小生成树进行合 ...

  10. ZooKeeper系列(四)—— Java 客户端 Apache Curator

    一.基本依赖 Curator 是 Netflix 公司开源的一个 Zookeeper 客户端,目前由 Apache 进行维护.与 Zookeeper 原生客户端相比,Curator 的抽象层次更高,功 ...