Docker常用指令
鏡像相關指令
1. 檢視鏡像
docker images
REPOSITORY :鏡像名稱
TAG:鏡像标簽
IMAGE ID:鏡像
ID CREATED:鏡像的建立日期(不是擷取該鏡像的日期)
SIZE:鏡像的大小 鏡像都存在與Ddocker主控端的/var/lib/docker目錄下
2. 搜尋鏡像
docker search 鏡像名稱
NAME:倉庫名稱
DESCRIPTION:鏡像描述
STARS:使用者評價,反應鏡像的受歡迎程度
OFFICIAL:是否官方
AUTOMATED:自動建構,表示該鏡像由Docker Hub自動建構流程建立的
3. 拉取鏡像
拉去鏡像就是從 中央倉庫下載下傳鏡像到本地
docker pull 鏡像名稱
例如下載下傳centos
docker pull centos
4. 删除鏡像
按鏡像ID删除鏡像
docker rmi 鏡像ID
5. 删除所有鏡像
容器相關指令
1. 建立與啟動容器
建立容器常用的參數說明:
建立容器指令:
docker run
-i:可表示運作容器
-t:表示容器啟動後會進入其指令行。加入這兩個參數後,容器建立就能登入進去。即配置設定一個僞終端。
--name :為建立的容器命名。
-V:表示目錄映射關系(前者是主控端目錄,後者是映射到主控端上的目錄),可以使用多個- v做多個目錄或檔案映射。注意:最好做目錄映射,在主控端上做修改,然後共享到容器上。
-d:在run後面加上-d參數,則會建立一個守護式容器在後 台運作(這樣建立容器後不會自動登入容器,如果隻加-i-t兩個參數,建立後就會自動進去容器)。
p:表示端口映射,前者是主控端端口,後者是容器内的映射端口。可以使用多個-p做多個端口映射
- 互動式方式建立容器
docker run -it --name=容器名稱 鏡像名稱:标簽/bin/bash
這時我們通過ps指令檢視,發現可以看到啟動的容器,狀态為啟動狀态
退出目前容器
exit
- 以守護式方式建立容器
docker run -di --name=容器名稱 鏡像名稱:标簽
登陸守護式容器方式:
docker exec -it 容器名稱(或容器ID) /bin/bash
2. 停止與啟動容器
停止容器:
啟動容器:
3. 檢視容器
檢視正在運作的容器
檢視所有容器
docker ps -a
檢視最後一次運作的容器
docker ps -l
檢視停止的容器
docker ps -f status=exited
檔案拷貝
如果我們需要将檔案拷貝到容器内可以使用cp指令
docker cp 需要拷貝的檔案或目錄 容器名稱:容器目錄
也可以将檔案從容器内拷貝出來
docker cp 容器名稱:容器目錄 需要拷貝的檔案或目錄
目錄挂載
在建立容器的時候,将主控端的目錄與容器内的目錄進行映射,這樣就可以通過修改主控端某個目錄的檔案進而去影響容器。
建立容器 添加-v參數 後邊為 主控端目錄:容器目錄,例如:
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
如果你共享的是多級的目錄,可能會出現權限不足的提示。
這是因為CentOS7中的安全子產品selinux把權限禁掉了,我們需要添加參數 --privileged=true 來解決挂載的目錄沒有權限的問題
檢視容器IP位址
我們可以通過以下指令檢視容器運作的各種資料
docker inspect 容器名稱(容器ID)
也可以直接執行下面的指令直接輸出IP位址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱(容器ID)
删除容器
删除指定的容器:
docker rm 容器名稱(容器ID)
應用部署
MySQL部署
(1)拉取mysql鏡像
docker pull centos/mysql-57-centos7
(2)建立容器
docker run -di --name=tensquare_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
-p 代表端口映射,格式為 主控端映射端口:容器運作端口
-e 代表添加環境變量 MYSQL_ROOT_PASSWORD 是root使用者的登陸密碼
(3)遠端登入mysql
連接配接主控端的IP ,指定端口為33306
tomcat部署
(1)拉取鏡像
docker pull tomcat:7-jre7
(2)建立容器
建立容器 -p表示位址映射
docker run -di --name=mytomcat -p 9000:8080
-v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7
Nginx部署
(1)拉取鏡像
docker pull nginx
(2)建立Nginx容器
docker run -di --name=mynginx -p 80:80 nginx
Redis部署
(1)拉取鏡像
docker pull redis
(2)建立容器
docker run -di --name=myredis -p 6379:6379 redis
遷移與備份
容器儲存為鏡像
我們可以通過以下指令将容器儲存為鏡像
docker commit mynginx mynginx_i
鏡像備份
我們可以通過以下指令将鏡像儲存為tar 檔案
docker save -o mynginx.tar mynginx_i
鏡像恢複與遷移
首先我們先删除掉mynginx_img鏡像 然後執行此指令進行恢複
docker load -i mynginx.tar
-i 輸入的檔案
執行後再次檢視鏡像,可以看到鏡像已經恢複
Dockerfile
什麼是Dockerfile
Dockerfile是由一系列指令和參數構成的腳本,這些指令應用于基礎鏡像并最終建立一個新的鏡像。
1、對于開發人員:可以為開發團隊提供一個完全一緻的開發環境;
2、對于測試人員:可以直接拿開發時所建構的鏡像或者通過Dockerfile檔案建構一個新的鏡像開始工作了;
3、對于運維人員:在部署時,可以實作應用的無縫移植。
常用指令
指令 | 作用 |
---|---|
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_dir/file | 和ADD相似,但是如果有壓縮檔案并不能解壓 |
WORKDIR path_dir | 設定工作目錄 |
使用腳本建立鏡像
步驟:
(1)建立目錄
mkdir –p /usr/local/dockerjdk8
(2)下載下傳jdk-8u171-linux-x64.tar.gz并上傳到伺服器(虛拟機)中的/usr/local/dockerjdk8目錄
(3)建立檔案Dockerfile
vi Dockerfile
#依賴鏡像名稱和ID
FROM centos:7
#指定鏡像建立者資訊
MAINTAINER XIAOTIAN
#切換工作目錄
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
(4)執行指令建構鏡像
docker build -t='jdk1.8' .
注意後邊的空格和點,不要省略
(5)檢視鏡像是否建立完成
docker images
Docker私有倉庫
私有倉庫搭建與配置
(1)拉取私有倉庫鏡像(此步省略)
docker pull registry
(2)啟動私有倉庫容器
docker run -di --name=registry -p 5000:5000 registry
(3)打開浏覽器 輸入位址http://192.168.184.141:5000/v2/_catalog看到
{"repositories":[]}
表示私有倉庫搭建成功并且内容為空
(4)修改daemon.json
vi /etc/docker/daemon.json
添加以下内容,儲存退出。
此步用于讓 docker信任私有倉庫位址
(5)重新開機docker 服務
systemctl restart docker
鏡像上傳至私有倉庫
(1)标記此鏡像為私有倉庫的鏡像
docker tag jdk1.8 192.168.184.141:5000/jdk1.8
(2)再次啟動私服容器
docker start registry
(3)上傳标記的鏡像
docker push 192.168.184.141:5000/jdk1.8