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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM