跟我一起學Docker
跟我一起學Docker
-
什麼是docker
docker就是實現輕量級的作業系統虛擬化的解決方案
翻譯過來就是:讓專案部署變得更加簡單 -
docker的優勢:
上手快,部署快,啟動快,可以快速的部署環境,縮短專案開發的生命週期 -
docker與傳統的虛擬機器相比的優勢
傳統的虛擬機器是建立在電腦的作業系統之上,在此虛擬機器上再次安裝各種環境,比如在windows上安裝ubantu然後在ubantu上配置各種服務
docker不同,docker是基於liunx的容器技術,直接在docker中部署環境即可 -
docker的四個重要的組成部分
1.守護程序:docker是一個傳統的C/S架構程式,客戶端需要向守護程序傳送請求(建立容器等命令),守護程序或者是伺服器將完成工作並返回結果
2.docker的映象:映象是docker的基石,docker需要基於映象進行構建
3.docker容器:容器中放的是應用程式,用於執行程式
docker映象可以類比於java中的類,docker容器可以類比為Java中的物件
物件是類建立的,因此我們可以說docker容器是基於docker的映象建立的
- Registry註冊中心
註冊中心是用來儲存各種docker映象的
docker映象的註冊中心
Docker常見命令
- 關於映象的命令:
//檢視映象
docker images
//搜尋映象(例如tomcat映象)
docker search tomcat
//垃取映象(冒號後面加上映象的版本)
docker pull tomcat:7
//刪除映象,按照映象的id或者是名稱來刪除
docker rmi 映象ID
//刪除所有的映象
docker rmi `docker images -q`
- 關於容器的命令
//檢視正在執行的容器
docker ps
//檢視所有的容器
docker ps -a
//檢視最後一次執行的容器
docker ps -l
//檢視停止的容器
docker ps -f status=exited
建立與啟動容器:
建立容器常用的引數說明:
建立容器命令:docker run
-i:表示執行容器
-t:表示容器啟動後會進入其命令列。加入這兩個引數後,容器建立就能登入進去。即分配一個偽終端。
–name :為建立的容器命名。
-v:表示目錄對映關係(前者是宿主機目錄,後者是對映到宿主機上的目錄),可以使用多個-v做多個目錄或檔案對映。注意:最好做目錄對映,在宿主機上做修改,然後共享到容器上。
-d:在run後面加上-d引數,則會建立一個守護式容器在後臺執行(這樣建立容器後不會自動登入容器,如果只加-i -t兩個引數,建立後就會自動進去容器)。
-p:表示埠對映,前者是宿主機埠,後者是容器內的對映埠。可以使用多個-p做多個埠對映
1>互動式方式建立容器,使用exit命令退出的時候容器不會自動關閉
docker run -it --name=容器名稱 映象名稱:標籤 /bin/bash
2>守護式方式建立容器,使用exit命令退出的時候容器不會自動關閉
docker run -di --name=容器名稱 映象名稱:標籤
登陸守護式容器
docker exec -it 容器名稱 (或者容器ID) /bin/bash
停止、啟動、刪除容器
docker stop 容器名
docker start 容器名
docker rm 容器名(需要先停掉容器)
檔案拷貝
將檔案拷貝到容器中:
docker cp 需要拷貝的檔案或者是目錄 容器名稱:容器的目錄
將容器中的檔案拷貝出來
docker cp 容器名稱:容器的目錄 需要拷貝的檔案或者是目錄
docker中的目錄掛載
在建立容器的時候將宿主機的目錄與容器中的目錄進行對映,然後我們就可以通過修改宿主機目錄中的檔案內容來影響容器中的檔案,特別是修改一些配置檔案的時候就比較方便了。如果容器中沒有該目錄,那麼在容器建立的時候會新建該目錄,在容器建立的時候加上-v命令就可以實現目錄掛載
docker run -di -v 宿主機的檔案目錄:容器目錄 --name=映象的名字 映象:標籤
目錄掛載的命令為
docker run -di -v /user/local/myhtml:/user/local/myhtml --name=mytomcat tomcat:7-jre7
檢視容器的詳細資訊
docker inspect 容器名{容器Id}
檢視容器的IP
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱(容器ID)
通過docker搭建一個mysql的環境
-p 代表埠對映,格式為 宿主機對映埠:容器執行埠
-e 代表新增環境變數 MYSQL_ROOT_PASSWORD 是root使用者的登陸密碼
連線宿主機的IP ,指定埠為33306
docker run -di --name=mysql_docker -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
通過docker搭建一個tomcat的環境
-p埠對映
-v實現目錄掛載,將war包拷貝到webapps下,訪問程式
docker run -di --name=myTomcat -p 9000:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7
通過docker部署nginx
可以將靜態原型部署在nginx上面
將靜態原型的資料夾命名為html,使用cp命令將該資料夾拷貝到/nginx/usr/share/nginx/html下
docker -run -di --name=mynginx -p 80:80 nginx
通過docker搭建redis環境
docker -run --name=myredis -p 6379:6379 redis
容器儲存為映象
docker commit 容器名 映象名稱
映象備份
docker save -o 儲存的檔名 原映象名稱
o 指 output
docker save -o tomcat.tar mytomcat
映象的恢復
docker load -i 儲存的映象名
i 指 input
docker load -i mytomcat.tar
DockerFile
什麼是DockerFile
Dockerfile是由一系列命令和引數構成的指令碼,這些命令應用於基礎映象並最終建立一個新的映象。
1、對於開發人員:可以為開發團隊提供一個完全一致的開發環境;
2、對於測試人員:可以直接拿開發時所構建的映象或者通過Dockerfile檔案構建一個新的映象開始工作了;
3、對於運維人員:在部署時,可以實現應用的無縫移植。
DockerFile常見的構建命令
命令 | 作用 |
---|---|
FROM 映象名稱:版本號 | 定義了基礎映象啟動的構件流程 |
MAINTAINER 名字 | 宣告映象的建立者 |
WORKDIR 目錄名稱 | 設定工作目錄 |
RUN commond | 指定執行的目錄,可以寫多個 |
ADD 宿主機檔案 容器目錄 | 將宿主機的檔案複製到容器內,如果是一個壓縮檔案,將會在複製後自動解壓 |
ENV key value | 設定環境變數,可以寫多條 |
COPY 宿主機檔案 容器目錄 | 和ADD相似,但是如果有壓縮檔案並不能解壓 |
使用DockerFile指令碼建立映象
步驟:
- 建立目錄
mkdir –p /usr/local/dockerjdk8
- 下載jdk-8u171-linux-x64.tar.gz並上傳到伺服器(虛擬機器)中的/usr/local/dockerjdk8目錄
- 建立檔案,檔名必須為Dockerfile
vi Dockerfile
#依賴映象名稱和ID
FROM centos:7
#指定映象建立者資訊
MAINTAINER ITCAST
#切換工作目錄
WORKDIR /usr
RUN mkdir /usr/local/java
#ADD 是相對路徑jar,把java新增到容器中
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java環境變數
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
- 執行命令構建映象,注意後邊的空格和點不能省略
docker build -t='jdk1.8' .
5.檢視映象是否完成
docker inages
建立docker的私有倉庫
- 拉取私有倉庫映象
docker pull registry
- 啟動私有倉庫的容器
docker run -di --name=registry -p 5000:5000 registry
- 開啟瀏覽器 輸入地址http://localhost:5000/v2/_catalog看到
{"repositories":[]}
表示私有倉庫搭建成功並且內容為空 - 設定讓docker信任私有倉庫,修改daemon.json
vi /etc/docker/daemon.json
新增一下內容並儲存退出
{"insecure-registries":["宿主機的ip:5000"]}
5.重啟docker服務
systemctl restart docker
映象上傳至私有倉庫
- 標記此映象為私有倉庫的映象
docker tag jdk1.8 宿主機IP地址:5000/jdk1.8
2.重新啟動docker私服容器
docker start registry
3.上傳標記的映象
docker push 宿主機的IP:5000/jdk1.8
從docker私服中拉取映象
1.本地中安裝docker
2.設定docker中的daemon.json檔案,將私服的docker地址新增至本地的docker中
vi /etc/docker/daemon.json
//新增以下內容
{"registry-mirrors":["docker私服的IP地址:5000"]}
3.拉取映象
docker pull docker私服的IP地址:5000/jdk1.8