日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【docker】docker学习

發布時間:2023/12/14 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【docker】docker学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

docker概念

docker主機(Host):安裝了Docker程序的機器(Docker直接安裝在操作系統之上);
docker客戶端(Client):連接docker主機進行操作﹔
docker倉庫(Registry):用來保存各種打包好的軟件鏡像﹔
docker鏡像(Images):軟件打包好的鏡像﹔放在docker倉庫中;

鏡像就像安裝包,容器就是安裝的應用程序

可以通過鏡像安裝多個相同的應用程序,但是端口號不能相同

安裝docker:

  • yum包更新 【sudo yum update】
  • 安裝軟件包yum-util提供yum-config-manager功能【sudo yum install -y yum-utils device-mapper-persistent-data lvm2】
  • 設置yum源 【sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo】
  • 安裝docker 【sudo yum install docker -ce】
  • 查看版本:【docker -v】
  • 啟動docker 根據linux版本進行相應命令

操作docker相關命令

檢查內核版本,必須是3.10及以上【uname ‐r】 安裝docker(輸入y確認安裝)【yum install docker 】 查看版本【docker ‐v】 開機啟動docker 【systemctl enable docker】啟動docker 【systemctl start docker 】 停止docker 【systemctl stop docker】 docker概要信息【docker info】 docker幫助文檔【docker --help】

鏡像倉庫

Docker默認倉庫地址是Docker Hub官網地址。

設置ustc鏡像便于docker拉取某些需要的鏡像 ustc:老牌linux鏡像服務提供者 ustc的docker鏡像加速器速度很快

  • 編輯文件【vi /etc/docker/daemon.json】
  • 輸入內容
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] }

鏡像與容器

鏡像命令

鏡像是構建docker的基石,可以將鏡像當做容器的源代碼 體積小,便攜,易分享存儲和更新
由于鏡像可能重名(如版本不同),所有通過tag即標簽區分
鏡像可以從所設置的源中拉取

  • 【docker images】 查看鏡像
  • 【docker search 鏡像名稱】 搜索鏡像 如:docker search redis
  • 【docker pull 鏡像名稱:tag】 拉取鏡像
  • 【docker rmi 鏡像id】 刪除鏡像 鏡像有運行中的容器時不能刪除
  • 【docker rmi ‘docker images -q’】 刪除全部鏡像

容器命令

通過鏡像簡單啟動容器:【docker run -d 容器名稱:標簽】

通過鏡像啟動容器(指定參數):【docker run --name 自己給容器隨便取個名稱(–name和這里的名稱可省) -p 主機端口:容器端口 -d 容器名稱:標簽】

  • 標簽即相當于版本,latest標簽即最新的意思
  • 參數:
    • –name 容器名稱
    • [-p]為docker和本機物理端口映射
    • [-d]為后臺運行

容器命令:

  • 查看正在運行的容器 :【docker ps】

  • 查看所有容器: 【docker ps -a】

  • 查看最后一次運行的容器:【docker ps -l】

  • 啟動容器:【docker start 容器名稱或id】

  • 停止容器:【docker stop 容器名稱或id】

  • 文件拷貝:【docker cp 待拷貝文件路徑 容器名稱:路徑】宿主機到容器 容器關閉時也可以正常拷貝文件進去

  • 查看容器ip:

    • 【docker inspect 容器名稱】 顯示一推信息
    • 【docker inspect --format=’{{.NetWorkSettings.IPAddress}}’ 容器名稱 】 直接顯示ip地址,其他信息也可以這樣顯示
  • 刪除容器:【docker rm 容器名稱】 需要停止容器后才能進行移除

  • 進入容器:【docker exec -it 容器名稱或id /bin/bash】 進入容器后操作命令和linux一致就行

  • 退出到宿主機位置 容器停止:【docker exit】

  • 查看容器運行日志:【docker logs -f 容器tag】

交互式容器

