使用非root用戶(hù)操作DOCKER
docker默認(rèn)使用root操作。
1.創(chuàng)建docker組:
sudo groupadd docker
2.將當(dāng)前用戶(hù)加入docker組:
sudo gpasswd -a ${USRE} docker
3.重新啟動(dòng)docker服務(wù):#
sudo service docker restart 或
sudo systemctl restart docker(視平臺(tái)而定)
4.當(dāng)前用戶(hù)退出系統(tǒng),重新登陸
構(gòu)建鏡像:commit方式或build方式
1.commit方式:基礎(chǔ)鏡像運(yùn)行生成容器,容器中安裝需要工具,提交鏡像缠诅。
注意:官方python鏡像中的python版本默認(rèn)為3,要使用python2需要使用python2命令。
我們用commit方式構(gòu)建python2基礎(chǔ)鏡像换吧。
- docker search centos
從docker Hub搜索centos官方鏡像
docker pull docker.io/centos
/之前表示倉(cāng)庫(kù)名,之后表示鏡像名钥星。docker.io是國(guó)內(nèi)daocloud加速鏡像沾瓦。
docker run -it --name my_centos docker.io/centos /bin/bash
運(yùn)行centos鏡像,-it表示啟動(dòng)終端交互界面 --name是自定義的容易名字 /bin/bash表示容器啟動(dòng)時(shí)候執(zhí)行的命令
Linux提示符會(huì)變成類(lèi)似[root@9cabea476573 /]字樣,表示進(jìn)入容器贯莺。
Centos7.4帶的python默認(rèn)版本為2.7.5
安裝python開(kāi)發(fā)工具
yum install -y python-devel
如果提示沒(méi)有python-pip风喇,需要先執(zhí)行
yum -y install epel-release
提交生成的容器為鏡像,命令執(zhí)行結(jié)束后缕探,會(huì)輸出一行sha256的字符串魂莫,表示鏡像ID
docker commit -m 'my python 2.7.5' my_centos python2:v0.1
-m:鏡像描述
my_centos:上一步生成鏡像的名稱(chēng)
python2:生成的鏡像保存的倉(cāng)庫(kù)名
v0.1:生成鏡像的版本號(hào)
查看剛生成的鏡像
docker image
build方式構(gòu)建鏡像(Dockerfile):
-
通過(guò)寫(xiě)Dockerfile來(lái)生成image,有點(diǎn)事邏輯清晰爹耗,便于管理
創(chuàng)建存放Dockerfile的目錄耙考,后續(xù)操作將在這個(gè)目錄下進(jìn)行。
mkdir ~/imagedir
cd ~/imagedir
- 創(chuàng)建Dockerfile鲸沮,使用任何文本編輯器琳骡,創(chuàng)建名為Dockerfile的文件,文件名固定不可變讼溺。
- docker build -t myimage .
構(gòu)建鏡像楣号, -t表示將鏡像命名為myiamge . 表示在當(dāng)前目錄下的Dockerfile文件
注意:依據(jù)Dockerfile內(nèi)容,這一命令將分多步驟執(zhí)行怒坯,每一步驟會(huì)生成一個(gè)中間鏡像炫狱,作為下一步驟的基礎(chǔ)。在鏡像創(chuàng)建后剔猿,中間鏡像會(huì)銷(xiāo)毀视译。
-
運(yùn)行上一部生成的鏡像
docker run -it myimage
-
build 鏡像過(guò)程中發(fā)生錯(cuò)誤會(huì)生成一個(gè)名字是none鏡像,修改完Dockerfile之后可以繼續(xù)建立生成归敬,之后會(huì)刪除none中間鏡像
<none> <none> 1c4ac682f895 5 weeks ago 915 MB
Dockerfile介紹:
FROM python2:v0.1
from表示從那個(gè)基礎(chǔ)鏡像開(kāi)始構(gòu)建鏡像酷含。基礎(chǔ)鏡像來(lái)自倉(cāng)庫(kù)python2汪茧,版本v0.1
from必須作為dockerfile的第一行椅亚,若本地倉(cāng)庫(kù)沒(méi)有相關(guān)鏡像,默認(rèn)從遠(yuǎn)程倉(cāng)庫(kù)獲取舱污。如果不執(zhí)行版本號(hào)呀舔,默認(rèn)使用latest基礎(chǔ)鏡像。
MAINTAINER YouShow
鏡像維護(hù)者個(gè)人信息
RUN pip install flask
RUN pip install git+http://username:password@gitlab.maixunbytes.com/zhangxiaopeng/pipelines.git
RUN pip install git+http://username:password@gitlab.maixunbytes.com/zhangxiaopeng/mxspider.git
RUN pip install git+http://username:password@gitlab.maixunbytes.com/zhangsheng/dateformatting.git
安裝項(xiàng)目需要的依賴(lài)扩灯,如果從git倉(cāng)庫(kù)安裝媚赖,要用到git賬號(hào)和密碼
WORKDIR /src/spiders/app_zxp_week_2/
容器啟動(dòng)后,切換到指定目錄作為工作目錄
COPY ./spiders /src/spiders
從源系統(tǒng)的文件復(fù)制到容器系統(tǒng)上珠插。示例中復(fù)制當(dāng)前目錄下的spiders文件夾到容器系統(tǒng)src文件夾下惧磺。要把構(gòu)建進(jìn)鏡像的文件放到Dockefile文件目錄或者子目錄下。
ADD 和COPY使用類(lèi)似
USER dingyong
容器執(zhí)行操作用哪個(gè)賬戶(hù)
ENTRYPOINT bash bbs_funcs.sh run_spider siku
entrypoint用來(lái)說(shuō)明當(dāng)使用docker run啟動(dòng)容器時(shí)候要執(zhí)行的命令
CMD
CMD用來(lái)表示鏡像要運(yùn)行的默認(rèn)命令捻撑,以及想要傳遞給它的選項(xiàng)豺妓。如果沒(méi)有指定ENTRYPOINT惜互,當(dāng)容器啟動(dòng)的時(shí)候默認(rèn)運(yùn)行的就是CMD的值所指定的命令。若有ENTRYPOINT琳拭,ENTRYPOINT是要運(yùn)行的命令训堆,CMD的值當(dāng)作ENTRYPOINT的選項(xiàng)。
CMD 命令會(huì)被docker run --it name /command 中command命令覆蓋白嘁,而ENTRYPOINT不會(huì)
CMD [“cat”, “/etc/hosts”, “/etc/os-release”]注意:RUN指令設(shè)置的命令僅在構(gòu)建鏡像的時(shí)候會(huì)被使用坑鱼,CMD和ENTRYPOINT會(huì)在執(zhí)行docker run的時(shí)候被使用。
ENV DB_USER=root
設(shè)置環(huán)境變量
注意:編寫(xiě)Dockerfile時(shí)候絮缅,根據(jù)需求填寫(xiě)鲁沥,不需要填寫(xiě)所有命令。
刪除鏡像和container
rm Remove one or more containers
rmi Remove one or more images
docker rmi image-id
如果刪除失敗說(shuō)明在containers中有需要先刪除container中的內(nèi)容
更新鏡像
commit來(lái)更新 還有重新build更新