1. 程式人生 > 其它 >docker映象與docker容器

docker映象與docker容器

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官方指引

# 安裝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

映象檔案-> 容器 我這就不說了, 上面有…… 容器