使用交互式運行容器,容器運行后直接進入到容器內部,退出容器內部后,容器直接關閉

創建交互式容器:【docker run -it --name 容器名稱 鏡像名稱:標簽 /bin/bash 】

  • 交互式創建容器后即進入到容器
  • 參數:
    • -i:表示運行容器
    • -t:表示容器啟動后會進入其命令行。加入這兩個參數后,容器創建就能登錄進去。即分配一個偽終端。
  • 每個容器相當于一個小電腦(服務器)

通過鏡像啟動容器 也可以通過docker exec -it 容器名稱或id /bash 進入容器進行操作

守護式容器

守護式進程的特點是:

  • 能夠長期運行
  • 沒有交互式會話
  • 適合運行應用程序和服務

創建守護式容器: 【docker run -id --name 容器名稱 鏡像名稱:標簽】

將容器保存為鏡像

# 基于自己容器創建的鏡像創建容器,該新建的容器默認包含自己容器所擁有的資源,因為是基于其創建的 【docker commit 容器名稱 鏡像名稱】 【docker run -di --name=myxxx -p 宿主機端口:容器端口 自己容器所保存的鏡像名稱】 # 鏡像導入導出 【docker save -o 文件路徑 鏡像名稱】 鏡像導出為鏡像文件 【docker load -i 文件路徑】 鏡像文件恢復為鏡像

docker數據卷

目錄掛載:宿主機目錄和容器目錄形成映射關系。 目錄掛載后,操作宿主機的目錄即操作容器的目錄

創建容器時加【-v 宿主機目錄:容器目錄】 如: 【docker run -id --name=mycentos3 centos:7 -v /usr/local/myhtml:/usr/local/myhtml】 【docker run -id -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7】也可以

目錄掛載即docker數據卷。需求:為了部署demo工程,需要使用到cp的命令將宿主機內的demo文件復制到容器內部

數據卷:將宿主機的一個目錄,映射到容器的一個目錄中,可以在宿主機中操作目錄中的內容,那么容器內部映射的文件,也會跟著一起改變。

  • 創建數據卷:【docker volume create 數據卷名稱】 創建數據卷之后,默認會存放在一個目錄下/var/1ib/docker/volumes/數據卷名稱/_data
  • 查看數據卷的詳細信息【docker volume inspect 數據卷名稱】
  • 查看全部數據卷:【docker volume ls】
  • 刪除數據卷 【docker volume rm 數據卷名稱】
  • 應用數據卷
# 1----通過創建好的數據卷進行映射。當映射數據卷時,如果數據卷不存在,Docker會自動創建,會將容器內部自帶的文件存儲在默認的存放路徑中。 docker run -v 數據卷名稱︰容器內部的路徑 鏡像id# 2----直接通過路徑進行映射。直接指定一個路徑作為數據卷的存放位置,這個路徑下是空的。 docker run -v 路徑︰容器內部的路徑 鏡像id

Dockerfile

Dockerfile就是一系列命令和參數構成的腳本 這些命令應用于基礎鏡像并最終創建一個新的鏡像。 文件名稱:【Dockerfile】

存在意義:更方便構建鏡像文件

  • 開發:提供一個完全一致開發環境
  • 測試:直接拿開發時構建的鏡像或通過dockerfile文件構建一個鏡像開始工作
  • 運維:部署時可以實現應用無縫移植

相關指令:

  • 【from image_name:tag】定義使用哪個基礎鏡像啟動構建流程
  • 【maintainer user_name】聲明鏡像創建者
  • 【env key value】設置環境變量(可寫多條)
  • 【run command】dockerfile的核心部分(可寫多條)
  • 【add source_dir/file dest_dir/file】宿主機文件復制到容器內 如果是壓縮文件,復制后會自動解壓
  • 【copy source_dir/file dest_div/file】和add類似,但有壓縮文件不會被解壓
  • 【workdir path_div】 設置工作目錄

