Docker獲取鏡像以及相關指令


常用命令:
docker倉庫:hub.docker.com
docker pull 下載鏡像,有可能因為鏡像名被轉移到新得鏡像身上,所以可能會出現null得虛懸鏡像pull/build
docker run -it --rm ubuntu:16.04 bash // 以交互的模式運行容器
docker exec -it ubuntu的容器id bash // 以交互的模式進入容器
docker run -p 8080:8080 tomcat // 將宿主機的8080端口映射到容器的8080,所以還可以是80:8080 啟動tomcat 可以在端口號后邊起容器的名字如 docker run -p 80:8080 --name tom1 tomcat
docker run -p 80:8080 --name tomcat1 -d tomcat // 以守護態運行
docker container tomcat1 // 刪除所有終止的容器
docker ps
docker ps -a
docker rm 容器id
docker rmi
docker images
exit/Ctrl + D 退出容器

Docker獲取鏡像

docker pull ubuntu:16.04 命令中沒有給出Docker鏡像倉庫的地址,因此會從Docker Hub獲取鏡像。

顯示鏡像:docker image ls

運行
docker run -it --rm
ubuntu:16.04
bash

運行基於ubuntu:16.04啟動一個容器
-it 以交互的形式運行容器
\ 命令太長的換行符
--rm 退出容器自動刪除該容器
退出容器 exit/Ctrl+D

看正在運行的容器 docker ps
看所有的容器 docker ps -a

更新鏡像 docker pull ubuntu16.04 即重新拉一次

鏡像體積

虛懸鏡像

:即鏡像既沒有倉庫名,也沒有標簽,均為
原因是由docker pull和docker build時,因為官方鏡像維護后,發布新版本,原來的鏡像被轉義到了新下載的鏡像身上,而舊的鏡像上的名字則被取消。
可以用以下命令專門顯示這類鏡像

對於Centos/RHEL的用戶來說,在沒有辦法使用UnionFSd的情況下,一定要配置direct-lvm給devicemapper,無論是為了性能、穩定性還是空間利用率。

docker image rm ubuntu16.04;刪容器
docker rmi 鏡像id 刪鏡像

Dockerfile
Dockerfile腳本 用這個腳本來構建、定制進行
Dockerfile是一個文本文件,內包含一條條的指令,每一條指令構建一層

docker pull tomcat
docker images
docker image ls
docker run -it
tomcat
bash
此時路徑為:/usr/local/tomcat
ls -al
自己裝的軟件必須安裝在/usr/local

cd webapps ll
cd ROOT/
ls -al

echo "hello" > test.txt

docker run -8080:8080 tomcat

docker ps
docker ps -a

docker rm 容器id

docker images
docker run -p 8080:8080 tomcat

from tomcat為文件第一行
所有的dockerfile腳本必須有一個基礎鏡像
run <命令> <尖括號為必填內容>

docker run -it --rm tomcat bash
ls -al 
cd webapps/ 
cd ROOT/
ls -al
pwd

在/usr/local/docker 下創建一個目錄

mkdir tomcat
cd tomcat/
ll
vi Dockerfile
FROM tomcat
RUN echo "Hello Docker" > /usr/local/tomcat/webapps/ROOT/index.html

cat Dockerfile

寫完腳本開始構建鏡像

docker build -t shop .

其中. 表示當前目錄,鏡像的構建需要基於dockerfile當前目錄 shop是標簽,起的名字

docker run -it shop bash
ls -al
cd webapps/
ls -al
cd ROOT/
ls -al
cat index.html

刪除ROOT目錄所有文件
vi Dockerfile

FROM tomcat 
RUN cd /usr/local/tomcat/webapps/ROOT/
RUN rm -fr *
RUN echo "Hello Docker" > /usr/local/tomcat/webapps/ROOT/index.html

報錯了,把ROOT目錄也刪除了,
docker images

vi Dockerfile

FROM tomcat 
WORKDIR cd /usr/local/tomcat/webapps/ROOT/
RUN rm -fr *
RUN echo "Hello Docker" > /usr/local/tomcat/webapps/ROOT/index.html

docker run -it --rm shop bash

ls -al
docker image prune
docker rmi imageID

容器是基於鏡像的
先退出容器
docker ps
docker ps -a
docker ps imageID

