您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“docker的介紹及簡單使用”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
docker是一個(gè)提供應(yīng)用打包,部署與運(yùn)行應(yīng)用的容器化平臺。
應(yīng)用程序 -> docker引擎-> 物理硬件
應(yīng)用程序不再直接面向底層資源,而是面向中間層docker引擎來操作。
docker引擎包含:docker服務(wù)端, rest api ,docker客戶端。
通過這種結(jié)構(gòu),用戶可以通過客戶端很方便的管理多個(gè)服務(wù)端。
鏡像:鏡像是只讀文件,提供運(yùn)行程序完整的軟硬件資源。
容器:容器是鏡像的實(shí)例,由docker負(fù)責(zé)創(chuàng)建,容器之間彼此隔離。
docker pull redis
客戶端 --> Docker Daemon 檢查redis鏡像,若本地不存在-> 從遠(yuǎn)程中央倉庫獲取鏡像
docker run redis
客戶端->Docker Daemon redis鏡像存在->創(chuàng)建容器,由redis對外暴露服務(wù),對內(nèi)容器就是一個(gè)完整的centos系統(tǒng)。
docker pull 鏡像名<:tags> - 從遠(yuǎn)程倉庫抽取鏡像
docker images - 查看本地下載的鏡像
docker run 鏡像名<:tags> - 創(chuàng)建容器,啟動應(yīng)用
docker ps - 查看正在運(yùn)行的鏡像
docker rm <-f> 容器id - 刪除容器
docker rmi <-f> 鏡像名:<:tags> - 刪除鏡像
docker run -p 8000:8080 -d tomcat:latest # 在容器中部署最近版本的tomcat hub.docker.com # 端口映射-p 8000:8080 8000為宿主機(jī)端口,8080為tomcat端口 # -d 后臺運(yùn)行
以tomcat容器為例: 包含tomcat, jdk, mini版linux系統(tǒng)
docker exec -it【交互式方式執(zhí)行命令】容器id/容器name 命令
docker exec -it cc0ebcaaef7a /bin/bash 進(jìn)入容器bash
FROM tomcat:latest MAINTAINER yz.com WORKDIR /usr/local/tomcat/webapps ADD docker-web ./docker-web
# 在Dockerfile目錄下執(zhí)行打包 docker build -t yz.com/mywebapp.0.1 . # 運(yùn)行容器 docker run -p 8001:8080 yz.com/mywebapp.0.1 # 訪問 http://localhost:8001/docker-web/index.html
FROM java:8 MAINTAINER yz.com WORKDIR /usr/local/apps/jars ADD xx.jar ./xx.jar ENTRYPOINT ["nohup","java","-jar","xx.jar","&"]
Sending build context to Docker daemon 3.584kB Step 1/4 : FROM tomcat:latest ---> 2ae23eb477aa Step 2/4 : MAINTAINER yz.com ---> Using cache ---> b0efa3602df6 Step 3/4 : WORKDIR /usr/local/tomcat/webapps ---> Using cache ---> bf93f5630ca1 Step 4/4 : ADD docker-web ./docker-web ---> Using cache ---> 603504ab383f Successfully built 603504ab383f Successfully tagged dmall.com/inventory-app:0.2
每一個(gè)步驟都會產(chǎn)生一個(gè)臨時(shí)的鏡像, ---> Using cache 代表會使用之前執(zhí)行過的步驟緩存。
FROM centos # 制作基準(zhǔn)鏡像(基于centos) FROM scratch # 不依賴任何鏡像 # 盡量使用官方的Base Image MAINTAINER yz.com LABEL version = "1.0" LABEL description = "鏡像描述" WORKDIR /usr/local/xx # 工作路徑,盡量使用絕對路徑,會自動創(chuàng)建目錄,并cd到當(dāng)前目錄 ADD xx.jar ./ #復(fù)制xx.jar文件到 工作路徑 ADD test.tar.gz / #添加到根目錄并解壓 ENV JAVA_HOME /usr/local/java8 # 設(shè)置環(huán)境常量
# 不同的執(zhí)行時(shí)機(jī)。 RUN xx #在build 構(gòu)建時(shí)執(zhí)行命令 ENTRYPOINT xx #容器啟動時(shí)執(zhí)行命令 CMD xx #容器啟動后執(zhí)行默認(rèn)的命令或參數(shù)
RUN yum install -y vim #shell 命令格式 RUN ["yum","install","-y","vim"] #Exec 命令格式
使用shell執(zhí)行時(shí),當(dāng)前shell是父進(jìn)程,生成一個(gè)子shell進(jìn)程, 在子shell中執(zhí)行腳本。
腳本執(zhí)行完畢,退出子shell,回到當(dāng)前shell。
使用Exec方式,會用Exec進(jìn)程替換當(dāng)前進(jìn)程,并且保持pid不變。
執(zhí)行完畢,直接退出,并不會退回之前的進(jìn)程環(huán)境。
ENTRYPOINT(入口點(diǎn))用于在容器啟動時(shí)執(zhí)行命令。
Dockerfile中只有最后一個(gè)ENTRYPOINT會被執(zhí)行。
推薦使用 exec格式
ENTRYPOINT一定會執(zhí)行。
CMD用于設(shè)置默認(rèn)執(zhí)行的命令
如果Dockerfile中出現(xiàn)多個(gè)CMD,則只有最后一個(gè)被執(zhí)行。
如容器啟動時(shí)附加指令,則CMD被忽略。
推薦使用Exec格式執(zhí)行命令
CMD不一定會被執(zhí)行,如docker run yz.com/test_cmd:0.1 ls 后面跟一個(gè)命令之后,會替換cmd命令。
# 下載redis 源碼 wget http://download.redis.io/releases/redis-5.0.9.tar.gz
編寫Dockerfile文件
FROM centos RUN ["yum", "install", "-y", "gcc", "gcc-c++", "net-tools", "make"] WORKDIR /usr/local ADD redis-5.0.9.tar.gz ./ WORKDIR /usr/local/redis-5.0.9/src RUN make && make install WORKDIR /usr/local/redis-5.0.9/ ADD redis-6379.conf ./ EXPOSE 6379 CMD ["redis-server", "redis-6379.conf"]
# 構(gòu)建redis鏡像 docker build -t xx.com/redis-6379 ./ # 運(yùn)行redis容器 docker run -p 6379:6379 xx.com/redis-6379 # 啟動關(guān)閉容器 docker start containerId docker stop containerId
因?yàn)槿萜髅看螁佣紩峙湫碌膇p,那么怎么在容器間有效的通信呢?
# 創(chuàng)建redis 6379 docker run -p 6379:6379 -d --name redis6379 redis # 創(chuàng)建centos link redis6379 docker run --name centos --link redis6379 -it centos /bin/bash # 測試能夠順利ping通 ping redis6379 64 bytes from redis6379 (172.17.0.4): icmp_seq=1 ttl=64 time=0.061 ms
# 查看docker網(wǎng)絡(luò) docker network ls NETWORK ID NAME DRIVER SCOPE 6b60f6c242a3 bridge bridge local b51d649d7adb host host local 6c0f31888ef7 none null local # 創(chuàng)建新的網(wǎng)橋 docker network create -d bridge my-bridge # 查看網(wǎng)絡(luò) docker network ls NETWORK ID NAME DRIVER SCOPE 6b60f6c242a3 bridge bridge local b51d649d7adb host host local 68aa95b088c3 my-bridge bridge local 6c0f31888ef7 none null local # 新開兩個(gè)centos容器 docker run -dit --name os1 centos docker run -dit --name os2 centos # 綁定到my-bridge docker network connect my-bridge os1 docker network connect my-bridge os2 # 進(jìn)入os1 ping os2 docker exec -it os1 bash ping os2 PING os2 (172.18.0.3) 56(84) bytes of data. 64 bytes from os2.my-bridge (172.18.0.3): icmp_seq=1 ttl=64 time=0.032 ms # 進(jìn)入os2 ping os1 ping os1 PING os1 (172.18.0.2) 56(84) bytes of data. 64 bytes from os1.my-bridge (172.18.0.2): icmp_seq=1 ttl=64 time=0.032 ms
宿主機(jī)掛載一個(gè)卷, 多個(gè)容器共享同一個(gè)卷的數(shù)據(jù)。
# 通過-v掛載宿主機(jī)目錄 docker run --name os3 -dit -v /root:/mnt/root centos bash docker exec -it os3 bash ls /mnt/root
# 創(chuàng)建共享容器 docker create --name webapp -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat /bin/true # 共享容器掛載點(diǎn) docker run --volumes-from webapp --name tomcat2 -p 18002:8080 -d tomcat # 訪問宿主機(jī)18002端口,發(fā)現(xiàn)生效
利用這個(gè)特性可以將宿主機(jī)上面的靜態(tài)資源如頁面文件,共享給容器的資源目錄
“docker的介紹及簡單使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。