例子:構建jdk1.8鏡像 基于centos:7

  • 創建目錄 上傳jdk的tar包 進入目錄
  • 構建dokerfile文件 名稱必須叫dockerfile 進入文件
  • 編寫文件 保存
FROM centos:7 MAINTAINER xiaoai WORKDIR /usr RUN mkdir /usr/local/java ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/ ENV JAVA_HOME /usr/local/java/jdk1.8.0_171 ENV JRE_HOME $JAVA_HOME/jre7 ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH ENV PATH $JAVA_HOME/bin:$PATH

【docker build -t=‘jdk1.8’ Dockerfile所在目錄】 所在當前目錄則用 .表示 通過Dockerfile構建鏡像

說明

Docker以從上到下的順序運行Dockerfile的指令。為了指定基本鏡像,第一條指令必須是FROM。一個聲明以#字符開頭則被視為注釋。

可以在Dpcker文件中使用RUN,CMD,FROM,EXPOSE,ENv等指令。

構建鏡像:【docker bui1d -t 鏡像名稱[:tag]】

基本結構

  • 基礎鏡像信息
  • 維護者信息
  • 鏡像操作指令
  • 容器啟動時執行指令

常用指令

from:指定基礎鏡像,必須為第一個命令

# 格式:FROM <image>FROM <image> :<tag>FROM <image>@<digest> #示例: FROM mysq1 :5.6# 注: tag或digest是可選的,如果不使用這兩個值時,會使用latest版本的基礎鏡像

maintainer:維護者信息

# 格式:MAINTAINER <name> # 示例:MAINTAINER Jasper XuMAINTAINER sorex@163.comMAINTAINER Jasper Xu<sorex@163.com>

run:構建鏡像時執行的命令

RUN用于在鏡像容器中執行命令,其有以下兩種命令執行方式:she11執行 # 格式:RUN <command> # exec執行格式:RUN [ "executab1e","param1", "param2"] # 示例:RUN [ ""executable","param1","param2""]RUN apk updateRUN ["/etc/execfi1e","arg1","arg1"]# 注:RUN指令創建的中間鏡像會被緩存,并會在下次構建中使用。如果不想使用這些緩存鏡像,可以在構建時指定--no-cache參數,如: docker build --no-cache

add:將本地文件添加到容器中,tar類型文件會自動解壓(網絡壓縮資源不會被解壓),可以訪問網絡資源,類似wget

# 格式:ADD <src>. . . <dest>ADD ["<src>" ,... "<dest>"]用于支持包含空格的路徑 # 示例:ADD hom*/mydir/ # 添加所有以"hom"開頭的文件ADD hom?.txt /mydir/ # ?替代一個單字符,例如:"home.txt"ADD test relativeDir/#添加“test”到^wORKDIR `/relativeDir/ADD test /absoluteDir/#添加“test”到/absoluteDir/

copy:功能類似ADD,但是是不會自動解壓文件,也不能訪問網絡資源
cmd:構建容器后調用,也就是在容器啟動時才進行調用。

# 格式:CMD ["executable" , "param1" , "param2"](執行可執行文件,優先)CMD ["param1 " , "param2"](設置了ENTRYPOINT,則直接調用ENTRYPOINT添加參數)CMD command param1 param2(執行she11內部命令) # 示例:CMD echo "This is a test." l wc -CMD ["/usr/bin/wc" , "--he1p"]# 注:CMD不同于RUN,CMD用于指定在容器啟動時所要執行的命令,而RUN用于指定鏡像構建時所要執行的命令。

entrypoint :配置容器,使其可執行化。配合CMD可省去"application",只使用參數。

