前言

当我们在一台电脑上搭建了python3.6的环境,下次换台电脑,又得重新搭建一次,设置环境变量等操作。

好不容易安装好,一会提示pip不是内部或外部命令,一会又提示pip: command not found,想死的心都有了。

搭建环境是真的麻烦,不弄好又不行,从今天开始学好docker,环境问题从此和你说再见

docker search搜索镜像

docker search : 从Docker Hub(https://hub.docker.com)中搜索指定的镜像

比如我这里搜索一个基于centos7环境安装的python3.6版本

  1. [root@jkc ~]# docker search python
  2. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  3. python Python is an interpreted, interactive, objec 5776 [OK]
  4. django Django is a free web application framework, 1040 [OK]
  5. pypy PyPy is a fast, compliant alternative implem 262 [OK]
  6. nikolaik/python-nodejs Python with Node.js 57 [OK]
  7. joyzoursky/python-chromedriver Python with Chromedriver, for running automa 57 [OK]
  8. arm32v7/python Python is an interpreted, interactive, objec 54
  9. circleci/python Python is an interpreted, interactive, objec 42
  10. centos/python-35-centos7 Platform for building and running Python 3.5 39
  11. centos/python-36-centos7 Platform for building and running Python 3.6 30
  12. hylang Hy is a Lisp dialect that translates express 29 [OK]
  13. arm64v8/python Python is an interpreted, interactive, objec 24
  14. revolutionsystems/python Optimized Python Images 18
  15. centos/python-27-centos7 Platform for building and running Python 2.7 17
  16. bitnami/python Bitnami Python Docker Image 10 [OK]
  17. publicisworldwide/python-conda Basic Python environments with Conda. 6 [OK]
  18. d3fk/python_in_bottle Simple python:alpine completed by Bottle+Req 5 [OK]
  19. dockershelf/python Repository for docker images of Python. Test 5 [OK]
  20. clearlinux/python Python programming interpreted language with 4
  21. i386/python Python is an interpreted, interactive, objec 3
  22. centos/python-34-centos7 Platform for building and running Python 3.4 2
  23. ppc64le/python Python is an interpreted, interactive, objec 2
  24. amd64/python Python is an interpreted, interactive, objec 1
  25. s390x/python Python is an interpreted, interactive, objec 0
  26. ccitest/python CircleCI test images for Python 0 [OK]
  27. saagie/python Repo for python jobs 0

下载pull镜像

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

如果下载速度缓慢,可以参考这篇博客https://www.cnblogs.com/jiakecong/p/14308660.html

  1. docker pull centos/python-36-centos7
  1. [root@jkc docker]# docker pull centos/python-36-centos7
  2. Using default tag: latest
  3. latest: Pulling from centos/python-36-centos7
  4. 75f829a71a1c: Pull complete
  5. e2c4942f4189: Pull complete
  6. f1498894b11c: Pull complete
  7. da56c9694723: Pull complete
  8. 07fa76fc639e: Pull complete
  9. abab42dfb7f7: Pull complete
  10. dd73d54fbd62: Pull complete
  11. 25966a5cbd52: Pull complete
  12. b947aec7d116: Pull complete
  13. Digest: sha256:ac50754646f0d37616515fb30467d8743fb12954260ec36c9ecb5a94499447e0
  14. Status: Downloaded newer image for centos/python-36-centos7:latest
  15. docker.io/centos/python-36-centos7:latest
  16. [root@jkc docker]#

安装其他python版本

如果有小伙伴想安装其他python版本,比如3.7或者3.8,去https://hub.docker.com搜索即可



进入后选择tags标签,进入找到想要的版本复制命令即可

docker images

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

  1. [root@jkc docker]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. mysql 5.7 ae0658fdbad5 2 months ago 449MB
  4. centos/python-36-centos7 latest 602660fa9b4e 4 months ago 650MB
  5. [root@jkc docker]#

运行交互式的容器

Docker会在隔离的容器中运行进程。当运行docker run命令时,Docker会启动一个进程,并为这个进程分配其独占的文件系统、网络资源和以此进程为根进程的进程组。

在容器启动时,镜像可能已经定义了要运行的二进制文件、暴露的网络端口等,但是用户可以通过docker run命令重新定义

最基本的docker run命令的格式如下:

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

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

  • -t: 在新容器内指定一个伪终端或终端。
  • -i: 允许你对容器内的标准输入 (STDIN) 进行交互
  • centos/python-36-centos7:镜像名称
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
  1. docker run -i -t centos/python-36-centos7 /bin/bash

进入centos终端后,进python交互环境打印"hello",最后用exit退出

  1. [root@jkc docker]# docker run -i -t centos/python-36-centos7 /bin/bash
  2. (app-root) python
  3. Python 3.6.9 (default, Nov 11 2019, 11:24:16)
  4. [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
  5. Type "help", "copyright", "credits" or "license" for more information.
  6. >>> print("hello")
  7. hello
  8. >>> exit()
  9. (app-root)

后台模式启动

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

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

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

  1. [root@jkc docker]# docker run centos/python-36-centos7 /bin/echo "hello world"
  2. hello world
  3. [root@jkc docker]# docker run -d centos/python-36-centos7 /bin/echo "hello world"
  4. 8c7c7449d8596d0d2b7c6d5672ec68d9da73733984232377fb35b30b876faaf5

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

docker ps查看容器

先run下 training/webapp

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

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

  1. [root@jkc docker]# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. a67640969dd9 training/webapp "python app.py" 31 seconds ago Up 31 seconds 0.0.0.0:5000->5000/tcp admiring_mahavira
  4. [root@jkc docker]#

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

ps 查找参数相关语法

  • -a :显示所有的容器,包括未运行的。
  • -f :根据条件过滤显示的内容。
  • --format :指定返回值的模板文件。
  • -l :显示最近创建的容器。
  • -n :列出最近创建的n个容器。
  • --no-trunc :不截断输出。
  • -q :静默模式,只显示容器编号。
  • -s :显示总的文件大小。
  1. docker ps -a
  1. [root@jkc docker]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. a67640969dd9 training/webapp "python app.py" 2 minutes ago Up 2 minutes 0.0.0.0:5000->5000/tcp admiring_mahavira
  4. 8c7c7449d859 centos/python-36-centos7 "container-entrypoin…" 4 minutes ago Exited (0) 4 minutes ago nostalgic_mccarthy
  5. 9df0d290b4e6 centos/python-36-centos7 "container-entrypoin…" 5 minutes ago Exited (0) 5 minutes ago wonderful_cohen
  6. c01f59e13a3a centos/python-36-centos7 "container-entrypoin…" 5 minutes ago Exited (0) 5 minutes ago wonderful_hamilton
  7. 3c2d40166a8f centos/python-36-centos7 "container-entrypoin…" 12 minutes ago Exited (0) 5 minutes ago pedantic_engelbart
  8. 713e29359fcd centos/python-36-centos7 "container-entrypoin…" 14 minutes ago Exited (0) 12 minutes ago priceless_allen
  9. 29980b073576 mysql:5.7 "docker-entrypoint.s…" 7 weeks ago Exited (0) 2 hours ago jkcmysql
  10. [root@jkc docker]#

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

docker logs查看日志

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

  1. docker logs [容器id]
  1. [root@jkc docker]# docker logs 8c7c7449d859
  2. hello world
  3. [root@jkc docker]#

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

  1. [root@jkc docker]# docker logs nostalgic_mccarthy
  2. hello world

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

  1. [root@jkc docker]# docker logs -f 8c7c7449d859
  2. hello world

停止容器

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

  1. docker ps
  1. [root@jkc docker]# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. a67640969dd9 training/webapp "python app.py" 9 minutes ago Up 9 minutes 0.0.0.0:5000->5000/tcp admiring_mahavira

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

  1. docker stop a67640969dd9

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

  1. docker stop admiring_mahavira

启动容器

docker start 容器id

  1. [root@jkc docker]# docker start a67640969dd9
  2. a67640969dd9
  3. [root@jkc docker]# docker ps
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. a67640969dd9 training/webapp "python app.py" 13 minutes ago Up 6 seconds 0.0.0.0:5000->5000/tcp admiring_mahavira

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

  1. [root@jkc docker]# docker restart a67640969dd9
  2. a67640969dd9

进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

  • docker attach
  • docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。

attach 命令

下面演示了使用 docker attach 命令。

  1. docker attach 1e560fca3906

注意: 如果从这个容器退出,会导致容器的停止。

exec 命令

下面演示了使用 docker exec 命令。

  1. [root@jkc easymock]# docker exec -it 25743368a66d /bin/bash
  1. [root@jkc easymock]# docker exec -it 25743368a66d /bin/bash
  2. root@25743368a66d:/opt/webapp# exit
  3. exit
  4. [root@jkc easymock]# docker ps
  5. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  6. 25743368a66d training/webapp "python app.py" 4 minutes ago Up 4 minutes 5000/tcp keen_aryabhata

注意: 如果从这个容器退出,容器不会停止,这就是为什么推荐大家使用 docker exec 的原因。

更多参数说明请使用 docker exec --help 命令查看。

删除容器

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

  1. [root@jkc docker]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. a67640969dd9 training/webapp "python app.py" 14 minutes ago Up About a minute 0.0.0.0:5000->5000/tcp admiring_mahavira
  4. 8c7c7449d859 centos/python-36-centos7 "container-entrypoin…" 17 minutes ago Exited (0) 17 minutes ago nostalgic_mccarthy
  5. 9df0d290b4e6 centos/python-36-centos7 "container-entrypoin…" 18 minutes ago Exited (0) 18 minutes ago wonderful_cohen
  6. c01f59e13a3a centos/python-36-centos7 "container-entrypoin…" 18 minutes ago Exited (0) 18 minutes ago wonderful_hamilton
  7. 3c2d40166a8f centos/python-36-centos7 "container-entrypoin…" 25 minutes ago Exited (0) 18 minutes ago pedantic_engelbart
  8. 713e29359fcd centos/python-36-centos7 "container-entrypoin…" 26 minutes ago Exited (0) 25 minutes ago priceless_allen
  9. 29980b073576 mysql:5.7 "docker-entrypoint.s…" 7 weeks ago Exited (0) 3 hours ago jkcmysql
  10. [root@jkc docker]# docker rm 8c7c7449d859
  11. 8c7c7449d859
  12. [root@jkc docker]# docker rm 9df0d290b4e6
  13. 9df0d290b4e6
  14. [root@jkc docker]# docker rm admiring_mahavira
  15. Error response from daemon: You cannot remove a running container a67640969dd99d6f26810857d29dd47a43088ea927c03b36dd04dddaf18a4dcf. Stop the container before attempting removal or force remove
  16. [root@jkc docker]#

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

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

删除已经停止运行的容器

如果你跟博主一样有强迫症,在使用docker ps -a发现里面有许多状态为停止的容器,那么可以用下面的命令,将其全部删除

  1. docker container prune
  1. [root@jkc easymock]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 9e610e19c9c0 training/webapp "/bin/bash" About a minute ago Exited (0) 16 seconds ago nervous_robinson
  4. 9b977a64610b training/webapp "/bin/bash" About a minute ago Exited (0) About a minute ago jovial_almeida
  5. becfbf291128 training/webapp "/bin/bash" 2 minutes ago Exited (0) 2 minutes ago compassionate_germain
  6. 25743368a66d training/webapp "python app.py" 46 minutes ago Exited (137) 40 minutes ago keen_aryabhata
  7. 4d7286571786 redis:4.0.6 "docker-entrypoint.s…" 48 minutes ago Up 48 minutes 6379/tcp easymock_redis_1
  8. 4dc2b090da1b easymock/easymock:1.6.0 "/bin/bash -c 'npm s…" 48 minutes ago Up 48 minutes 0.0.0.0:7300->7300/tcp easymock_web_1
  9. 64cfd7181b19 mongo:3.4.1 "/entrypoint.sh mong…" 48 minutes ago Up 48 minutes 27017/tcp easymock_mongodb_1
  10. 713e29359fcd centos/python-36-centos7 "container-entrypoin…" 24 hours ago Exited (0) 24 hours ago priceless_allen
  11. 29980b073576 mysql:5.7 "docker-entrypoint.s…" 8 weeks ago Exited (0) 26 hours ago jkcmysql
  12. [root@jkc easymock]# docker container prune
  13. WARNING! This will remove all stopped containers.
  14. Are you sure you want to continue? [y/N] y
  15. Deleted Containers:
  16. 9e610e19c9c0389b23b3d4e1bc35023483d8e88ec4733b6f0e639596f02cd246
  17. 9b977a64610bf22f051d4bc14c08c430b3508a630cd5d3f69cb228fe368b80a0
  18. becfbf29112833f627e7d1751ef08184ffa5a7f51f38a810281f110813935588
  19. 25743368a66d395c2a1204d798ac0e53297ad1d25c13aa5ce0ff409daf62d2bd
  20. 713e29359fcd4b2f089df0246b17b24ae0f20a315c81ccbe285e207ff920f8d2
  21. 29980b0735760a3c0a878c500b85e91f1d4e804c13d87073e07ace27bdcda7ce
  22. Total reclaimed space: 85B
  23. [root@jkc easymock]# docker ps -a
  24. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  25. 4d7286571786 redis:4.0.6 "docker-entrypoint.s…" 51 minutes ago Up 51 minutes 6379/tcp easymock_redis_1
  26. 4dc2b090da1b easymock/easymock:1.6.0 "/bin/bash -c 'npm s…" 51 minutes ago Up 51 minutes 0.0.0.0:7300->7300/tcp easymock_web_1
  27. 64cfd7181b19 mongo:3.4.1 "/entrypoint.sh mong…" 51 minutes ago Up 51 minutes 27017/tcp easymock_mongodb_1
  28. [root@jkc easymock]#

上面留下的都是正在运行的容器状态为up

docker(3)快速搭建centos7-python3.6环境的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. 利用Docker Compose快速搭建本地测试环境

    前言 Compose是一个定义和运行多个Docker应用的工具,用一个YAML(dockder-compose.yml)文件就能配置我们的应用.然后用一个简单命令就能启动所有的服务.Compose编排 ...

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

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

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

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

  9. [phvia/dkc] Docker Compose 快速构建(LNMP+Node)运行环境

    快速构建(LNMP+Node)运行环境. dkc 在此作为 docker-compose 的缩写,你可以理解为 alias dkc=docker-compose 准备 安装 docker 选择1) 从 ...

  10. docker容器中搭建kafka集群环境

    Kafka集群管理.状态保存是通过zookeeper实现,所以先要搭建zookeeper集群 zookeeper集群搭建 一.软件环境: zookeeper集群需要超过半数的的node存活才能对外服务 ...

随机推荐

  1. OpenWRT19.07_命令行_重拨wan_重启路由

    OpenWRT19.07_命令行_重拨wan_重启路由 转载注明来源: 本文链接 来自osnosn的博客,写于 2020-10-19. 写OpenWRT的脚本时,需要用到一些重启命令 以下的命令中的参 ...

  2. VMware虚拟机安装黑群晖DSM6.2 (转)

    安装DSM6.2.和安装5.1的过程大致相同,只是在虚拟机的配置时有所不同. 需要用到的工具 Roadkil's Disk Image – 写镜像工具:http://www.roadkil.net/p ...

  3. Git之pull,fetch差别

    简言之, pull=fetch+merge,下拉远程分支并与本地分支合并. fetch只是下拉远程分支,怎么合并,可以自己再做选择. 进一步了解是,git本地有暂存区(亦称为Index区) fetch ...

  4. 风炫安全web安全学习第三十二节课 Python代码执行以及代码防御措施

    风炫安全web安全学习第三十二节课 Python代码执行以及代码防御措施 Python 语言可能发生的命令执行漏洞 内置危险函数 eval和exec函数 eval eval是一个python内置函数, ...

  5. 小米11和iPhone11 哪个好

    小米11:搭载最新一代三星的AMOLED屏幕,120Hz屏幕刷新iPhone11采用6.1英寸的分辨率1792828的LCD屏幕小米手机爆降800 优惠力度空前机会不容错过https://www.xi ...

  6. 讲讲Java8的Optional类

    前言 Java 8中引入了 Optional 类来解决 NullPointerException 与繁琐的 null 检查,该类首次出现在 Guava.Java 8 才成为类库中的一部分. 入门 Op ...

  7. 对Java集合的概述

    前言 大部分编程语言都提供了数组来保存对象,数组是非常重要的数据结构之一.但是数组在初始化时就已经定义了数组长度,不可变,使用起来颇为麻烦.因此,Java 在 JDK 1.2 版本中添加了集合框架,用 ...

  8. Spring Boot 2.x基础教程:配置元数据的应用

    在使用Spring Boot开发应用的时候,你是否有发现这样的情况:自定义属性是有高量背景的,鼠标放上去,有一个Cannot resolve configuration property的配置警告. ...

  9. 透过现象看本质:Java类动态加载和热替换

    摘要:本文主要介绍类加载器.自定义类加载器及类的加载和卸载等内容,并举例介绍了Java类的热替换. 最近,遇到了两个和Java类的加载和卸载相关的问题: 1) 是一道关于Java的判断题:一个类被首次 ...

  10. ctfshow_djb杯

    桐桑又开始摸鱼了 ctfshow的比赛整的一手好活.djb杯. web1_veryphp 打开就是源码: 1 <?php 2 error_reporting(0); 3 highlight_fi ...