docker映象與docker容器
阿新 • • 發佈:2021-06-23
docker映象與docker容器
映象與容器的關係
映象:(例如系統安裝映象)
已經裝好環境的虛擬機器(執行一次 就是一個容器(新的作業系統))
! 當作是容器的 ”原始碼“
如同面向物件中的類
容器: (裝好的系統)
一個一個的作業系統,或者是已經裝好東西的系統
如同面向物件的物件
映象
修改docker 映象源
docker-ce | 映象站使用幫助 | 清華大學開源軟體映象站 | Tsinghua Open Source Mirror
映象相關命令
docker search 包名 # 搜尋包 一般都是去hub.docker.com # docker search python # 搜尋一個只是裝好了python的環境 docker pull 包名 # docker pull cento # 直接下載最新版 # docker pull centos:7 # 通過: 指定版本 docker images # 檢視已經下載的映象 # 刪除(用的比較少) 除了通過映象id刪除,也可以通過名字刪除 # 如果映象已經有容器了,那就不能(該)刪除,(不管容器是否是啟動的) docker rmi 映象id # 刪除映象 # 映象id可以只輸入前三位 docker rmi `docker images -q` # 刪除所有的映象
關於搜尋映象
其實不怎麼建議使用docker search ,更建議直接去hub.docker搜尋
容器
容器命令
映象跑起來就是容器了 docker ps # 檢視執行中的容器 # 預設是檢視執行中的容器 -a 檢視所有容器(不管你有沒有執行) -l 檢視最後一次執行的容器 -f status=exited 檢視停止的容器 啟動容器(建立)(基於images): docker run # docker run -id --name 自己取得的容器名 映象名() /bin/bash # # docker run -di --name=mysql8 c0cdc95609f1 /bin/bash -i:表示執行容器 -t:表示容器啟動後會進入其命令列。加入這兩個引數後,容器建立就能登入進去。即分配一個偽終端。 --name :為建立的容器命名。 -v:表示目錄對映關係(前者是宿主機目錄,後者是對映到宿主機上的目錄),可以使用多個-v做多個目錄或檔案對映。注意:最好做目錄對映,在宿主機上做修改,然後共享到容器上。 -d:在run後面加上-d引數,則會建立一個守護式容器在後臺執行(這樣建立容器後不會自動登入容器,如果只加-i -t兩個引數,建立後就會自動進去容器)。 -p:表示埠對映,前者是宿主機埠,後者是容器內的對映埠。可以使用多個-p做多個埠對映 來自 <https://www.cnblogs.com/xiaoyuanqujing/articles/11774978.html> 啟動容器(已經有了的容器) docker start 容器id/名字 停止容器 docker stop 容器id/名字 重啟容器 docker restart 容器id/名字 進入容器內部 docker exec -it 容器id/名字 /bin/bash docker exec -it 容器id/名字 sh # 如果上面的辦法不行,就用這個辦法 退出容器內部 exit 刪除容器 docker rm 容器名字/id # 正在執行的容器不能刪除
容器拷貝
向裡面拷貝:
# 宿主機>容器
docker cp 需要拷貝的檔案或目錄 容器名稱:容器目錄
來自 <https://www.cnblogs.com/xiaoyuanqujing/articles/11774978.html>
向外面拷貝:
# 容器> 宿主機
docker cp 容器名稱:容器目錄 需要拷貝的檔案或目錄
來自 <https://www.cnblogs.com/xiaoyuanqujing/articles/11774978.html>
目錄對映(掛載)
目錄對映(掛載) docker run -di -v 宿主機路徑:內部路徑 --name=新容器名 映象名 # docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7 # 如果建立的時候是 it 而不是id,那麼它會自動進去,然後推出來的時候就會自動關閉
檢視容器的ip詳細資訊(例如檢視ip)
檢視容器ip地址
docker inspect 容器名字/id
# 會有一堆resft介面(json 格式)
# 我們自需要去看他的IP地址
# 這個方法是單看ip地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱(容器ID)
舉例(安裝一個mysql的容器,然後把3306埠映射出來)
# 安裝mysql的容器(如果本地沒有映象,他會自動去網上下載)
docker run --name=sqls8 --restart on-failure -d mysql/mysql-server:8.0
# 此方法來自mysql官方的docker指引教程(https://dev.mysql.com/doc/refman/8.0/en/docker-mysql-getting-started.html)
# 啟動mysql容器服務
docker start sql8
# 檢視mysql的初始root密碼(mysql8.0會自動隨機分配)
docker logs sqls8 2>&1 | grep GENERATED # windows沒有自帶grep命令,建議換成findstr 或者就直接使用docker logs sqls8 2>&1 然後ctrl + f 手動查詢 GENERATED
# 下面那一坨就是mysql的預設密碼了,拿到密碼我們就可以在外部進行連線了(到這裡我就不演示了,因為目的已經達到了)
如果想要自己開始就設定密碼的話,建立容器的命令就應該是:
docker run -id -p 3306:3306 --name=sql8 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
反打包
容器 打包為 映象,然後把映象打包為映象檔案
然後通過映象生成更多容器,或者把映象檔案拷貝給別人用(檔案會比較大)
打包 容器->映象->映象檔案
# 容器-> 映象
docker commit 容器名字 映象名字
# docker commit sql8 sql8_1
# 映象-> 映象檔案
docker save -o 壓縮後文件名 映象名字
# docker save -o sql8_1.tar sql8_1
# 打包好後,就可以直接拷貝給別人用了
解包 映象檔案->映象
# 映象檔案->映象
docker load -i 檔名
# docker load -i .\sql8_1.tar
映象檔案-> 容器 我這就不說了, 上面有…… 容器