# 格式;ENTRYPOINT ["executable","param1","param2""](可執行文件,優先)ENTRYPOINT command param1 param2 (she11內部命令) # 示例:FROM ubuntuENTRYPOINT ["top","-b"]CMD ["-c"]# 注: ENTRYPOINT與CMD非常類似,不同的是通過docker run執行的命令不會覆蓋ENTRYPOINT,而dockerrun命令中指定的任何參數,都會被當做參數再次傳遞。 # ENTRYPOINT。Dockerfile中只允許有一個。 # ENTRYPOINT命令,多指定時會覆蓋前面的設置,而只執行最后的ENTRYPOINT指令。

label:用于為鏡像添加元數據

# 格式:LABEL <key>=<value> <key>=<value> <key>=<value> ...示例:LABEL version="1.0" description="這是一個web服務器" by="ghz"# 注:使用LABEL指定元數據時,一條LABEL指定可以指定一或多條元數據,指定多條元數據時不同元數據之間通過空格分隔。推薦將所有的元數據通過一條LABEL指令指定,以免生成過多的中間鏡像。

env:設置環境變量

# 格式:# <key>之后的所有內容均會被視為其<va1ue>的組成部分,因此,一次只能設置一個變量ENV <key> <value># 可以設置多個變量,每個變量為一個"<key>=<value>"的鍵值對,如果<key>中包含空格,可以使用\來進行轉義,也可以通過""來進行標示;另外,反斜線也可以用于續行ENV <key>=<value> ... # 示例:ENV myName John DoeENV myDog Rex The DogENV mycat=f1uffy

expose:指定于外界交互的端口

# 格式:EXPOSE <port> [<port>...] # 示例:EXPOSE 80 443EXPOSE 8080 EXPOSE 11211/tcp 11211/udp# 注:EXPOSE并不會讓容器的端口訪問到主機。要使其可訪問,需要在docker run運行容器時通過p來發布這些端口,或通過-P參數來發布EXPOSE導出的所有端口

volume:用于指定持久化目錄

# 格式:VOLUME ["/path/to/dir"] # 示例:VOLUME ["/data"]VOLUME ["/var/www","/var/log/apache2","/etc/apache2"] # 注:一個卷可以存在于一個或多個容器的指定目錄,該目錄可以繞過聯合文件系統,并具有以下功能: # 1卷可以容器間共享和重用 # 2容器并不一定要和其它容器共享卷3修改卷后會立即生效 # 4對卷的修改不會對鏡像產生影響 # 5卷會一直存在,直到沒有任何容器在使用它

workdir:工作目錄,類似于cd命令

# 格式:WORKDIR /path/to/workdir # 示例:WORKDIR /a(這時工作目錄為/a)WORKDIR b (這時工作目錄為/a/b)WORKDIR c(這時工作目錄為/a/b/c)# 注:通過WORKDIR設置工作目錄后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都會在該目錄下執行。在使用docker run運行容器時,可以通過-w 參數覆蓋構建時所設置的工作目錄。

user:指定運行容器時的用戶名或UID,后續的 RUN也會使用指定用戶。使用USER指定用戶時,可以使用用戶名、UID或GID,或是兩者的組合。當服務不需要管理員權限時,可以通過該命令指定運行用戶。并且可以在之前創建所需要的用戶

# 格式:USER userUSER user: groupUSER uidUSER uid:gidUSER user:gidUSER uid: group # 示例:USER www# 注:使用USER指定用戶后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT都將使用該用戶。鏡像構建完成后,通過docker run運行容器時,可以通過-u參數來覆蓋所指定的用戶。

age:用于指定傳遞給構建運行時的變量

# 格式:ARG <name>[=<default value>] # 示例:ARG siteARG bui1d_user=www

onbuilde:用于設置鏡像觸發器

# 格式: ONBUILD [INSTRUCTION] # 示例:ONBUILD ADD . /app/srcONBUILD RUN /usr/loca1/bin/python-bui1d --dir /app/src# 注:當所構建的鏡像被用做其它鏡像的基礎鏡像,該鏡像中的觸發器將會被鑰觸發

實例1 構建nginx鏡像

