Docker 基本使用

基本理解

鏡像、容器和倉庫

這三個(gè)是docker里常見的概念,鏡像可以理解成一個(gè)個(gè)操作系統(tǒng)的安裝包,而容器就是我們通過這些安裝包安裝好的操作系統(tǒng)蹬碧,倉庫則是網(wǎng)上很多存放各種鏡像提供你下載的地方

docker是什么

docker就是一個(gè)存放了各種容器的平臺(tái),供我們來使用炒刁∶誊裕可以理解成:docker從倉庫下載下來各種鏡像安裝包,然后在docker平臺(tái)上安裝他們成容器并存放起來切心,接著我們就可以用這些根據(jù)我們需求選擇的容器來做我們想做的事了

為什么要用docker

假如你要部署一個(gè)網(wǎng)站飒筑,那么你可能需要一臺(tái)服務(wù)器,然后安裝環(huán)境绽昏、配置七七八八的東西协屡,是不是特別麻煩。這個(gè)時(shí)候有人在網(wǎng)上提供了配置好各種環(huán)境的系統(tǒng)全谤,你只要根據(jù)需求下載你需要的系統(tǒng)下來就能快速部署你的網(wǎng)站肤晓,而且也不怎么費(fèi)你電腦的資源,或者當(dāng)你根據(jù)自己需求配置好這個(gè)系統(tǒng)认然,還可以再把它弄成新的鏡像提供給和你要跑同樣環(huán)境的人补憾,你說這么好的東西是不是很心動(dòng)

更多了解參考

http://dockone.io/article/6051

安裝環(huán)境

配置要求

電腦開啟虛擬化,如何查看是否開啟參考:https://jingyan.baidu.com/article/48206aea6e9f9d216ad6b3c6.html

安裝教程

windows參考:https://www.runoob.com/docker/windows-docker-install.html
(其他系統(tǒng)安裝的也都在里面)

配置加速器

由于docker hub是國外的平臺(tái)卷员,如果不開啟加速器盈匾,下載鏡像的話賊慢,因此很有必要配置一下加速器來加速下載毕骡,配置參考:
https://blog.csdn.net/tjsahwj/article/details/88181779

入門示例

建議在配置完前面的加速器后再嘗試削饵,不然下載一個(gè)鏡像得花不知道多久時(shí)間...,示例代碼如下(按順序敲就可以了):

$ docker-machine env
# 查看docker環(huán)境
$ eval $("E:\OFFICE\Docker Toolbox\docker-machine.exe" env)
# 執(zhí)行環(huán)境
$ docker search python
# 搜索python的docker鏡像未巫,根據(jù)第一列的NAME來選擇一個(gè)下載窿撬,這里選擇第一個(gè)
$ docker pull python
# 下載python的鏡像,也可以下載nginx的鏡像叙凡,這個(gè)可能太大了
$ docker images
# 查看下載的鏡像劈伴,可以發(fā)現(xiàn)多了一列python的
$ docker run -it python
# 可以看到進(jìn)入了python的命令行,因?yàn)檫@個(gè)鏡像進(jìn)入的默認(rèn)命令就是`python3`握爷,因此會(huì)自動(dòng)打開命令行
# 可以輸入:`exit()`退出命令行
$ docker run --name aaa -it python /bin/bash
# 和剛才一樣跛璧,都是創(chuàng)建python鏡像的容器苏遥,不過這次給容器取名叫aaa,并且輸入/bin/bash打開terminal終端
# 這個(gè)時(shí)候就可以輸入各種linux系統(tǒng)的命令如:`ls`了赡模,這個(gè)就是docker最主要的內(nèi)容
# 退出時(shí)可以通過組合鍵(`ctrl+p+q`)、命令(`exit`)來退出师抄,前者不關(guān)閉容器漓柑,后者關(guān)閉
$ docker ps
# 查看正在運(yùn)行的容器,如果要查看所有容器叨吮,則后面加上:-a
# 在這里記下容器ID的前幾位(只要前面不重復(fù)辆布,1位2位都行)
# 前面run命令用了兩次,第一個(gè)沒取名茶鉴,第二個(gè)取名了锋玲,所以第一個(gè)記下ID
# 假如容器ID是(c6789...),前兩位就能判斷出是這個(gè)容器涵叮,那么記下c6就行了
$ docker stop c6 first
# 關(guān)閉c6和first這兩個(gè)容器
$ docker rm c6 first
# 刪除這兩個(gè)容器

