溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

docker的介紹及簡單使用

發(fā)布時(shí)間:2021-07-20 17:50:00 來源:億速云 閱讀:208 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“docker的介紹及簡單使用”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

1.docker是什么?

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ù)端。

2.容器與鏡像

  • 鏡像:鏡像是只讀文件,提供運(yùn)行程序完整的軟硬件資源。

  • 容器:容器是鏡像的實(shí)例,由docker負(fù)責(zé)創(chuàng)建,容器之間彼此隔離。

3. docker執(zhí)行流程

docker pull redis

客戶端 --> Docker Daemon 檢查redis鏡像,若本地不存在-> 從遠(yuǎn)程中央倉庫獲取鏡像

docker run redis

客戶端->Docker Daemon redis鏡像存在->創(chuàng)建容器,由redis對外暴露服務(wù),對內(nèi)容器就是一個(gè)完整的centos系統(tǒng)。

4.常用命令

  • 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> - 刪除鏡像

5. 快速部署tomcat

docker run -p 8000:8080 -d tomcat:latest
# 在容器中部署最近版本的tomcat   hub.docker.com
# 端口映射-p 8000:8080  8000為宿主機(jī)端口,8080為tomcat端口
# -d 后臺運(yùn)行

6. 容器內(nèi)部結(jié)構(gòu)

以tomcat容器為例: 包含tomcat, jdk, mini版linux系統(tǒng)

7.在容器中執(zhí)行命令

docker exec -it【交互式方式執(zhí)行命令】容器id/容器name 命令

docker exec -it cc0ebcaaef7a /bin/bash 進(jìn)入容器bash

8.編寫Dockerfile

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","&"]

9.鏡像分層

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í)行過的步驟緩存。

10.Dockerfile基礎(chǔ)命令

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)境常量

11. Dockerfile運(yùn)行指令

# 不同的執(zhí)行時(shí)機(jī)。
RUN xx              #在build 構(gòu)建時(shí)執(zhí)行命令
ENTRYPOINT xx       #容器啟動時(shí)執(zhí)行命令
CMD xx              #容器啟動后執(zhí)行默認(rèn)的命令或參數(shù)
11.1 RUN - 構(gòu)建時(shí)運(yùn)行
RUN yum install -y vim            #shell 命令格式
RUN ["yum","install","-y","vim"]  #Exec 命令格式
  • Shell 運(yùn)行方式

使用shell執(zhí)行時(shí),當(dāng)前shell是父進(jìn)程,生成一個(gè)子shell進(jìn)程, 在子shell中執(zhí)行腳本。

腳本執(zhí)行完畢,退出子shell,回到當(dāng)前shell。

  • Exec 運(yùn)行方式

使用Exec方式,會用Exec進(jìn)程替換當(dāng)前進(jìn)程,并且保持pid不變。

執(zhí)行完畢,直接退出,并不會退回之前的進(jìn)程環(huán)境。

11.2 ENTRYPOINT - 啟動命令
  • ENTRYPOINT(入口點(diǎn))用于在容器啟動時(shí)執(zhí)行命令。

  • Dockerfile中只有最后一個(gè)ENTRYPOINT會被執(zhí)行。

  • 推薦使用 exec格式

  • ENTRYPOINT一定會執(zhí)行。

11.3 CMD - 默認(rèn)執(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命令。

12. docker自定義構(gòu)建redis鏡像

# 下載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

13. docker間的通信

因?yàn)槿萜髅看螁佣紩峙湫碌膇p,那么怎么在容器間有效的通信呢?

13.1 單向通信
# 創(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
13.2 基于Bridge的雙向通信
# 查看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

14. 容器間的數(shù)據(jù)共享

宿主機(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í)用文章!

向AI問一下細(xì)節(jié)

免責(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)容。

AI