# This my first nginx Dockerfile # version 1.0 # Base images基礎鏡像 FROM centos # MAINTAINER維護者信息 MAINTAINER ghz # ENV設置環境變量 ENV PATH/usr/loca1/nginx/sbin : $PATH # ADD文件放在當前目錄下,拷過去會自動解壓 ADD nginx-1.8.0.tar.gz /usr/loca1/ # ngix ADD epe1-release-latest-7.noarch.rpm /usr/1oca1/ #企業linux擴展包 # RUN執行以下命令 RUN rpm -ivh /usr /loca1/epe1-release-1atest-7.noarch.rpm RUN yum instal1 -y wget lftp gcc gcc-c++ make openss1-deve1 pcre-deve1 pcre && yum cleana11 RUN useradd -s /sbin/no1ogin -M www # WORKDIR相當于cd WORKDIR /usr/loca1/nginx-1.8.0 RUN ./configure --prefix=/us r/1oca1/nginx --user=www --group=www --with-http_ss1_module --with-pcre && make && make insta11 RUN echo "daemon off; " >>/etc/nginx.conf #EXPOSE映射端口 EXPOSE 8o #CMD運行以下命令 CMD ["nginx"]

實例2 tomcat鏡像

  • 打成war包
# 把項目打成war包 jar -cvfMo demo.war demo/*
  • 通過Dockerfile
FROM daoc1oud.io/library/tomcat:8.5.15-jre8 ADD demq.war /usr/1oca1/tomcat/webapps
  • 在Dockerfile目錄下執行構建鏡像命令
# 通過Dockerfile構建鏡像 docker build -t tomcat_my:1.2 .
  • 查看鏡像并通過構建的鏡像創建容器
# 查看鏡像 docker images # 啟動鏡像 docker run -d -p 8080:8080 --name tomcat imageId

docker私有倉庫

私有倉庫存放鏡像,中央倉庫存放通用鏡像,私有倉庫可以存放自己所構建的鏡像,便于同一局域網的使用

  • 拉取私有倉庫鏡像 【docker pull registry】
  • 創建容器即創建私有倉庫 【docker run -di --name=registry -p 5000:5000 registry】
  • 網頁訪問倉庫【宿主機ip:容器創建時映射的端口/v2/_catalog】 訪問到json數據即私有倉庫創建成功
  • 修改配置文件使docker信任私有倉庫才能上傳鏡像到私有倉庫【vi /etc/docker/daemon.json】添加配置:
{"insecure_registries":["私服ip地址:端口"] }
  • 重啟docker服務

鏡像上傳到私有倉庫

【docker tag 鏡像名稱 私服ip和端口/鏡像名稱】如【docker tag jdk1.8 192.168.x.x:5000/jdk1.8】打標簽 相當于復制一個鏡像為上傳做準備
【docker push 私服ip和端口/鏡像名稱】 如【docker push 192.168.x.x:5000/jdk1.8】 上傳鏡像到私服
訪問私服可以查看到上傳的鏡像
獲取鏡像 【docker pull 私服ip和端口/鏡像名稱】

例:docker搭建應用環境:

mysql部署

拉取鏡像:【docker pull centos/mysql-centos7】 后面即mysql路徑

創建容器:【docker run -di --name tensquare_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD 密碼 鏡像名稱】

參數:

  • -p 端口映射 操作宿主機33306端口即相當于操作容器的3306端口

  • -e MYSQL_ROOT_PASSWORD = 指定mysql密碼

  • –mysql圖形化界面軟件即可進行mysql連接(通過宿主機來連接容器中的mysql) 需要:宿主機ip 密碼 用戶名 端口==映射的宿主機的端口如33306

tomcat部署

拉取鏡像 pull

創建容器 【docker run -di --name mytomcat -p 9000:8080 -v /usr/local/webapps:/usr/local/webapps tomcat:7-jre7】

使用目錄掛載后由于做了目錄映射,直接在網頁訪問tomcat是無法直接訪問的,可以把war包上傳到目錄下進行訪問

