Docker的安装和使用及dockerfile简单使用
Docker的安裝和使用及dockerfile簡(jiǎn)單使用
一、簡(jiǎn)介
Docker是一個(gè)基于go語(yǔ)言的開源的應(yīng)用容器引擎,可以將開發(fā)者的應(yīng)用及依賴包打包到一個(gè)可移植容器當(dāng)中,然后發(fā)布到任何流行的Linux機(jī)器中,可以極大的減少開發(fā)人員的工作量,Docker也可以實(shí)現(xiàn)虛擬化
二、Docker安裝
前提:
Docker自發(fā)布以來就變得非常火爆,目前Linux系統(tǒng)、windows系統(tǒng)和mac系統(tǒng)都支持docker,本文以Linux系統(tǒng)介紹Docker的安裝及簡(jiǎn)單使用。
Docker的發(fā)布時(shí)間也沒有多長(zhǎng)時(shí)間,因此Linux對(duì)Docker的支持也有限制,僅支持64位,目前centos7已經(jīng)支持docker,安裝要求系統(tǒng)為64位,內(nèi)核版本為3.10以上,對(duì)于centos6,安裝要求需centos6.5或更高版本,同樣系統(tǒng)為64位,docker僅支持64位,同時(shí)內(nèi)核版本為2.6.32-431 或者更高版本。
可以使用uname -a 查詢內(nèi)核版本
博主的內(nèi)核版本為3.10.0-862,為方便使用,安裝的是centos7系統(tǒng),如果是centos6還需要升級(jí)內(nèi)核版本,稍顯麻煩
Docker安裝:
Docker有兩個(gè)版本,Docker-ee和Docker-ce
Docker-ce是社區(qū)免費(fèi)版,Docker-ee為企業(yè)版,需要收費(fèi),本文安裝的為Docker-ce社區(qū)免費(fèi)版
安裝之前安裝相應(yīng)所需包依賴
登錄后復(fù)制
yum -y install yum-utils device-mapper-persistent-data lvm2
下載docker-ce的yum源到/etc/yum.repos.d/下
登錄后復(fù)制
wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum安裝docker-ce
docker安裝完成,啟動(dòng)docker,查看docker版本信息
登錄后復(fù)制
systemctl start docker
Docker安裝成功
三、Docker使用
首先從最簡(jiǎn)單的hello-world開始
運(yùn)行一個(gè)hello-world容器,本地最初沒有hello-world鏡像,會(huì)自動(dòng)從遠(yuǎn)端docker hub拉取
登錄后復(fù)制
docker run hello-world
使用docker images命令可查詢當(dāng)前本地主機(jī)上的鏡像,我的機(jī)器上原來有拉取其它鏡像會(huì)有點(diǎn)多,看到有hello-world鏡像即為ok
登錄后復(fù)制
docker images
刪除鏡像使用以下命令
登錄后復(fù)制
docker rmi imagename<imageid>
刪除成功
從遠(yuǎn)端docker hub拉取鏡像
登錄后復(fù)制
docker pull imagename<imageid>
查看本地鏡像列表,拉取成功
拉取之前可以查詢docker hub可拉取鏡像列表
登錄后復(fù)制
docker search imagename
第一個(gè)字段為imagename(鏡像名字),第四個(gè)字段為official,是否為官方鏡像,個(gè)人也可以把自己制作的鏡像放到docker hub上,找到自己想要下載的鏡像名字就可以拉取了。
運(yùn)行一個(gè)新的container
登錄后復(fù)制
docker run [-i -t -d -p -P -c] [--name]:在容器內(nèi)運(yùn)行一個(gè)應(yīng)用程序-t :在新容器內(nèi)指定一個(gè)偽終端或終端-i:允許你對(duì)容器內(nèi)的標(biāo)準(zhǔn)輸入進(jìn)行交互-d:以進(jìn)程方式運(yùn)行容器,讓容器在后臺(tái)運(yùn)行-p:設(shè)置端口-P:將容器內(nèi)部使用的網(wǎng)絡(luò)端口映射到我們使用的主機(jī),就是讓我們?cè)L問我們使用的主機(jī)就等同于訪問到容器內(nèi)部-c:command,后面接命令--name container name:指定容器名字運(yùn)行一個(gè)新的container并調(diào)用打印命令
登錄后復(fù)制
docker run ubuntu:15.10 /bin/echo "Hello world"
運(yùn)行一個(gè)交互式的container(容器)
登錄后復(fù)制
docker run -it ubuntu:15.10 /bin/bash
可以發(fā)現(xiàn)已經(jīng)進(jìn)入到容器當(dāng)中,退出使用exit或ctl+d
從遠(yuǎn)程docker hub拉取一個(gè)鏡像
在后臺(tái)運(yùn)行一個(gè)新的container
登錄后復(fù)制
docker run -P --name test1 -d training/webapp python app.py
查看當(dāng)前運(yùn)行容器詳情
登錄后復(fù)制
docker ps
查看容器端口
登錄后復(fù)制
docker port containername<containerid>
可以看到容器test1的端口映射到了本機(jī)的32768,可以訪問本機(jī)ip的32768端口來查看
查看容器日志
登錄后復(fù)制
docker logs containername<containerid>
停止指定容器
登錄后復(fù)制
docker stop containername<containerid>
再次運(yùn)行該容器就可以使用
登錄后復(fù)制
docker start containername<containerid>
查看指定容器內(nèi)部運(yùn)行進(jìn)程
登錄后復(fù)制
docker top containername<containerid>
查看歷史啟動(dòng)的容器
登錄后復(fù)制
docker ps -a
刪除容器,容器必須處于停止?fàn)顟B(tài)
登錄后復(fù)制
docker rm containername<containerid>
其它命令
為鏡像添加新的標(biāo)簽
登錄后復(fù)制
docker tag查詢?nèi)萜鱥p
登錄后復(fù)制
docker inspect containername<containerid>提交容器副本
登錄后復(fù)制
docker commit [-m -a] container-id image-name -m:提交的描述信息 -a:指定鏡像作者 container-id:容器ID image-name:你要命名的鏡像名先寫這么多,后續(xù)補(bǔ)充
補(bǔ)充:
前邊有提到可以將自己的本地鏡像上傳到docker hub上,那么如何生成自己的鏡像呢?docker提供一種docker file的方式來生成本地鏡像,你也可以通過docker file的方式把你的項(xiàng)目打包成鏡像來使用。
四、Dockerfile部分命令
首先,每個(gè)指令的前綴必須大寫
登錄后復(fù)制
登錄后復(fù)制
FROM 指定基礎(chǔ)鏡像,后可跟鏡像名字或鏡像id 例:FROM centos:6.0登錄后復(fù)制
MAINTAINER 作者 指定作者 例:MAINTAINER root登錄后復(fù)制
ADD 把文件復(fù)制到到容器的指定目錄,如果是tar包會(huì)自動(dòng)解壓,后可跟本地文件或url,如果是url,功能類似于wget 例:ADD nginx-1.9.3.tar.gz /usr/local登錄后復(fù)制
RUN 告訴docker要在鏡像內(nèi)執(zhí)行的命令,后可跟shell命令或普通命令 例:1.RUN useradd test 2.RUN /bin/echo "hello test"登錄后復(fù)制
CMD 容器啟動(dòng)時(shí)要運(yùn)行的命令 例:1.CMD ["nginx"] 2.CMD ["service mysqld start"]登錄后復(fù)制
RUN & CMD 區(qū)別: RUN是構(gòu)建容器時(shí)就運(yùn)行的命令以及提交運(yùn)行結(jié)果,即執(zhí)行 docker build時(shí)運(yùn)行,一個(gè)dockerfile可以有多個(gè) CMD是容器啟動(dòng)時(shí)執(zhí)行的命令,即執(zhí)行 docker run時(shí)運(yùn)行,一個(gè)dockerfile只有1個(gè)登錄后復(fù)制
LABEL為鏡像指定標(biāo)簽 例:LABEL version="1.0"登錄后復(fù)制
EXPOSE 將容器的監(jiān)聽端口暴露給外部,這樣才能使主機(jī)和container建立映射,即在dokcer run使指定-p端口映射 關(guān)系 例:EXPOSE 80登錄后復(fù)制
ENV 設(shè)置環(huán)境變量 例:ENV PATH /usr/local/nginx/sbin:$PATH登錄后復(fù)制
VOLUME 可實(shí)現(xiàn)掛載功能,可以將內(nèi)地文件夾或者其他容器中的文件夾掛在到這個(gè)容器中,容器使用的是AUFS, 這種文件系統(tǒng)不能持久化數(shù)據(jù),當(dāng)容器關(guān)閉后,所有的更改都會(huì)丟失。所以當(dāng)數(shù)據(jù)需要持久化時(shí)用這個(gè)命令。 例:VOLUME /usr/local/nginx/conf/nginx.conf /etc/nginx/nginx.conf 將主機(jī)上的/usr/local/nginx/conf/nginx.conf文件掛在到容器的/etc/nginx/nginx.conf文件登錄后復(fù)制
copy 與add類似,區(qū)別為copy后只能跟本地目錄登錄后復(fù)制
workdir 設(shè)置工作目錄,類似于linux的cd命令登錄后復(fù)制
user 設(shè)置啟動(dòng)容器的用戶 1.USER daemon 2.USER UID登錄后復(fù)制
stopsignal 當(dāng)容器退出時(shí)給系統(tǒng)發(fā)送什么樣的指令dockerfile命令其實(shí)有好多和linux系統(tǒng)本身命令的功能相似,還是相對(duì)比較好理解,為方便理解,博主做了一個(gè)關(guān)于將nginx服務(wù)打包成鏡像并使用的一個(gè)例子。
首先我們需要把我們的要用到的nginx安裝包和dockerfile放在同一目錄下
創(chuàng)建Dockerfile文件,其實(shí)就是把nginx的安裝過程寫成了腳本,只不過要符合dockerfile的規(guī)范。
登錄后復(fù)制
FROM centos:6.7 ---基礎(chǔ)鏡像centos6.7 MAINTAINER test ----dockerfile作者,testADD nginx-1.6.2.tar.gz /usr/local/src ----解壓nginx安裝包到container的/usr/local/src中 RUN yum -y install wget gcc gcc-c++ make openssl-devel pcre-devel ---在容器內(nèi)要執(zhí)行的命令,安裝包依賴 RUN useradd -s /sbin/nologin nginx --------在容器內(nèi)要執(zhí)行的命令,新增nginx用戶 WORKDIR /usr/local/src/nginx-1.6.2 ------------container內(nèi)跳轉(zhuǎn)目錄到/usr/local/src/nginx-1.6.2 RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module && make && make install ------ 在容器內(nèi)要執(zhí)行的命令,源碼安裝nginx RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf ------在容器內(nèi)要執(zhí)行的命令,設(shè)置nginx前臺(tái)運(yùn)行 ENV PATH /usr/local/nginx/sbin:$PATH ---- ---設(shè)置環(huán)境變量 EXPOSE 80 --------------------------------------------設(shè)置映射端口 CMD ["nginx"] ---------------------------------------容器啟動(dòng)時(shí)要執(zhí)行的命令
構(gòu)建鏡像操作
登錄后復(fù)制
docker build執(zhí)行
登錄后復(fù)制
docker build -t nginx:1.6 . -t ---------指定鏡像名和標(biāo)簽請(qǐng)注意,最后面有一個(gè)點(diǎn)?‘.’,指定dockerfile的路徑,也可以寫為絕對(duì)路徑
執(zhí)行成功會(huì)出現(xiàn)
查看本地鏡像可以看到我們構(gòu)建的鏡像
運(yùn)行我們構(gòu)建的鏡像,映射到本地的80端口
查看本地端口80
訪問本地80端口,成功
總結(jié)
以上是生活随笔為你收集整理的Docker的安装和使用及dockerfile简单使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021-05-08 docker sa
- 下一篇: 2021-05-10 Matlab短时傅