文章目錄
- Docker概念
- 啟動第一個Docker容器
- Docker執行流程以及一些配置鏡像倉庫
- 常用指令
- Dockerfile
- Docker compose
Docker概念
docker行程隔離,隔離級別在作業系統層面隔離,
| 概念 | 說明 |
|---|---|
| Docker 鏡像(Images) | Docker 鏡像是用于創建 Docker 容器的模板,比如 Ubuntu 系統, |
| Docker 容器(Container) | 容器是獨立運行的一個或一組應用,是鏡像運行時的物體, |
| Docker 客戶端(Client) | Docker 客戶端通過命令列或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 與 Docker 的守護行程通信, |
| Docker 主機(Host) | 一個物理或者虛擬的機器用于執行 Docker 守護行程和容器, |
| Docker Registry | Docker 倉庫用來保存鏡像,可以理解為代碼控制中的代碼倉庫,Docker Hub(https://hub.docker.com) 提供了龐大的鏡像集合供使用,一個 Docker Registry 中可以包含多個倉庫(Repository);每個倉庫可以包含多個標簽(Tag);每個標簽對應一個鏡像,通常,一個倉庫會包含同一個軟體不同版本的鏡像,而標簽就常用于對應該軟體的各個版本,我們可以通過 <倉庫名>:<標簽> 的格式來指定具體是這個軟體哪個版本的鏡像,如果不給出標簽,將以 latest 作為默認標簽, |
| Docker Machine | Docker Machine是一個簡化Docker安裝的命令列工具,通過一個簡單的命令列即可在相應的平臺上安裝Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure, |
同maven一樣都統一的倉庫遠程倉庫,以及可以配置自己的本地倉庫:遠程倉庫即為docker hub
啟動第一個Docker容器
第一個docker:
docker run hello-world
看見和hello world相關出現即成功,
Docker執行流程以及一些配置鏡像倉庫
docker啟動常規,先Pull鏡像,再run 鏡像
鏡像默認從docker hub拉去,地址為:https://hub.docker.com/
國內有幾個鏡像可以使用:
- 科大鏡像:https://docker.mirrors.ustc.edu.cn/
- 網易:https://hub-mirror.c.163.com/
- 阿里云:https://<你的ID>.mirror.aliyuncs.com
- 七牛云加速器:https://reg-mirror.qiniu.com
根據不同可參考菜鳥的Docker鏡像加速文章:https://www.runoob.com/
如果是使用docker toolbox在config檔案里配置
拉取鏡像的指令,以mysql為例(mysql5.7,具體寫法可參考docker hub的tags里面):
docker pull mysql:5.7
常用指令
docker常用命令:
docker執行命令:docker [options] commond(具體命令) ---注意中括號處條件可選填使用
1.輔助命令:
docker info ----查看docker資訊(可看系統層面以及docker鏡像下載地址以及鏡像等資訊)
docker version ----查看docker版本號,相關的安裝資訊
docker --help 或者 docker ----查看docker相關指令幫助
2.images鏡像命令:
docker images ----列出當前docker的所有鏡像
docker image ls ----同樣也是列出docker的所有鏡像
docker images 鏡像名 ----過濾,如查Mysql相關的各版本 docker images mysql
docker images -a -----展示所有鏡像,a不寫默認也是all
docker images -q -----展示容器鏡像,可組合使用
docker rmi -f $(docker images -q) ----洗掉所有鏡像和容器
docker pull 鏡像名稱:版本號 ----拉取鏡像最常用方法
docker pull 鏡像名:摘要
docker search 鏡像名稱:版本號(不帶版本號就是最新的) ----鏡像搜索(帶OFFICIAL的是官方鏡像)
docker image --help ----查看鏡像相關的版本指令
docker image rm 鏡像id -f ----帶f強制洗掉鏡像以及容器,不帶-f就是只刪鏡像,如果有實體就不可洗掉
docker rmi 鏡像id(可簡寫,寫前面幾位,不和其他id產生歧義即可) -f ----洗掉的簡略寫法(-f同上,強制洗掉容器以及鏡像)
docker save 要匯出的鏡像名:tar版本號 -o 備份出來的名稱:版本號 ----匯出鏡像
使用案例:docker save mysql:5.7 -o mysql_5.7.tar(值得注意的是匯出的鏡像檔案名不能使用:冒號)
docker load -i 鏡像tar包的檔案名 ----匯入鏡像(docker images查看匯入結果)
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 d54bd1054823 4 days ago 449MB
REPOSITORY 鏡像名稱, TAG鏡像的版本, IMAGE ID 為鏡像唯一id,CREATED為該鏡像創建時間不是我們的拉取時間, SIZE為鏡像大小
3.contrainer容器命令:(注意掛載埠不止一個的時候可以寫多個-p)
docker run 鏡像名:版本 或者 鏡像id ----啟動鏡像生成一個實體容器
docker load -i 鏡像 ----匯入鏡像
docker ps ----查看docker正在運行的容器
docker ps -a ----查看docker所有容器
docker ps -q ----查看正在運行的容器id
docker ps -qa ----查看所有容器id
docker run 鏡像名:版本 或者 鏡像id ----在docker中啟動實體
docker run -p 宿主機埠:容器埠 鏡像名:版本 或者 鏡像id ----掛載啟動這樣外部才能訪問
例子如:docker run -p 80:80 nginx 然后訪問docker使用的ip,埠號都可
docker run -d -p 宿主機埠:容器埠 鏡像名:版本 或者 鏡像id ----后臺啟動
docker run -d -p 宿主機埠:容器埠 --name 指定容器名 鏡像名:版本 或者 鏡像id ----指定名字掛載啟動,例如:docker run -d -p 82:80 --name nginx82 nginx
docker stop 容器id 或者 容器的名字 ----停止容器
docker start 容器id 或者 容器的名字 ----啟動容器
docker restart 容器id 或者 容器的名字 ----重新啟動容器
docker rm 容器名稱或者容器id -f ----洗掉容器實體,-f是強制洗掉
docker rm -f $(docker ps -aq) ----洗掉強制所有容器
docker logs 容器名或容器id ----查看容器日志
docker logs -f 容器名或容器id ----查看實時容器日志
docker logs -tf 容器名或容器id ----加入時間戳實時展示容器日志
docker logs --tail 顯示最后幾行數 容器名或容器id ----現在最后的N行的容器日志數
docker top 容器名或容器id ----查看容器行程數
docker exec -it 容器名或容器id bash ----進入容器內部命令列(可使用ls,cd,exit等命令),切記容器必須已經開啟
docker commit -m '描述' -a '作者' 容器名或者容器id 新鏡像名字:版本號 下面的為例指令如:
docker commit -m 'deploy ruoyi-admin' -a 'calmtho' tomcat02 ry:1.0
將已有容器打包成新的鏡像(生成完后使用查看鏡像指令,就會發現我們的鏡像已經生成了),自己打包的鏡像和我們從docker hub下載下來的啟動方式是一致的
docker inspect 容器id或者容器名 ----查看容cha器相關的詳細資訊,如網路等
docker logs -f 容器id ----查看容器日志
4.作業系統與容器的檔案互動
4.1容器詳情對照:
| CONTAINER ID(容器ID) | IMAGE(鏡像名) | COMMAND(容器內啟動使用命令) | CREATED(創建容器時間) | STATUS(狀態) | PORTS(埠) | NAMES(別名) |
|---|---|---|---|---|---|---|
| 20b5faa63625 | nginx | “/docker-entrypoint.…” | About a minute ago | Up About a minute | 80/tcp | inspiring_poincare |
4.2容器互動指令
docker cp 容器名字或者id:檔案全路徑 作業系統的路徑 ----將檔案從容器復制到作業系統(檔案目錄都可以)
例子:docker cp dt:/usr/local/tomcat/RUNNING.txt ./RUNNING.txt
docker cp 宿主機路徑 容器名字或者id:容器內檔案全路徑 ----將檔案復制到作業系統(檔案目錄都可以)
例子: cp ./unintall.log dt:/usr/local/cp.log
docker inspect dt ----看容器資訊
資料卷volumn容器和宿主作業系統互動橋梁,可以共同操作這個目錄,容器啟動時就必須指定:
docker run -d -p 宿主機埠:容器埠 --name 指定容器名 -v 宿主機路徑:容器目錄 鏡像名:版本 或者 鏡像id (指定目錄,如果宿主機這個檔案夾有東西會刪掉這里面的東西,在容器中使用寫操作)
docker run -d -p 宿主機埠:容器埠 --name 指定容器名 -v 一個不存在的目錄名:容器目錄 鏡像名:版本 或者 鏡像id (自動復制有的東西出來和外面掛載,目錄自動創建,不寫操作)
5.docker的網路連接以及其網橋操作(因為默認是網橋模式,所以是網橋名,實際是網路連接項名稱)
docker inspect dt ----看容器資訊(包含該容器的網橋資訊)
docker network ls ----查看網路連接配置
docker network create -d bridge 網橋名稱 ----創建網橋(可看見網橋下有的容器)
簡寫方式:因為docker創建網路連接默認使用網橋 docker network create 網橋名
docker network inspect 網橋名稱 ----指定網橋名稱,查看具體網橋資訊
docker network connect 網橋名稱 容器名稱 ----指定容器連接指定網橋
docker network rm 網橋名稱 ----洗掉網橋(需要容器沒有運行在此網橋上)
補充一下,如果要讓鏡像實體容器的時候使用指定網橋的話,可以docker run指令上加入--network 網橋名
6.資料卷
資料卷指令往往是結合容器指令使用的,應該在實體容器的時候結合使用-v 自定義絕對路徑或者由系統自動創建
1.資料的作用:
用來實作容器和宿主機之間資料共享
2.資料卷特點
a.資料卷可以在容器之間共享和重用
b.對資料卷的修改會立即影響到對應容器
3.一般我們希望宿主機影響容器,不希望容器影響宿主機,可以指令中配置資料卷配置加上:ro(read only只讀的意思)
操作資料卷指令:
docker volume ls ----查看資料卷
docker volume inspect 資料卷名 ----查看資料卷詳情
mysql:
docker run --name mysql5.7 -d -p 6700:3306 -v mysql:/var/lib/mysql -e /var/lib/mysql -e MYSQL_ROOT_PASSWORD=root3306 m ysql:5.7.32
當然還可以指定組態檔啟動
redis:
docker run --name redis -d -p 6380:6379 -v redisdata:/data redis:5.0.10 redis-server --appendonly yes
consul:(單節點)
docker run --name consul -d -p 8500:8500 consul
es:值得注意的啟動es的時候需要配置相關記憶體引數,或者去修改配置
docker run -d -e ES_JAVA_POTS="-Xms256m -Xmx256m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 --name elasticsearch elasticsearch:6.8.0
一般使用的時候需要配置es配置,es資料存盤,es插件目錄都需要掛載資料卷,甚至可以直接掛載es大的目錄,如果沒有自定義es的jvm則需要手動修改系統引數
docker run -d -e ES_JAVA_POTS="-Xms256m -Xmx256m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 --name elasticsearch -v D:\docker_v\es\elasticsearch\data:/usr/share/elasticsearch/data -v D:\docker_v\es\elasticsearch\plugins:/usr/share/elasticsearch/plugins -v D:\docker_v\es\elasticsearch\config:/usr/share/elasticsearch/config elasticsearch:6.8.0
kibana:指定配置關聯的es的url
docker run -d --name kibana -p 5601:5601 -e ELASTICSEARCH_URL=http://ip:9200 kibana:6.8.0
掛載資料卷的形式,然后修改里面的yml檔案即可,動態修改ip,修改完,停一下容器后再啟動即可
docker run -d --name kibana -p 5601:5601 -v kibanaconfig:/usr/share/kibana/config -e ELASTICSEARCH_URL=http//ip:9200 kibana:6.8.0
Dockerfile
dockerfile撰寫:
1.創建一個Dockerfile檔案,并且指定自定義鏡像資訊
Dockerfile檔案中常用的內容:
from:指定當前自定義鏡像的依賴
copy:將相對路徑下的內容復制到自定義的鏡像中
workdir:宣告鏡像的默認作業目錄
cmd:需要執行的命令(在workdir下執行的,cmd可以寫多個,只以最后一個為準)
例子:
from daocloud.io/library/tomcat:8.5.15-jre8
copy ssm.war /usr/local/tomcat/webapps
2.將準備號的Dockerfile和相應的檔案拖拽到Linux系統中,通過Docker的命令制作鏡像
docker build -t 鏡像名稱[:tag]
Docker compose
docker compose撰寫:
version: '3.1'
services:
mysql: #服務的名稱
start: always #代表只要docker啟動,那么這個容器就跟著一起啟動
image: daocloud.io/library/ mysql:5.7.4#指定鏡像路徑
container_name : mysql #指定容器名稱
ports:
- 3306:3306 #指定埠號的映射
environment :
MYSQL_RO0T_PASSWORD: root #指定MySQL的ROOT用戶登錄密碼
TZ: Asia/Shanghai #指定時區
volumes :
- /opt/docker_mysql_tomcat/mysql_data:/var/lib/mysql #映射資料卷
tomcat :
restart: always
image: daocloud.io/library/tomcat:8.5.15-jre8
container_name : tomcat
ports:
-8080:8080environment:
TZ: Asia/Shanghai
volumes:
- /opt/docker_mysql_tomcat/tomcat_webapps :/usr/local/tomcat/webapps
- /opt/docker_mysql_tomcat/tomcat_logs:/usr/local/tomcat/logs
在指定目錄下使用docker-compose指令,需要在有docker-compose.yml的目錄下,如上面檔案的/opt/docker_mysql_tomcat/下執行:
1.啟動:
docker-compose up -d
2.關閉并洗掉容器:
docker-compose down
3.開啟關閉重啟已經存在的docker-compose容器
docker-compose start
docker-compose stop
docker-compose restart
4.查看docker-compose管理的容器
docker-compose ps
5.查看日志
docker-compose logs -f
類似docker指令
使用docker-compose配置Dockerfile使用
docker-compose.yml
version: '3.1'
services:
ssm:
restart: always
build:
context: ../
dockerfile: Dockerfile
image: ssm:1.0.1
container_name: ssm
ports:
- 8081:8080
environment:
TZ: Asia/Shanghai
Dockerfile檔案:(由上面的配置可知,我們的dockerfile以及war包放在docker-compose的上一級)
from daocloud.io/library/tomcat:8.5.15-jre8
copy ssm.war /usr/local/tomcat/webapps
#可以直接啟動基于docker-compose.yml以及Dockerfile檔案構建的自定義鏡像
docker-compose up -d
#如果自定義鏡像不存在,會幫助我們構建出自定義鏡像,如果自定義鏡像已經存在,會直接運行這個自定義鏡像
#如果要使用重新構建的話,
#重新構建自定義鏡像
docker-compose build
#運行前,重新構建
docker-compose up -d --build
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/273349.html
標籤:其他
上一篇:PCL去點云質心