nginx部署

拉取鏡像 pull
創建容器 【docker run -di --name mynginx -p 80:80 nginx】

redis部署

拉取鏡像 pull
創建容器 【docker run -di --name myredis -p 6379:6379 redis】
測試:客戶端進入cmd -》redis-cli -h 遠程ip -》連接成功,存儲查詢正常即完成。

例:docker簡單使用例子

通過docker構建tomcat部署web項目。

復制項目到容器目錄運行

1- 準備一個簡單web項目并上傳到linux

  • 目錄結構
│ index.html └─WEB-INFweb.xml
  • 文件內容
<!-- web.xml --> <?xm1 version=""1.0" encoding="UTF-8""?> <web-app xm1ns="http://xm1ns.jcp.org/xm1/ns/javaee"xm1ns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xm1ns.jcp.org/xm1/ns/javaeehttp://xm1ns.jcp.org/xm1/ns/javaee/web-app_3_1.xsd"version="3.1"metadata-complete="true"> </web-app><!-- index.html --> <!doctype html> <html> <head><title>dockerTest</title> </head> <body><h1>hello docker!</h1> </body> </html>
  • 上傳linux 如: 通過FileZilla工具上傳

2-通過Docker安裝tomcat

# 獲取Tomcat鏡像 docker pu17 daocloud.io/library/tomcat:8.0.45 # 查看Tomcat鏡像 docker images # 創建Tomcat容器 docker run -d -p 8080:8080 --name tomcat 鏡像tag(獲取IMAGE ID, imageId不用輸完整也行) # 查看tomcat啟動 瀏覽器訪問http://ip地址:8080

3-把上傳的項目復制到tomcat的webapp目錄下

# 查看運行的容器 docker ps # 進入tomcat容器查看目錄 docker exec -it imageId bash # 進入webapps 查看路徑 輸出路徑: /usr/local/tomcat/webapps cd webapps pwd# 可以退出容器 獲取重新打開一個終端 進入項目所在目錄復制項目到webapp目錄 exit docker cp ./demo/ imageId:/usr/local/tomcat/webapps# 可以再次進入tomcat容器查看是否復制成功 docker exec -it imageId bash cd webapps ls

4- 瀏覽器訪問項目 可通過【docker logs -f tomcat】查看運行日志

復制項目到數據卷映射目錄操作運行

1、2、4一致:如果基于上面直接復制項目到容器目錄了可以刪除項目后停止容器

# 進入到容器內tomcat的webapp目錄中 rm -r demo/ # 停止容器 docker stop [imageId(可通過[docker ps查看]) docker rm 容器名稱/imageId

3-創建數據卷映射目錄并復制項目到映射的目錄下

# 1-----創建數據卷 docker volume create v01 # 啟動容器時進行數據卷映射 docker run -d -p 8080:8080 -v v01:/usr/local/tomcat/webapps/ --name tomcat imageId # 可以通過【docker volume ls】查看數據卷列表。查看數據卷詳細信息獲取docker自動創建數據卷時映射的路徑,即掛載路徑:[MountPoint] docker volume inspect v01 # 復制項目到映射的路徑中 cp demo -r /var/lib/docker/volumes/v01/_data# 2----直接映射目錄 # 創建映射的目錄 mkdir tomcat_webapps # 停止tomcat并刪除容器 docker stop 容器名稱/imageId docker rm 容器名稱/imageId # 創建容器直接映射目錄 # 如:docker run -d -p 8080:8080 -v /root/other/dockerTest/tomcat_webapps:/usr/local/tomcat/webapps/ --name tomcat feba docker run -d -p 8080:8080 -v 需要映射的路徑:/usr/local/tomcat/webapps/ --name tomcat imageId # 項目復制到映射的目錄中 cp demo -r /root/other/dockerTest/tomcat_webapps

docker-compose

總結

以上是生活随笔為你收集整理的【docker】docker学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。