玩轉docker

玩轉docker

你將學會什麼?這是一個最小的閉環,可以動手別BB, 做一遍你會明白很多

  1. 可以把docker 運行起來;
  2. 可以定製化自己的容器;
  3. 怎樣推送自己的鏡像;
  4. 讓你學會怎樣寫一個簡單的dockerfile;

環境準備

從哪裏下手? 先有一個docker 環境,至於docker 怎麼搭建環境,請參考:docker 官方文檔

爲什麼要自己構建鏡像?

1.自己把測試環境裝一遍? 這個時間成本太高,所以docker 鏡像能讓你快速的複製一個可用的測試環境;

構建自己的基礎鏡像

我們以python 爲例,構建一個flask 的鏡像環境,並推送到自己的鏡像倉庫;

如果沒有鏡像倉庫怎麼辦? 到這裏註冊一個:https://www.docker.com/

實在不想註冊,那本地玩玩也行,就不用管本文檔裏面介紹的登錄和推送鏡像倉庫相關的步驟;

1.先從登錄開始

docker login #默認登錄的是 https://hub.docker.com , 如果你有自己搭建的倉庫,後面可以跟自己倉庫的地址
在這裏插入圖片描述

2.查找鏡像

我們如果需要定製化一個自己的python 鏡像,就需要先找一個合適的基礎鏡像;

docker search python #查找所有python 的鏡像
docker search python:3.7.4 #查找指定版本的鏡像

3.拉取鏡像

既然找到了,那就把鏡像拉到你自己的機器上

docker pull python:3.7.4 #第一次獲取會比較慢,畢竟要下很多東西,截圖裏我是已經下過的,所以就會先從本地查找
在這裏插入圖片描述

4.有鏡像了,怎麼把容器跑起來?

docker run -d python:3.7.4 #這時會返回一個容器ID, 只需要前面一部分字符串就可以了, -d 是後臺運行的命令參數

docker exec -it 6bee4548e3e7aa0b6388d6a bash #當你試圖進入容器的時候,報錯了
在這裏插入圖片描述

PS: 這是因爲你docker run 的時候,容器會默認的執行它設置好的命令執行完,容器就結束了

要想自己手動的交互式的執行命令,那麼你就需要使用 下面的命令:

docker run -d -it python:3.7.4  #多了 -it 參數,用來指定是手動執行命令
docker exec -it 4be1f2f8779439a6bda /bin/bash #docker exec -it 容器ID /bin/bash  進入容器手動執行命令,並指定 shell 的版本
python -V #查看python 版本
pip -V #查看pip版本

在這裏插入圖片描述

5.修改你的容器

已經進去了,接下來要做什麼呢? 當然是安裝你的flask 相關環境了;

那麼假如你有一個依賴文件需要copy 到容器裏面? 怎麼搞

step1: 先退出容器,exit 命令就可以

step2: docker cp requirements.txt 4be1f2f8779439a6bda:/tmp #docker cp 文件名 容器ID前幾位:容器裏面的目錄

step3: 進入容器,我們看下文件
docker exec -it 4be1f2f8779439a6bda /bin/bash
cd /tmp
ls
cat requirements.txt
在這裏插入圖片描述
step4: 開始安裝 pip install -r requirements.txt
在這裏插入圖片描述

呦呦~~呦呦~

安裝完了,接下來怎麼搞? 簡單寫個flask頁面吧

app.py
from flask import Flask
app = Flask(__name__)
 
@app.route('/')
def hello_world():
    return 'Hello, World!'
 
 
if __name__ == "__main__":
    app.run("0.0.0.0", 8080, True)

把它copy 到容器裏面
docker cp app.py 4be1f2f8779439a6bda:/tmp
容器裏面運行一下, 證明你的容器環境是OK 的
python /tmp/app.py
在這裏插入圖片描述

OK 沒有問題,先退出容器:exit
我們來搞下一步,保存對容器的修改

docker commit -m “構建基礎鏡像” -a “安裝flask環境” 4be1f2f8779439a6bda #把修改內容提交到容器裏面,備註修改內容
docker images #查看新生成的副本
在這裏插入圖片描述
docker tag 51d96631de36 assless/you2b:python3.7.4 #docker tag 新副本容器ID 倉庫地址:tag_name
在這裏插入圖片描述

推送到鏡像倉庫

docker push assless/you2b:python3.7.4 #assless/you2b 是鏡像地址, python3.7.4 是tag名
在這裏插入圖片描述

鏡像也提交了,接下來做什麼?

6.寫個dockerfile 運行一下

dockerfile
FROM assless/you2b:python3.7.4
 
MAINTAINER [email protected]
 
EXPOSE 8080
 
WORKDIR /tmp
CMD python app.py

運行之前需要先build一下,把運行命令加進去
把dockerfile 和 需要用到的文件放到同一個乾淨的目錄下

docker build -t flask_text .  #不要忘記最後的那個"." 點,命令需要和 dockerfile 在同一目錄下執行

構建好了,那麼我們來運行一下

docker run -d  -p 8089:8080 flask_test

那麼最後見證奇蹟的時刻到了,本地訪問下 127.0.0.1:8089

你就能訪問到容器裏面的程序了~

7.善後處理

本地搞了一些測試的東西,需要刪除掉

清理容器:

docker container ls #查看正在運行的容器
docker container stop  容器ID  #停止容器, 停止的容器,可以用: docker container start 容器ID 重新啓動
docker container rm 容器ID #刪除的就無法重新啓動了
docker stop $(docker ps -a -q) #停止所有容器
docker rm $(docker ps -aq) #批量刪除所有容器
docker rm $(docker ps -f "status=exited" -q) #刪除狀態是退出的容器

清理鏡像:

docker images #查看本地的鏡像
docker rmi 容器ID #注意如果有容器在使用這個鏡像,那麼你是刪不掉的,需要先停止和刪除容器(如果這個容器不再使用的話)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章