通過上面的示例惭蹂,應(yīng)該可以大概了解docker是什么,其實(shí)可以理解成一個(gè)定制的操作系統(tǒng)(也不完全是割粮,但是大體感覺差不多)盾碗,比如配有java、python環(huán)境的操作系統(tǒng)舀瓢,然后下載下來直接用廷雅,并且可以通過命令把我們本地的文件拷貝到里面去運(yùn)行等等,總之就是個(gè)特別方便的東西啦

常用命令

查看版本信息
docker info
查看幫助
docker --help

注:
如果是想查看某個(gè)命令的使用幫助則可以使用:

docker 命令 --help
查看環(huán)境
docker-machine env
執(zhí)行環(huán)境

查看命令的輸出結(jié)果里京髓,最后一句去掉注釋符號(#)就是

搜索鏡像
docker search 名稱
// 舉例:docker search nginx
下載鏡像
docker pull 地址/名稱
// 舉例:docker pull ubuntu:13.10
// 舉例2:docker pull hub.c.163.com/public/nginx:1.2.1
查看鏡像
docker images
刪除鏡像
docker rmi 鏡像ID(或:鏡像名:tag名航缀,下同)
docker rmi $(docker images -q)
// 一次性刪除所有的鏡像,-q參數(shù)獲取所有鏡像的ID
設(shè)置標(biāo)簽
docker tag 鏡像ID 倉庫名:標(biāo)簽名
// 舉例:docker tag 860c279d2fec runoob/centos:dev
創(chuàng)建容器
docker run -綁定參數(shù) IP:本機(jī)被映射端口:映射端口(可選) --name 容器命名(可選) -運(yùn)行參數(shù) 鏡像名 執(zhí)行命令(/bin/bash為打開命令行)
// 舉例:docker run -p 8080:80 --name nginx -it hub.c.163.com/library/nginx /bin/bash
// 執(zhí)行該容器里的/bin/bash文件堰怨,即打開命令行交互窗口
// 舉例2:docker run -d -p 5000:5000 training/webapp python app.py
// 執(zhí)行該容器里的app.py文件
// 舉例3:docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
// 比上面的多綁定了IP地址芥玉,以及選擇udp
// 舉例4:docker run -itv /home/test:/home python /bin/bash
// 將宿主機(jī)(docker環(huán)境的虛擬機(jī))的/home/test文件夾掛載到容器的/home路徑下
// (此時(shí)可以再配置本地磁盤的某個(gè)共享文件夾掛載到docker虛擬機(jī)的/home/test下,從而實(shí)現(xiàn)本機(jī)和容器的文件夾共享)

此時(shí)訪問對應(yīng)IP(默認(rèn)為其提供的私有IP):本機(jī)被映射端口即可备图,若不知道IP飞傀,可以通過下面命令查看:

docker-machine ls

注:

-t   在容器內(nèi)開啟一個(gè)終端
-i   允許往容器內(nèi)輸入交互命令
-it  結(jié)合上面兩條可以得出該參數(shù)代表進(jìn)入該容器當(dāng)中的終端運(yùn)行
-d   代表后臺(tái)運(yùn)行
-p   將容器內(nèi)部使用的端口映射到我們使用主機(jī)的指定端口上
-P   將容器內(nèi)部使用的端口映射到我們使用主機(jī)的隨機(jī)高位端口上
-v   指定本地共享目錄掛載到容器目錄當(dāng)中
查看容器端口綁定
docker port 容器ID(前幾位即可,只要不重名诬烹,容器名稱也可以砸烦,后同) 端口號
退出容器
ctrl+p+q  // 退出不關(guān)閉容器
exit  // 退出并關(guān)閉容器
查看運(yùn)行的容器
docker ps  // 查看正在運(yùn)行的容器

注:

-a  查看所有運(yùn)行過的容器
查看容器輸出
docker logs 容器ID
重啟容器
docker restart 容器ID
停止容器
docker stop 容器ID
docker kill 容器ID
刪除容器
docker rm 容器ID
docker rm $(docker ps -q -a)
// 一次性刪除所有的容器

注:
需要容器停止時(shí)才能進(jìn)行刪除操作

啟動(dòng)容器
docker start 容器ID
向容器發(fā)送命令
docker exec -d 容器ID 命令
進(jìn)入容器
docker attach 容器ID

注:
進(jìn)入容器的方法好幾種,這個(gè)是比較常用的绞吁,其他詳細(xì)可參考:
https://www.cnblogs.com/xhyan/p/6593075.html

查看容器IP
cat /etc/hosts  // 容器內(nèi)部輸入命令
拷貝本機(jī)文件到容器
docker cp 本地文件路徑 容器名稱:容器里的路徑

參考:https://jingyan.baidu.com/article/09ea3ede52323fc0afde3956.html

制作并上傳鏡像

第一步:登錄docker hub賬號(沒有創(chuàng)建一個(gè):地址
docker login
第二步:創(chuàng)建本地自定義鏡像
方法1:commit命令創(chuàng)建
docker commit -m "說明" 容器ID 新鏡像名:標(biāo)簽
// 舉例:docker commit -m "第一個(gè)自定義鏡像" xxx dawsonenjoy/python:latest
// 建議鏡像名以:docker hub賬號名/倉庫名來命名幢痘,不然后面上傳鏡像時(shí)容器出錯(cuò)

此時(shí)輸入:docker images,就可以發(fā)現(xiàn)自己創(chuàng)建的鏡像了家破,這種方法是根據(jù)容器來創(chuàng)建鏡像颜说,并且操作簡易购岗,個(gè)人比較推薦

方法2:通過dockerfile創(chuàng)建

步驟:

  • 新建Dockerfile文件:
touch Dockerfile
  • 編寫Dockerfile文件:
# ------------------------
# 初始化配置
FROM xxx鏡像
MAINTAINER xxx <xxx@xxx.com>
# 名字、郵箱

# ------------------------
# 執(zhí)行語句
RUN 語句1
RUN 語句2

# ------------------------
# 配置環(huán)境
ENV xxx

# ------------------------
# 啟動(dòng)容器時(shí)執(zhí)行的命令
CMD xxx

簡單示例:

FROM dawsonenjoy/xxx:latest
MAINTAINER dawsonenjoy <dawsonenjoy@gmail.com>

# 安裝vim
RUN apt-get update
RUN apt-get install vim

# 配置編碼
ENV LANG C.UTF-8
  • 創(chuàng)建鏡像:
docker build -t 鏡像名:latest .
# 注意后面有個(gè)點(diǎn)別漏了

此時(shí)就可以通過docker images看到新建了剛才的鏡像

詳細(xì)可以參考下面鏈接:
https://www.cnblogs.com/qiaoyeye/p/10677136.html
https://www.cnblogs.com/lsgxeva/p/8746644.html
這種方法是根據(jù)鏡像結(jié)合自定義命令來創(chuàng)建鏡像

第三步:上傳鏡像
docker push 鏡像名
上傳鏡像出現(xiàn)錯(cuò)誤:denied: requested access to the resource is denied解決

參考:
https://blog.csdn.net/wzygis/article/details/78205867
https://blog.csdn.net/shoneworn/article/details/80622268

制作并保存鏡像/容器到本地

1.save方式保存鏡像/容器到本地文件
docker save -o 新文件名  鏡像/容器ID
save命令載入鏡像文件
docker load < 文件名

此時(shí)輸入:docker images會(huì)發(fā)現(xiàn)多了個(gè)鏡像
詳細(xì)參考:https://www.cnblogs.com/lsgxeva/p/8746644.html

2.export方式保存容器到本地文件
docker export -o xxx.tar 容器ID
import命令載入docker鏡像文件
docker import xxx.tar 新鏡像名

這兩者區(qū)別可以參考下面鏈接:
https://my.oschina.net/zjzhai/blog/225112
https://blog.csdn.net/liukuan73/article/details/78089138
(前者文件大门粪,后者文件泻盎;前者偏向制作鏡像玄妈,后者偏向快照乾吻;前者可以回滾,后者不能)

docker鏡像下載地址

官方

https://hub.docker.com/search?image_filter=official&type=image

國內(nèi)

阿里云鏡像:https://promotion.aliyun.com/ntms/act/kubernetes.html
網(wǎng)易云鏡像:https://c.163yun.com/hub#/m/home/
daoclub鏡像:https://hub.daocloud.io/

docker可視化工具kitematic

就是一個(gè)能夠操作docker的界面程序拟蜻,如果上面的內(nèi)容你大致都懂了的話绎签,那這個(gè)怎么用你應(yīng)該也自然就懂啦

容器常見問題

OSError: [Errno 8] Exec format error

https://blog.csdn.net/weixin_30393907/article/details/98291833

中文亂碼
永久改變

通過DockerFile重新配置鏡像,在里面加上一句環(huán)境配置:

ENV LANG C.UTF-8
臨時(shí)改變(重啟失效)

輸入命令:

export LANG=C.UTF-8
安裝vim
apt-get update
apt-get install vim
安裝ping和ifconfig
apt-get update 
apt install net-tools # ifconfig 
apt install iputils-ping # ping
ssh連接失敗導(dǎo)致無法使用

執(zhí)行下列命令:

docker-machine -D ssh default

參考:https://stackoverflow.com/questions/34641003/error-checking-tls-connection-error-checking-and-or-regenerating-the-certs

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酝锅,一起剝皮案震驚了整個(gè)濱河市诡必,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搔扁,老刑警劉巖爸舒,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異稿蹲,居然都是意外死亡碳抄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門场绿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剖效,“玉大人,你說我怎么就攤上這事焰盗¤凳” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵熬拒,是天一觀的道長爷光。 經(jīng)常有香客問我,道長澎粟,這世上最難降的妖魔是什么蛀序? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮活烙,結(jié)果婚禮上徐裸,老公的妹妹穿的比我還像新娘。我一直安慰自己啸盏,他們只是感情好重贺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般气笙。 火紅的嫁衣襯著肌膚如雪次企。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天潜圃,我揣著相機(jī)與錄音缸棵,去河邊找鬼。 笑死谭期,一個(gè)胖子當(dāng)著我的面吹牛堵第,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播崇堵,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼客燕!你這毒婦竟也來了鸳劳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤也搓,失蹤者是張志新(化名)和其女友劉穎赏廓,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體傍妒,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡幔摸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了颤练。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片既忆。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嗦玖,靈堂內(nèi)的尸體忽然破棺而出患雇,到底是詐尸還是另有隱情,我是刑警寧澤宇挫,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布苛吱,位于F島的核電站,受9級特大地震影響器瘪,放射性物質(zhì)發(fā)生泄漏翠储。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一橡疼、第九天 我趴在偏房一處隱蔽的房頂上張望援所。 院中可真熱鬧,春花似錦欣除、人聲如沸任斋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽废酷。三九已至瘟檩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間澈蟆,已是汗流浹背墨辛。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留趴俘,地道東北人睹簇。 一個(gè)月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像寥闪,于是被迫代替她去往敵國和親太惠。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355