docker build -t mysql .
尋找Dockfile 構建一個鏡像上下文(Context)

cd /usr/local/docker/
ll
rm -fr mysql/
ll
cd com
rm -fr ROOT/
ll
cd tomcat/
HOST OS宿主機上操作docker build -t shop
將當前目錄打包,請求RESTAPI,還帶着這個目錄的壓縮包,
Docker Server接收Docker build 解壓縮,構建鏡像

COPY ./package.json /app/
這並不是要復制執行docker build 命令所在目錄下的package.json,也不是復制DOckerfile所在目錄下的package.json,而是復制上下文(context)目錄下的package.json。這個命令中的源文件的路徑是相對路徑

拷貝index.html到

FROM tomcat
COPY index.html /usr/local/tomcat/webapps/ROOT/

docker build -t shop .

docker run -it --rm shop bash

學習要有目的性,以最快的方式完成任務

部署項目到Docker容器

  1. 拷貝shop.zip -> tomcat/webapps/ROOT/
  2. 修改訪問端口號為80

COPY <源路徑>...<目標路徑>
// 源路徑指的是上下文路徑,即文件在docker server解壓后得路徑,目標路徑指的是鏡像內得路徑如 /usr/local/tomcat/webapps/ROOT

vi Dockerfile

FROM tomcat
COPY shop.zip /usr/local/tomcat/webapps/ROOT
RUN unzip shop.zip

WORKDIR 為工作目錄,如果目錄不存在,WORKDIR會幫你建立目錄
每一個指令都會構建一個分層
每一個RUN都是啟動一個容器,即使失敗了,也啟動了,會導致直接刪除了不了鏡像,所以需要先回去把該容器刪除再刪鏡像 正常情況下,--rm 會自動刪除

vi Dockerfile

FROM tomcat
WORKDIR /usr/local/tomcat/webapps/ROOT
RUN rm -fr *
COPY shop.zip .
RUN unzip shop.zip

:wq!

build -t shop .

解壓縮之后還需要一個命令
vi Dockerfile

FROM tomcat
WORKDIR /usr/local/tomcat/webapps/ROOT
RUN rm -fr *         #刪除ROOT目錄下所有內容
COPY shop.zip .
RUN unzip shop.zip
RUN rm -fr shop.zip
WORKDIR /usr/local/tomcat  #切換到鏡像本身的工作空間

:wq!

build -t shop .

ADD

ADD指令和COPY的格式和性質基本一致 ADD指令會自動解壓縮這個文件到<目標路徑>中去

vi Dockerfile

FROM tomcat
WORKDIR /usr/local/tomcat/webapps/ROOT
RUN rm -fr *         
ADD shop.tar.gz .
WORKDIR /usr/local/tomcat

:wq!

docker build -t shop .
可以看到他是把整個目錄都打包了體積變的越來越大

docker run -it --rm shop bash

cd webapps/
cd ROOT/
ls -al
可以看到自動解壓縮了,並且原來的tar包也被刪除了
但是某些情況下,如果我們真的是希望復制個壓縮文件進去,而不解壓縮,這時就不可以使用ADD命令了。

接下來是修改端口號為80
docker image prune

docker run -p 8080:8080 tomcat

-p 的意思是 port端口

EXPOSE <端口1> [<端口2>...]
EXPOSE指令只是一個聲明,運行時並不會因為這個聲明應用就會開啟這個端口的服務。
在dockerfile中寫入這樣的聲明有兩個好處,一個是幫助進行使用者理解這個鏡像服務的守護端口,以方便配置映射;另一個好處是在運行時使用隨機端口映射時,也就是
docker run -P時,會自動隨機映射EXPOSE的端口

EXPOSE 8080:8080 暴露端口號

** CMD [參數2,參數2...]**
一個容器就是一個進程,一個程序
設置腳本時 設置參數的占位符 如$1、$2

test.sh
SET PATH=$1

test.sh /usr/local/tomcat
其中/usr/local/tomcat就是路徑傳入的參數
如傳入三個參數 catalina.sh run stop restart成功的話, 則在catalina.sh中是有三個占位符的

docker build -t 鏡像名稱 .
構建實際上是打包本目錄文件到服務端去構建然后返回響應內容
鏡像上下文-》指的是打包后到docker server中解壓后得目錄(而不是宿主機得目錄)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM