基本理解
鏡像、容器和倉庫
這三個(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